gdb 提供了读取或写入特定的功能线性地址, 例如:
(gdb) x/1wx 0x080483e4
0x80483e4 <main>: 0x83e58955
(gdb)
但如何指定逻辑地址呢?我遇到了以下指令:
0x0804841a <+6>: mov %gs:0x14,%eax
我如何读取 gdb 中“%gs:0x14”处的内存,或者将此逻辑地址转换为我可以在其中使用的线性地址x
命令 ?
注意:我知道我可以在这条指令之后简单地读取 %eax ,但这不是我关心的
我如何在gdb中读取“%gs:0x14”处的内存
你不能:GDB 无法知道该段如何到达哪个%gs
指已经设立。
或将此逻辑地址转换为我可以在 x 命令中使用的线性地址
再说一遍,一般情况下你不能这样做。然而,您似乎使用的是 32 位 x86 Linux,并且您can这样做——%gs
设置为通过以下方式指向线程描述符set_thread_area
系统调用。
你可以做catch syscall set_thread_area
在 GDB 中,并检查参数(每个线程都会有一个这样的调用)。实际执行此操作的代码是here http://repo.or.cz/w/glibc.git/blob/HEAD:/nptl/sysdeps/i386/tls.h#l230。一旦你知道如何%gs
已经设置好了,只需添加0x14即可base_addr
,你就完成了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)