我有以下代码:
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的大小应该是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添加到当前指针中,这真的很烦人。
更新:还在查看IMAGE_THUNK_DATA,它有4个DWORDS,大小为0x10h,但根据我在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,所以我很糟糕:)
发布于 2014-01-17 05:03:38
我想你想要的是
ori_iat++因为在C/C++中
ptr + i等于
&(ptr[i])发布于 2014-01-17 05:12:17
sizeof返回字节。将1添加到指针会根据数据类型的大小增加指针的大小。
ori_iat += sizeof(IMAGE_THUNK_DATA)根据你的说法
ori_iat += 8因此,这增加了ori_iat的8 * sizeof(*ori_iat),它应该是64,而不是程序集(0x10)中显示的16。
因此,sizeof(IMAGE_THUNK_DATA)必须是16的平方根,即4。
实际上,汇编程序的下一个片段显示大小实际上是4,而不是8(因为您不是在添加指针,而是添加到一个普通整数变量中,它只会直接添加数字)。
https://stackoverflow.com/questions/21178230
复制相似问题