4

この単純なアセンブラ コマンドがあります。

mov eax, fs:[30h];

私の問題は、このコマンドによって実際に読み取られる特定のアドレスを知る必要があることです。アセンブラのアドレッシング モードに関するドキュメントはたくさん見つかりましたが、register:表記に関するドキュメントはありませんでした。

アドレス計算の背後にある計算を誰か説明してもらえますか?

4

3 に答える 3

3

FSアドレスに追加されるベース アドレスを含むセグメント記述子のテーブルへのインデックスです。win32 ではFS、スレッド情報ブロックにアクセスするために使用されます (または、より正確には、によってインデックス付けされたセグメント記述子には、TIB の開始FSなどのベース アドレスがあります) 。プロセス環境ブロックへのポインターの場所です。win64 では、TIB へのアクセスに使用されます。FS:[0]FS:[30h]GS

于 2013-06-20T13:24:46.727 に答える
1

Win32 でセグメントのベース アドレスを取得するにはFS、関数を使用できますGetThreadSelectorEntry(x86 のみ)。

デバッガーを作成している場合は、新しいスレッドまたはプロセスごとにデバッガーに送信される/構造体lpThreadLocalBaseの値を使用できます。これはスレッドを指し、x86 プロセスと x64 プロセスの両方で機能します (x64 では、レジスタは TEB に使用されます)。CREATE_THREAD_DEBUG_INFOCREATE_PROCESS_DEBUG_INFOTEBGS

于 2013-06-20T19:18:02.290 に答える
-1

最良の説明 (および写真付き) は次の場所にあります。

http://flint.cs.yale.edu/cs422/doc/art-of-asm/pdf/

第4章はあなたが読むべきものです。

于 2013-06-20T10:03:39.963 に答える