gpt4 book ai didi

c++ - 编译器误区

转载 作者:行者123 更新时间:2023-11-30 01:55:02 25 4
gpt4 key购买 nike

我有以下代码:

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 上的 DUMP 上看到的关于 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,所以我很糟糕 :)

最佳答案

我想你想要的是

 ori_iat++

因为在 C/C++ 中

       ptr + i

相当于

       &(ptr[i])

关于c++ - 编译器误区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21178230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com