align char[]
От: wl. Россия  
Дата: 02.10.19 20:23
Оценка:
Допустим, есть массив:
static char libc[0xf8000] {0,};

в который я загружаю код, и потом запускаю. Мне нужно, что адрес начала массива libc был кратен некоторому числу например, 0x10000. Сам бинарник можно загрузить в IDA Pro с нулевого адреса, и чтобы найти нужное смещение, где упала программа, нужно вычитать из адреса крэша адрес массива libc, что очень неудобно, если начало невыравнено.
Память можно выровнять, если выделять ее динамически, через _aligned_malloc() например, но IDA не запоминает точки останова в динамически выделенной памяти. Точнее точка останова вроде как есть, но IDA на ней не останавливается
Re: align char[]
От: koenjihyakkei Россия  
Дата: 02.10.19 20:46
Оценка: +2
Здравствуйте, wl., Вы писали:

alignas(0x10000) static char libc[0xf8000] {0,};
Re[2]: align char[]
От: wl. Россия  
Дата: 03.10.19 18:29
Оценка:
Здравствуйте, koenjihyakkei, Вы писали:

K>Здравствуйте, wl., Вы писали:


K>
K>alignas(0x10000) static char libc[0xf8000] {0,};
K>


Спасибо! Компилятор заругался, что максимальное значение может быть не больше 4096, но я просто забил мусором перед буфером до нужного значения.
Изначальный баг забавный оказался — внутри секции данных был блок данных размером 0x18 байт с флагом R/O, а VirtualProtect() действует на всю страницу в 4кб, ну и крашился на попытке записи по адресу только для чтения
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.