IMAGE_THUNK_DATA结构中Function域和AddressOfData域的区别?

问题描述 投票:0回答:1

我正在尝试 PE 格式的代码示例,但有一部分代码看起来像这样

auto iatArr = (IMAGE_THUNK_DATA*)(exeBuf + offset_impAddrArr);
        for (int i = 0; i < len_iatCallVia; iatArr++,i++) {
            if (auto nameRVA = iatArr->u1.Function) {
                PIMAGE_IMPORT_BY_NAME k = (PIMAGE_IMPORT_BY_NAME)(exeBuf + rvaToOffset(exeBuf, nameRVA));
                printf("[+] imported API -- %s (hint = %i)\n", &k->Name, k->Hint);

            }
        }

所以问题是我想知道为什么作者使用“Function”字段而不是AddressOfData,因为我认为Function字段存储了函数的地址,那么为什么地址可以直接转换为PIMAGE_IMPORT_BY_NAME??

我用谷歌搜索了一些关于 IMAGE_THUNK_DATA 和 IAT 之类的结构的信息,但我发现的只是人们关注如何使用 IAT,我唯一发现有点用处的是here 它告诉了

DWORD Function;       // Memory address of the imported function
DWORD AddressOfData;  // RVA to an IMAGE_IMPORT_BY_NAME with the imported API name
c windows portable-executable
1个回答
0
投票

'AddressOfData
'列将RVA存储到
'IMAGE IMPORT BY NAME'
结构中,其中包含导入的API名称,而
'Function'
字段保存导入函数的RVA。
'AddressOfData'
属性提供导入 API 的名称和提示,而
'Function'
字段标识正在导入的实际函数。

© www.soinside.com 2019 - 2024. All rights reserved.