Я пытаюсь узнать больше о чтении PEB / TEB (и сегментных регистров в целом). Мой основной источник: https://en.wikipedia.org/wiki/Win32_Thread_Information_Block Я пытаюсь выяснить, каков реальный адрес любого адреса в GS. Например, я вижу, что PEB в x64 находится в 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 без gs: [30h]? так как lea и gs: 0 не работали
3) Я пытался предположить, что ничего не компилируется в моей среде.
Среда: Windows 7, Visual Studio 2015
Я видел много ссылок, заявляющих