use*_*507 12 x86 gdb memory-segmentation
gdb提供读取或写入特定线性地址的功能,例如:
(gdb) x/1wx 0x080483e4
0x80483e4 <main>: 0x83e58955
(gdb)
Run Code Online (Sandbox Code Playgroud)
但是如何指定逻辑地址?我按照以下指示来:
0x0804841a <+6>: mov %gs:0x14,%eax
Run Code Online (Sandbox Code Playgroud)
我如何读取gdb中"%gs:0x14"的内存,或者将此逻辑地址转换为我可以在x命令中使用的线性地址?
注意:我知道在这条指令之后我只能阅读%eax,但这不是我关心的问题
我如何在gdb中读取“%gs:0x14”处的内存
您不能:GDB无法知道所%gs引用的段是如何设置的。
或将此逻辑地址转换为我可以在x命令中使用的线性地址
同样,您通常无法执行此操作。但是,您似乎在32位x86 Linux上,并且可以执行此操作- %gs通过set_thread_area系统调用将其设置为指向线程描述符。
您可以catch syscall set_thread_area在GDB中进行操作,并检查参数(每个线程都会有一个这样的调用)。实际执行此操作的代码在此处。知道如何%gs设置后,只需将0x14添加到中base_addr,就可以完成。
| 归档时间: |
|
| 查看次数: |
4136 次 |
| 最近记录: |