如何使用汇编程序(x64操作系统)获取进程环境块(PEB)地址?

我正试图用汇编程序获取当前进程的PEB地址

cpp文件:

#包括<iostream>
//#包括<windows.h>
外部“C”int*uu ptr64 Get_Ldr_Addr();
int main(int argc,字符**argv)
{
std::cout<<“asm”<<Get\u Ldr\u Addr()<<“\n”;
//标准::cout<<“peb”<<GetModuleHandle(0)<<“\n”;
返回0;
}

asm文件:

.code
获取\u Ldr\u Addr proc
推拉
移动速度、加速度:[30小时]
移动速度rax,[rax+60小时]
波普雷克斯
ret
获取\u Ldr\u Addr endp
终止

但是我从GetModuleHandle(0)和get\u Ldr\u Addr()中得到了不同的地址

有什么问题?难道不应该是一样的吗

问:如果函数是外部的,它将检查调用它的进程的PEB或函数的dll(假定为dll)

Tnx

如果您不介意的话,C.在Microsoft Visual Studio 2015中工作。
使用“\uuuu readgsqword()”内在函数

#包括<温特·h>
#包括<温特恩尔h>
//线程环境块(TEB)
#如果已定义(_M_X64)//X64
PTEB tebPtr=重新解释铸件<PTEB>(uu readgsqword(重新解释\uu cast<DWORD\uptr>(&static\uu cast<NT\utib*>(nullptr)->Self)));
#else//x86
PTEB tebPtr=重新解释铸件<PTEB>(uu readfsdword(重新解释u cast<DWORD_PTR>(&static u cast<NT TIB*>(nullptr)——>Self)));
#恩迪夫
//过程环境块(PEB)
PPEB pebPtr=tebPtr->处理环境块;

发表评论