32 ビット アセンブリでProcessEnvironmentBlockは、TEB構造体の にアクセスできます。そこから構造体にアクセスLdrしますTEB。
この手法については、http: //en.wikipedia.org/wiki/Win32_Thread_Information_Blockで説明しています。
32 ビット アセンブリでこれを行うコードは次のとおりです。
void* ptr = NULL;
__asm
{
mov eax, FS:[0x18]
mov eax, [eax + 0x30] //Offset of PEB
mov eax, [eax + 0x0C] //Offset of LDR in PEB structure
mov eax, _ptr
};
std::cout<<ptr<<"\n";
TEB 構造はここで見ることができます: http://msdn.moonsols.com/win7rtm_x64/TEB.html および PEB 構造はここで見ることができます: http://msdn.moonsols.com/win7rtm_x64/PEB.html
上記は32ビットコードで機能します。
ただし、x64 マシンで動作するコードも書きたいと思っています。構造の x64 バージョンを表示して、次のように書きました。
__asm
{
mov rax, GS:[0x30]
mov rax, [rax + 0x60]
mov rax, [rax + 0x18]
mov rax, _ptr
};
これは使用できますがWinnt.h NtCurrentTeb()、アセンブリを使用したいです。
ただし、まったく機能しません。理由はありますか?