我正在检查带有'PE Editor'的Windows可执行文件,它将Entry point显示为0x15B8,我们如何将此入口点的地址确定为虚拟地址?
答案 0 :(得分:1)
入口点相对于模块的加载地址存储。
模块可以通过设置ImageBase
中的IMAGE_OPTIONAL_HEADER
字段来声明其首选地址(请参阅this page)。但是,操作系统可以自由选择另一个地址,因为首选地址正在使用中,或者,由于ASLR,这些天。
我不确定你在运行这个环境的是什么环境,但如果你正在使用一个实时运行的程序:这是一个实现细节,但是在NT上你可以将HMODULE
强制转换为指针那是模块的加载地址。您还可以根据它读取PE头。例如,您可以将AddressOfEntryPoint
成员添加到HMODULE
的地址并找到一个入口点...如果不是加载时间信息,您需要将类似字节偏移量放入文件中,你必须解析节标题以找到文件中的位置。