2

我试图了解加载可执行文件的机制,所以我用 notepad.exe 做了两个不同的测试

1)运行dumpbin命令:

dumpbin /ALL "C:\Windows\System32\notepad.exe" /OUT:"C:\sample\log4.txt" 

我在 OPTIONALHEADER VALUES 下得到以下值:

1AC50 entry point (000000014001AC50) WinMainCRTStartup
1000 base of code
140000000 image base (0000000140000000 to 0000000140042FFF)

2)运行WinDbg:

x notepad!*CRT* 

我得到了这些:

00b9bf9a          notepad!__mainCRTStartup (void)
00b9bf90          notepad!WinMainCRTStartup (<no parameter info>)
00ba04a4          notepad!msvcrt_NULL_THUNK_DATA = <no type information>
00ba050c          notepad!_IMPORT_DESCRIPTOR_msvcrt = <no type information>

我不明白为什么 14001AC50 和 00b9bf90 是不同的值。它们不应该是相同的 AddressOfEntryPoint 值吗?

提前致谢

4

1 回答 1

4

造成这种差异的原因有几个。

首先,您dumpbin在 x64 版本上运行notepad.exe,存储在System32但您似乎正在调试 x86notepad.exe存储在SysWoW64. 确保您已启动 x64 或 AMD64 版本的 WinDbg 并且您正在附加到C:\Windows\System32\notepad.exe.

一旦解决了这个问题,事情就会开始变得更有意义,但还有一件事要记住。WinDbg 中的x命令在运行进程中显示符号的虚拟内存地址,同时dumpbin将其显示为与模块基地址的偏移量。

从模块库中快速减去一些东西应该匹配。

这是它在我的系统上的外观:

C:\>dumpbin /ALL "C:\Windows\System32\notepad.exe" | find "entry point"
           1AC50 entry point (000000014001AC50) WinMainCRTStartup

0:000> x notepad!WinMainCRTStartup
00007ff6`4fe1ac50 notepad!WinMainCRTStartup (<no parameter info>)
0:000> ? notepad!WinMainCRTStartup - notepad
Evaluate expression: 109648 = 00000000`0001ac50

匹配入口点地址

于 2019-02-26T15:57:41.970 回答