我刚刚经历了[1],我注意到以下摘录:
“导出函数的要求是一个名称,一个地址和一个导出序号,你可能会认为PE格式的devise者会把这三个项目放到一个结构中,然后有一个这样的结构的数组“。 “相反,导出条目的每个组件都是数组中的一个元素,这些数组中有三个(AddressOfFunctions,AddressOfNames,AddressOfNameordinals),它们都是相互平行的。
我很好奇为什么它实现为三个不同的数组,而不是三个指针的结构。
谢谢!
C ++入口点 – > main()
如何判断一个Windows PE文件是一个控制台子系统还是一个Windows子系统编程?
可移植可执行的结构说
PE是每个DLL还是每个exe的“IMPORT ADDRESS TABLE”?
[1] [http://msdn.microsoft.com/en-us/library/ms809762.aspx] [1]
如何在Linux中将PE(Portable Executable)格式转换为ELF格式
当'OrdinalBase`字段设置为1时,kernel32.dll如何导出一个0的序号?
在Delphi中使用COM支持在DLL和.EXE之间切换
在Linux中创build一个与系统无关的最小Python脚本
Windows初始执行上下文
是的,这个结构有些复杂。 除了历史原因之外,它可能是通过序号(而不是名称)访问导入符号的最佳选择。
如果我没有记错, AddressOfFunctions是一个RVA(相对于图像库的指针)到一个包含导出符号的RVAs的数组。 序号是这个数组中的一个索引。 所以,如果你有它,你可以快速识别符号。
OTOH如果只有符号名称,则AddressOfNames是包含指向ascii字符串符号名称的指针的数组的RVA。 您必须找到该符号,然后使用AddressOfNameordinals指向的数组中的找到的索引,这将为您提供符号序号。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。