windows - 访问 x64 TEB C++ 和程序集

标签 windows assembly visual-c++ x86-64 kernel32

在 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/

相关文章:

c++ - 谁对谁错又名 GCC vs Visual Studio

c++ - 将当前窗口的句柄获取到 GetWindowText?

windows - 安装 Visual Studio Community 2013 时无法将当前用户添加到 Hyper-V 管理员组错误

windows - 使用批处理文件列出文件并允许用户选择要传递给可执行文件的文件

C 到内联汇编

nasm - 汇编语言 `assembler` 也是特定的吗?哪个汇编程序最好?

c# - 如何计算 C++ 或 Visual C++/.NET 或 C# 中任何文件的大小?

c++ - 用我的应用程序打包一个 jre

c++ - 如何在 C++ Windows 中包含第三方库?

memory - 编译器如何在内存中布局代码