1

ollydbg を使用してプログラムをデバッグしようとしていますが、SS プレフィックスを使用してモード アドレスをインデックス化することに疑いがあります。

スクリーンショットは次のとおりです。

このとき、指示は

MOV BYTE PTR SS:[EBP-1],BL

からの 8 ビットを、1 を引いた でEBX指定されたアドレスに移動します。EBP(0012FDCC)0012FDCB

上記が正しくない場合は、教えてください。

ollydbg プログラムでは、右下にアドレスへの最初の列を持つスタックの表現があります。指して0012FDCBいる場所へのエントリがないのはなぜですか?0012FDCB

4

1 に答える 1

2

私は ollydbg について何も知りません。うまくいけば、それに精通している誰かも答えを投稿します。

あなたが私たちに示した命令が何をするかについてのあなたの理解は、ほとんど正しいです: BL の内容 (EBX の下位8 ビット) を、[EBP マイナス 1] が指すスタック セグメントのアドレスに移動します。EBP が 0012FDCCh の場合、バイトは 0012FDCBh に格納されます。

通常、0012FDCBh がどこかを指しているとは言いません。技術的には、メモリ ロケーションのアドレスであると言う方がより正確ですが、この場合は 1 バイトを含むメモリ ロケーションであるとだけ言います。したがって、ある意味で、数字はバイトを「指している」。しかし、純粋な数値ではなく、メモリを指しているポインターまたはレジスターを考えることを好みます。

ollydbg が 0012FDCBh を表示しない理由がわかりません。それが表示されていないことは確かですか?おそらく 0012FDCCh と 0012FDC8h を示していますか? その場合、DWORD でグループ化されたスタック メモリが表示されているだけなので、0012FDC8h の DWORD 内に存在する 4 バイトの 1 つに対応する 0012FDCBh は表示されません。0012FDC8h に格納されている DWORD 値を調べて、MOV 命令を 1 ステップ オーバーすると、そのワードの最上位バイトが BL の値に変化することがわかります。(そのアドレスの値が BL の値と異なる場合。) Ollydbg は、1 つの DWORD よりも長い行にグループ化されたメモリを表示する場合もありますが、同じ原則が適用されます。

于 2012-01-07T16:07:58.860 に答える