1

逆アセンブルされた dll を分析していて、行でスタックしてしまいました

mov ebx,fs:[00000004h]

この命令でebxに書き込まれるデータの正確な物理アドレスを知りたいです。gdbは私にそれを教えてくれますfs = 0x53.

アドレスがモード (保護またはリアル) に依存することは既にわかっており、CPU が保護モードになっていることは確かです ( *を参照)。セグメント fs の開始は、GDT のどこかに格納する必要がありますよね? のアドレスもわかりましたGDT-register (0x009bd5c0007f)が、gdb ではレジスタにアクセスしたり読み取ったりすることができないため、fs (したがって、のfs:[00000004h]) の物理アドレスを調べる方法がわかりません。

誰でも私を助けてもらえますか?

私は命令を使用し、smsw axその後eaxは0x280031でした。したがって、最後のビットは 1 であり、これは保護モードを意味します。私はそれを正しく理解しましたか?

4

2 に答える 2

2

はい、保護モードです。

そして、おそらく命令GDTを使用しての仮想アドレスを見つけました。SGDT

ただし、そのアドレスのメモリは OS カーネルで実行されているコード (カーネル モード ドライバーである可能性があります) からのみ読み取ることができるため、このアドレスが役立つ可能性はほとんどありません。

カーネル内から目的のメモリを読み取る方法を見つける必要があります。

于 2013-03-28T11:37:43.787 に答える
0

DLLについて言及しているので、すべてWindows上にあると思います。Windows ではFS、スレッド情報ブロック (TIB) を指すことが知られています。オフセット 4 には、スタックの先頭へのポインターがあります。コードはそれを にロードしますEBX。それだけです。

FS の値は重要ではなく、GDT をいじる必要もありません。これは、API の文書化された部分です。

于 2013-03-28T16:55:36.990 に答える