Получение фактического значения сегментного регистра в MASM - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь узнать больше о чтении 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

Я видел много ссылок, заявляющих

...