我有以下代码:编译器误解
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
这是不是我想要的,因为IMAGE_THUNK_DATA的的sizeof应该是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:也在寻找它有四个DWORD这是大小0x10h的IMAGE_THUNK_DATA但据我所看到的对倾倒在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.
求助:感谢++运营商。我不习惯与指针的工作,也是IMAGE_THUNK_DATA结构的实际大小4.每个IMAGE_IMPORT_DESCRIPTOR指向下一个IMAGE_THUNK_DATA,所以我不好:)
您是否考虑过帧对齐优化?尝试'-O0' –