Ответ 1
как я могу прочитать память в "% gs: 0x14" в gdb
Вы не можете: GDB не знает, как настроен сегмент, к которому относится %gs
.
или перевести этот логический адрес на линейный адрес, который я мог бы использовать в команде x
Опять же, вы не можете этого сделать вообще. Тем не менее, вы оказались на 32-разрядной x86 Linux, и там вы можете сделать это: %gs
настроен для указания дескриптора потока через системный вызов set_thread_area
.
Вы можете сделать catch syscall set_thread_area
в GDB и изучить параметры (каждый поток будет иметь один такой вызов). Код на самом деле это здесь. Как только вы знаете, как %gs
был настроен, просто добавьте 0x14 в base_addr
, и вы закончили.