я следующий код:Compiler недоразумение
IMAGE_THUNK_DATA* ori_iat;
ori_iat += sizeof(IMAGE_THUNK_DATA)
generates the asm:
MOV EAX, ORI_IAT;
ADD EAX, 10h;
MOV ORI_IAT; EAX
Который не то, что я хотел, так как SizeOf из IMAGE_THUNK_DATA должно быть 8, Сейчас я стараюсь это:
IMAGE_THUNK_DATA* ori_iat;
DWORD addr = (DWORD)ori_iat;
addr += sizeof(IMAGE_THUNK_DATA)
ori_iat = (IMAGE_THUNK_DATA)addr;
generates the asm:
MOV ADDR, ORI_IAT;
ADD ADDR, 4;
MOV ORI_IAT, ADDR;
Опять неправильно, теперь давайте попробуем это:
IMAGE_THUNK_DATA* ori_iat;
ori_iat += (DWORD)sizeof(IMAGE_THUNK_DATA);
generates the asm:
MOV EAX, ORI_IAT
MOV ECX, 10h
LEA EAX, [EAX+ECX*4]
Очень плохо, я не знаю, как рассказать компилятору, я просто хочу добавьте 8 к текущему указателю и его действительно раздражает.
UPDATE: ищет Также на IMAGE_THUNK_DATA он имеет 4 DWORDs, который является размер 0x10h, но в зависимости от того, что я вижу на DUMP на OllyDbg относительно структуры IMAGE_THUNK_DATA его так:
C5 87 87 00 | 00 00 00 00
DB 87 87 00 | 00 00 00 00
F7 87 87 00 | 00 00 00 00
0E 88 87 00 | 00 00 00 00
Это приводит меня чтобы думать, что размер структуры на самом деле равен 8.
SOLVED: Спасибо за оператора ++. Я не привык работать с указателями, также IMAGE_THUNK_DATA структура его на самом деле размер 4. Каждый IMAGE_IMPORT_DESCRIPTOR указывает на следующий IMAGE_THUNK_DATA, так мне плохо :)
Вы рассмотрели оптимизацию выравнивания кадров? Попробуйте '-O0' –