Debugging 从磁盘偏移量计算Win PE文件任何部分的内存偏移量

Debugging 从磁盘偏移量计算Win PE文件任何部分的内存偏移量,debugging,portable-executable,Debugging,Portable Executable,假设我有一个PE文件(例如Notepad.exe)。假设文件保存在硬盘中时,notepad.exe的.text部分的偏移量为0xabcdefgh 那么,假设ASLR未启用,当相同的可执行文件(notepad.exe)在执行时加载到内存中时,如何计算/预测.text部分的偏移量 提前感谢。PE文件不是位置独立的。相反,它们有一个首选加载地址,如果操作系统无法(因为地址空间已被使用,或者因为ASLR已生效)将其加载到此地址中,则必须重新定位。请看这里: 因此,如果ASLR(地址空间布局随机化)未启

假设我有一个PE文件(例如Notepad.exe)。假设文件保存在硬盘中时,notepad.exe的.text部分的偏移量为0xabcdefgh

那么,假设ASLR未启用,当相同的可执行文件
(notepad.exe)
在执行时加载到内存中时,如何计算/预测
.text
部分的偏移量


提前感谢。

PE文件不是位置独立的。相反,它们有一个首选加载地址,如果操作系统无法(因为地址空间已被使用,或者因为ASLR已生效)将其加载到此地址中,则必须重新定位。请看这里:

因此,如果ASLR(地址空间布局随机化)未启用,则它应以标头中指定的首选加载地址指定的偏移量加载。DLL可能不是这样,但可执行文件应该是这样

您可以在此处获得有关文件格式的更多信息:


谢谢您的回复。假设ASLR不存在,我如何准确计算内存中所有节的加载位置??我读过这篇文章,上面说“磁盘文件中某个项目的偏移量可能与加载到内存后的偏移量不同。但是,所有信息都提供给您,让您能够将磁盘偏移量转换为内存偏移量”。相关章节是“相对虚拟地址”。要将RVA转换为实际地址,只需颠倒过程:将RVA添加到实际加载地址以查找实际内存地址。顺便说一句,实际内存地址在PE术语中称为虚拟地址(VA)。另一种理解VA的方式是,它是一个添加了首选加载地址的RVAVA就是你要找的。因此,您必须从PE文件中获取.text部分的RVA,并将其添加到PE文件中的首选地址。