我正试图用汇编程序获取当前进程的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->;处理环境块;