如何解决GDB中的段:偏移地址

时间:2010-10-24 00:17:25

标签: memory-management gdb

(gdb) info registers ds
   ds             0x7b  123
(gdb) disassemble
   Dump of assembler code for function printf@plt:
   0x0804831c <+0>: jmp    DWORD PTR ds:0x804a008
=> 0x08048322 <+6>: push   0x10
   0x08048327 <+11>:    jmp    0x80482ec
End of assembler dump.

有人可以形容我如何将ds:0x804a008地址映射到线性地址吗?我可以用“x / xw地址”命令吗?如果不清楚我想知道代码跳转中第一个jmp函数的位置。

2 个答案:

答案 0 :(得分:1)

0x804a008是进程线性地址空间中的一个地址 - 该内存位置的DWORD是将跳转到的地址(即,0x804a008是指针)。 `

所以

x/xw 0x804a008

将转储指针的内容,并

disasm *0x804a008

将反汇编跳过该指针的代码。

答案 1 :(得分:-2)

Modern x86 OS不使用分段寻址。实模式分段地址只能代表1Mb的地址空间。此寻址方案仅在引导过程中出于兼容性原因使用。

操作系统将所有段寄存器设置为选择器,代表进程的32位地址空间,但您不必担心。

ds:0x804a008与0x804a008

相同