程序之前的Ollydbg指令

时间:2011-06-16 22:35:10

标签: reverse-engineering ollydbg

我是逆向工程的新手,我一直在寻找一个简单的程序:

char* a = "hello world";
printf(a);

然而,当我在ollydbg中打开它时,我没有像我在gdb中那样正确地进行组装,首先还有更多指令。我想知道为什么会这样。

谢谢!

1 个答案:

答案 0 :(得分:1)

根据您使用olly附加到程序的方式,您将被带到两个地方之一(如果没有发生错误):

  • 模块入口点(又称main / WinMain / DllMain的系统粘合剂和CRT包装器):当您使用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。