在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()完成此操作,但我想使用汇编。

但是,它根本无法工作。有什么想法吗?

最佳答案

如果您使用Visual Studio,则可以使用Intrinsics!

[x86]
__readfsbyte
__readfsdword
__readfsqword
__readfsword

[x64]
__readgsbyte
__readgsdword
__readgsqword
__readgsword

祝你好运

关于windows - 访问x64 TEB C++和汇编,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21973330/

10-11 18:24