0

私はリバースエンジニアリングが初めてで、簡単なプログラムを見てきました:

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

ただし、これを ollydbg で開くと、gdb の場合とは異なり、アセンブリに直接移動しません。最初にさらに多くの命令があります。どうしてこうなったんだろうと思いました。

ありがとう!

4

1 に答える 1

1

olly を使用してプログラムに接続する方法に応じて、次の 2 つの場所のいずれかに移動します (エラーが発生しなかった場合)。

  • モジュール エントリ ポイント (別名main/ WinMain/のシステム グルーおよび CRT ラッパーDllMain): これは、olly でプログラムを開始したときに発生します。
  • NtUserBreakPoint: これは、既存のプロセスにアタッチする場合です。

モジュールウィンドウを表示するために使用できる場所に移動するには、そこから目的ctrl + eのモジュールを選択します。次に、 を使用crtl + nして、現在のモジュールのシンボル ウィンドウを表示します (注: エクスポートされていないシンボルを使用できるようにするには、pdb を使用できるようにするか、そのビルドの obj のオブジェクト スキャンを実行する必要があります)。

呼び出しチェーンを掘り下げることもできますModuleEntryPoint(通常、2番目の呼び出し/ jmpが必要です)。これにより、crtエントリポイントに移動します。そこから、3/5/4引数を持つ呼び出しを探すだけです。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 が使用されていると想定しています。

于 2011-06-17T05:15:06.497 に答える