每个 .exe 文件都从 00401000 开始还是我假设这样的事情是错误的。
编辑:这里的初学者。
当程序第一次加载到 x64dbg 时,它会立即进入 DLL,所以我看不到地址 00401000,但确实通过进入内存映射而存在。
问题:程序直接进入DLL,我怎样才能让x64dbg从00401000启动它,我尝试在00401000设置断点(软件和硬件),并在“入口断点”和“系统断点”等事件上中断
谢谢你的欢迎
每个 .exe 文件都从 00401000 开始还是我假设这样的事情是错误的。
编辑:这里的初学者。
当程序第一次加载到 x64dbg 时,它会立即进入 DLL,所以我看不到地址 00401000,但确实通过进入内存映射而存在。
问题:程序直接进入DLL,我怎样才能让x64dbg从00401000启动它,我尝试在00401000设置断点(软件和硬件),并在“入口断点”和“系统断点”等事件上中断
谢谢你的欢迎
不是每个 exe 都不会从 0x401000 开始
图像库在标题中硬编码,并且在链接时可以使用 /entry 开关进行配置(ms 链接器)
操作系统可以并且将覆盖首选图像库
exe 文件中的所有其他地址都相对于硬编码的首选图像库
如果 os 覆盖它并将其映射到其他地方,则所有其他地址都将相对于新映射的地址
:\>dumpbin /headers cmd.exe | findstr base
1000 base of code
140000000 image base (0000000140000000 to 0000000140064FFF)
Dynamic base
如您所见,此特定二进制文件的首选图像库是140000000, 并且代码库是相对于该地址的
所以如果二进制文件被加载到140000000 代码的基础将在
140000000 + 0x1000 == 0x140001000
如果它在200000000加载
,代码的基础将在200000000 + 0x1000 == 0x200001000
等等