CPU Disasm
Address Hex dump Command Comments
00401570 /$ 83EC 1C SUB ESP,1C
00401573 |. C70424 010000 MOV DWORD PTR SS:[LOCAL.6],1
0040157A |. FF15 68814000 CALL DWORD PTR DS:[<&msvcrt.__set_app_ty
00401580 \. E8 FBFBFFFF CALL 00401180
Names in Project1, item 20
Address = 00401570
Section = .text
Type = Export
Ordinal =
Name = <ModuleEntryPoint>
Comments =
但是,这不是我想要的。我更喜欢OllyDbg在以下几行停止:
CPU Disasm
Address Hex dump Command Comments
004016B0 /$ 55 PUSH EBP ; Project1.004016B0(guessed void)
004016B1 |. 89E5 MOV EBP,ESP
004016B3 |. 83E4 F0 AND ESP,FFFFFFF0 ; DQWORD (16.-byte) stack alignment
004016B6 |. 83EC 10 SUB ESP,10
004016B9 |. E8 A2050000 CALL 00401C60
004016BE |. C70424 645040 MOV DWORD PTR SS:[LOCAL.4],OFFSET 004050 ; /format => "Hello World!"
004016C5 |. E8 9E1F0000 CALL <JMP.&msvcrt.printf> ; \MSVCRT.printf
004016CA |. B8 00000000 MOV EAX,0
004016CF |. C9 LEAVE
004016D0 \. C3 RETN
这是一个错误吗? MinGW为什么将
SUB ESP, 1C
设置为入口点?我可以将Ollydbg设置为从正确的入口点开始吗?#1 楼
不,这不是错误。这可能是因为您将可执行文件的入口地址(Olly中断所在的地方)与main()
函数的地址(您希望其中断的地方)混淆了。您应该找到main()
并在其中手动设置一个断点。执行流到达
main()
之前,后台发生了很多事情。首先获得控制的代码隐藏在编译器提供的C运行时(CRT)库中,并在链接可执行文件时自动链接。该代码(恰当地称为CRT启动)负责在C程序启动时进行各种设置,主要是初始化C运行时的所有内部组件(还有很多其他东西我在这里不会提及),执行C ++静态对象的构造函数调用,最后调用main()
。因此,为了使事情顺利进行,链接器将入口点设置到此启动机器内部,这正是我们所观察到的。没有链接C运行时库的开销。不确定这是否是您想要的。
评论
“以下C ++代码”:哪一个?