0

我正在尝试了解有关阅读 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

我看过很多参考资料说

4

0 回答 0