我是逆向工程的新手,我一直在看一个简单的程序:
char* a = "hello world";
printf(a);
但是,当我在 ollydbg 中打开它时,我并没有像在 gdb 中那样直接进入程序集,首先还有更多说明。我想知道为什么会这样。
谢谢!
我是逆向工程的新手,我一直在看一个简单的程序:
char* a = "hello world";
printf(a);
但是,当我在 ollydbg 中打开它时,我并没有像在 gdb 中那样直接进入程序集,首先还有更多说明。我想知道为什么会这样。
谢谢!
根据您使用 olly 附加到程序的方式,您将被带到两个地方之一(如果没有发生错误):
main
模块入口点(又名系统胶水和/ WinMain
/的 CRT 包装器DllMain
):当您使用 olly 启动程序时会发生这种情况。NtUserBreakPoint
:这是当您附加到现有进程时。要导航到您可以用来ctrl + e
调出模块窗口的位置,从那里选择您想要的模块。然后使用crtl + n
为您的当前模块调出符号窗口(注意:要使未导出的符号可用,pdb 需要可用,或者您需要为该构建执行 obj 的对象扫描)。
如果您采取行动,ModuleEntryPoint
您也可以直接深入调用链(通常您需要第二次调用/jmp),这会将您带到 crt 入口点,从那里只需查找带有 3/5/4 args 的调用,这将是main
/ WinMain
/ DllMain
:
从这里:
Blackene.<ModuleEntryPoint> 004029C3 E8 FC030000 CALL Blackene.__security_init_cookie
004029C8 ^ E9 D7FCFFFF JMP Blackene.__tmainCRTStartup
我们到这里:
Blackene.__tmainCRTStartup 004026A4 6A 58 PUSH 58
004026A6 68 48474000 PUSH Blackene.00404748
004026AB E8 1C060000 CALL Blackene.__SEH_prolog4
004026B0 33DB XOR EBX,EBX
然后在这里向下滚动:
004027D3 6A 0A PUSH 0A
004027D5 58 POP EAX
004027D6 50 PUSH EAX
004027D7 56 PUSH ESI
004027D8 6A 00 PUSH 0
004027DA 68 00004000 PUSH Blackene.00400000
004027DF E8 2CF2FFFF CALL Blackene.WinMain
我假设正在使用 ollydbg 1.10。