为什么 dumpbin 中可执行文件的入口点地址与 WinDbg 不同?
Why Entry Point Address of executable in dumpbin is different from WinDbg?
我想了解加载可执行文件的机制,所以我用 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 值吗?
提前致谢
造成这种差异的原因有几个。
首先,你 运行 dumpbin
在 notepad.exe
的 x64 版本上,存储在 System32
但你似乎在调试 x86 notepad.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
我想了解加载可执行文件的机制,所以我用 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 值吗?
提前致谢
造成这种差异的原因有几个。
首先,你 运行 dumpbin
在 notepad.exe
的 x64 版本上,存储在 System32
但你似乎在调试 x86 notepad.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