1

アセンブラプログラムでES、FS、およびGSを使用して、3つの個別のアドレス空間を使用できるようにしたいと思います。

LDTをセットアップし、適切なセレクターの値を提供するWin32 APIはありますか?

4

1 に答える 1

3

答えは: はい、しかし。

必要な API は実際には NT カーネルにあり、NtSetLdtEntries と呼ばれます。そのためのヘッダーはありません。それに関するドキュメントはありません。スタブは、SDK の一部ではない ntdll.lib にあります。私がやったことをやり、リバース エンジニアリング サイトを手探りし、私が機能するようになるまで手動でバインドする必要があります。

もっと悪いことがあります。Windows が内部で使用しているため、GS を使用することはできません。システムコールを行うたびに、任意に0に設定されます(割り込み時にランダムに0に設定されることもあると思います)。GS を使用してプログラムをデバッグしようとすると、Windows はブレークポイントでそれを 0 に設定します!

ESとFSは問題ありません。おもう。

これは、これらすべてのものを使用する、私が書いた文書化されていないファイルです。勇気があれば、そこから十分な情報を抽出して何か役に立つことができるかもしれません。幸運を...

http://lbw.git.sourceforge.net/git/gitweb.cgi?p=lbw/lbw;a=blob;f=src/syscalls/thread.cc;hb=a3b44871bd89009e644894431cbc6534fe033369

于 2012-02-12T00:04:34.973 に答える