2

Windows と Linux では、与えられたスレッド ハンドルに対応する静的スレッド ローカル ストレージ ブロックの開始と終了をどのように判断できますか?

4

3 に答える 3

4

この情報は、スレッド情報ブロックにあります。ただし、これは文書化されていない構造にアクセスしているため、移植性が非常に低く、 Windows の将来のバージョンで機能しなくなる可能性があることに注意してください。現在のスレッドのスレッド ローカル ストレージ アリーナを TIB から取得できるようです。誰が別のスレッドの TLS を取得するのかわかりません。

TIB のオフセット 0x30 にあるプロセス環境ブロック (PEB) を掘り下げてみることもできますが、変更される可能性がある文書化されていない構造を扱っています。

于 2008-12-05T22:54:49.697 に答える
2

Windows スレッド情報ブロックは、FS:0x2C でスレッド ローカル ストレージ配列のアドレスを提供します。これは、各モジュールの TLS へのポインターの配列です。問題は、その配列の大きさや、各モジュールの TLS データ ブロックの大きさが示されていないことです。

于 2008-12-06T19:40:25.033 に答える
1

さまざまなスレッド ローカル ストレージ関連関数の詳細については、MSDNを参照してください。TlsGetValue()を使用して、特定の TLS 値を取得できます。動作する場合でも、メモリをいじらないでください。未定義の動作を呼び出しているだけで、たまたま動作するが、将来のバージョンの Windows で壊れる可能性があります。

于 2008-12-05T19:59:46.040 に答える