我正在尝试了解有关阅读 PEB / TEB (以及一般的段寄存器)的更多信息。我的主要来源是:https ://en.wikipedia.org/wiki/Win32_Thread_Information_Block 我试图弄清楚 gs 中任何地址的实际地址是什么。例如,我看到 x64 中的 PEB 在 gs:[60h] 所以
mov rax, gs:[60h]
应该给我PEB的地址。我试图弄清楚它的存储位置/gs 的值是多少。
push gs
pop rax ; rax = 43 (Memory is not defined @ 43)
; mov rax, gs:0h ; Error : Operand must be memory expression
mov rax, gs ; rax = 43
lea rax, gs:[0] ; rax = 0 ?? should have been 43, or real address?
lea rax, gs:[30h] ; rax = 48 -> why is that?
mov rax, gs:[30h] ; getting TEB linear address
mov rbx, [rax+60h] ; getting PEB address using TEB linear address
mov rcx, gs:[60h] ; rbx == rcx
我的主要问题是:
1) 43 和 48 分别代表什么值?
2) 有没有办法在没有 gs:[30h] 的情况下找到并访问 gs 的内存位置?因为 lea 和 gs:0 不起作用
3)我试过假设没有在我的环境中编译的东西。
环境:Windows 7、Visual Studio 2015
我看过很多参考资料说