在 32 位汇编中,我可以访问 TEB
结构的 ProcessEnvironmentBlock
。我从那里访问 TEB
结构的 Ldr
。
此处描述了此技术: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] __readfs字节 __readfsdword __readfsqword __readfsword
[x64] __readgsbyte __readgsdword __readgsqword __读词
祝你好运~
关于windows - 访问 x64 TEB C++ 和程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21973330/