IMAGE_THUNK_DATA中Function与AddressOfData字段的区别及代码疑问
关于IMAGE_THUNK_DATA字段用法的疑问解答
- 首先要明确:
IMAGE_THUNK_DATA本质是一个联合(union)结构,Function和AddressOfData是同一块内存的不同别名,共享同一个存储位置,只是语义对应不同阶段。 - 在PE文件未完成导入绑定的阶段(比如刚加载到内存还没处理导入表时),这块内存存储的是
IMAGE_IMPORT_BY_NAME的RVA。此时不管读取Function还是AddressOfData,拿到的都是同一个值——有些开发者习惯用Function字段指代这个初始RVA,本质和用AddressOfData没有区别。 - 当PE完成导入绑定后,这块内存会被覆盖成函数的实际内存地址,这时候才是
Function字段的语义,AddressOfData字段不再有意义。 - 这类代码示例这么写,要么是为了简化逻辑(不管阶段直接用同一个字段读取初始值),要么是延续了特定工具链或老代码的写法,只要逻辑上是在导入绑定前读取这个值,就不会有问题。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

