GDB x/i收到错误地址

GDB x/i收到错误地址,gdb,Gdb,当我试图在*0x601010中显示指令时,我得到了一个错误,因为GDB使用了错误的地址(0xfffffff7dee870),但是,当使用x/g命令时,地址(0x00007ff7dee870)是正确的 gdb-peda$ [----------------------------------registers-----------------------------------] ... [-------------------------------------code-------------

当我试图在
*0x601010
中显示指令时,我得到了一个错误,因为GDB使用了错误的地址(
0xfffffff7dee870
),但是,当使用
x/g
命令时,地址(
0x00007ff7dee870
)是正确的

gdb-peda$
[----------------------------------registers-----------------------------------]
...
[-------------------------------------code-------------------------------------]
   0x4003ec:    add    BYTE PTR [rax],al
   0x4003ee:    add    BYTE PTR [rax],al
   0x4003f0:    push   QWORD PTR [rip+0x200c12]        # 0x601008
=> 0x4003f6:    jmp    QWORD PTR [rip+0x200c14]        # 0x601010
 | 0x4003fc:    nop    DWORD PTR [rax+0x0]
 | 0x400400 <printf@plt>:   jmp    QWORD PTR [rip+0x200c12]        # 0x601018
 | 0x400406 <printf@plt+6>: push   0x0
 | 0x40040b <printf@plt+11>:    jmp    0x4003f0
 |->   0x7ffff7dee870 <_dl_runtime_resolve_avx>:    push   rbx
       0x7ffff7dee871 <_dl_runtime_resolve_avx+1>:  mov    rbx,rsp
       0x7ffff7dee874 <_dl_runtime_resolve_avx+4>:  and    rsp,0xffffffffffffffe0
       0x7ffff7dee878 <_dl_runtime_resolve_avx+8>:  sub    rsp,0x180
                                                                  JUMP is taken
[------------------------------------stack-------------------------------------]
...
[------------------------------------------------------------------------------]
Legend: code, data, rodata, value
0x00000000004003f6 in ?? ()
gdb peda$x/4i*0x601010
0xFFFFFFF7DEE870:无法访问地址0xfffffffff7dee870处的内存
gdb peda$x/g 0x601010
0x601010:0x00007FF7DEE870
gdb peda$x/8xb 0x601010
0x601010:0x70 0xe8 0xde 0xf7 0xff 0x7f 0x00 0x00
gdb peda$x/4i 0x00007ffff7dee870
0x7ffff7dee870:推送rbx
0x7ffff7dee871:mov rbx,rsp
0x7ffff7dee874:和rsp,0xFFFFFFFFFF0
0x7ffff7dee878:子rsp,0x180
有人能解释原因吗

谢谢

gdb-peda$ x/4i *0x601010
   0xfffffffff7dee870:  Cannot access memory at address 0xfffffffff7dee870
gdb-peda$ x/g 0x601010
0x601010:   0x00007ffff7dee870
gdb-peda$ x/8xb 0x601010
0x601010:   0x70    0xe8    0xde    0xf7    0xff    0x7f    0x00    0x00
gdb-peda$ x/4i 0x00007ffff7dee870
   0x7ffff7dee870 <_dl_runtime_resolve_avx>:    push   rbx
   0x7ffff7dee871 <_dl_runtime_resolve_avx+1>:  mov    rbx,rsp
   0x7ffff7dee874 <_dl_runtime_resolve_avx+4>:  and    rsp,0xffffffffffffffe0
   0x7ffff7dee878 <_dl_runtime_resolve_avx+8>:  sub    rsp,0x180
在第一个命令中,您写入
*0x601010
——这意味着该位置的内存内容。在第二个命令中,您省略了
*
,这表明该内存的内容确实是gdb响应第一个命令试图访问的内容

我想您可能需要的是
x/4i 0x601010
,或者
反汇编
命令

在第一个命令中,您写入
*0x601010
——这意味着该位置的内存内容。在第二个命令中,您省略了
*
,这表明该内存的内容确实是gdb响应第一个命令试图访问的内容


我想你可能想要的是
x/4i 0x601010
,或者可能是
反汇编
命令。

这个:
x/4i*0x601010
相当于
x/4i(长)*(int*)0x601010
。它从内存位置
0x601010
加载(截断)整数
0xf7dee870
,然后符号将其扩展到long
0xFFFFFFF7DEE870
,然后尝试读取此(伪)地址处的指令


您需要:
x/4i*(long*)0x601010
x/4i{long*}0x601010
此:
x/4i*0x601010
相当于
x/4i(long)*(int*)0x601010
。它从内存位置
0x601010
加载(截断)整数
0xf7dee870
,然后符号将其扩展到long
0xFFFFFFF7DEE870
,然后尝试读取此(伪)地址处的指令


您需要:
x/4i*(long*)0x601010
x/4i{long*}0x601010

但指令是
jmp-QWORD-PTR[rip+0x200c14]#0x601010
,因此实际地址是
*0x601010==0x00007ff7dee870
,GDB的地址似乎只有一些数字是错误的。但是指令是
jmp QWORD PTR[rip+0x200c14]#0x601010
,所以实际地址是
*0x601010==0x00007FF7DEE870
,似乎GDB的地址
0xfffffffff7dee870
只在某些数字上有误。谢谢~但是为什么GDB使用
int*
而不是
long*
?我正在使用Ubuntu x86_64。谢谢~但是为什么GDB使用
int*
而不是
long*
?我正在使用Ubuntu x86_64。
gdb-peda$ x/4i *0x601010
   0xfffffffff7dee870:  Cannot access memory at address 0xfffffffff7dee870
gdb-peda$ x/g 0x601010
0x601010:   0x00007ffff7dee870
gdb-peda$ x/8xb 0x601010
0x601010:   0x70    0xe8    0xde    0xf7    0xff    0x7f    0x00    0x00
gdb-peda$ x/4i 0x00007ffff7dee870
   0x7ffff7dee870 <_dl_runtime_resolve_avx>:    push   rbx
   0x7ffff7dee871 <_dl_runtime_resolve_avx+1>:  mov    rbx,rsp
   0x7ffff7dee874 <_dl_runtime_resolve_avx+4>:  and    rsp,0xffffffffffffffe0
   0x7ffff7dee878 <_dl_runtime_resolve_avx+8>:  sub    rsp,0x180
gdb-peda$ x/4i *0x601010
   0xfffffffff7dee870:  Cannot access memory at address 0xfffffffff7dee870
gdb-peda$ x/g 0x601010
0x601010:   0x00007ffff7dee870