Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly gdb中装配注释中所列地址的含义_Assembly_Gdb_X86 64_Addressing Mode - Fatal编程技术网

Assembly gdb中装配注释中所列地址的含义

Assembly gdb中装配注释中所列地址的含义,assembly,gdb,x86-64,addressing-mode,Assembly,Gdb,X86 64,Addressing Mode,在gdb会话中,如何计算程序集输出注释中的地址列表?举个例子,我目前正在接受以下指导: 0x0000555555556140 ? jmpq *0x7af5a(%rip) # 0x5555555d10a0 <strlen@got.plt> (gdb) p/z 0x5555555d10a0 - 0x0000555555556140 # commented address - current address $3 = 0x000000000007af60 指向

gdb
会话中,如何计算程序集输出注释中的地址列表?举个例子,我目前正在接受以下指导:

 0x0000555555556140  ? jmpq   *0x7af5a(%rip)        # 0x5555555d10a0 <strlen@got.plt>
(gdb) p/z 0x5555555d10a0 - 0x0000555555556140  # commented address - current address
$3 = 0x000000000007af60
指向

(gdb) x/g ($rip + 0x7af5a)
0x5555555d109a <getpwuid@got.plt+2>:    0xd1e0000055555555
i、 例如,
$rip+0x7af60
,超出跳转指针6字节(
$rip+0x7af5a
)。注释跳转指针以外6字节的地址有什么意义


如何在GDB控制台中显示跳转地址而不依赖GDB反汇编提供的注释?或分配给GDB变量以供编写GDB脚本时使用。

RIP相对寻址是相对于指令的结尾,而不是开始。与相对跳转相同。@PeterCordes:谢谢,这意味着指令长度为6字节,RIP相对地址指向指令的最后一个字节?给定指令的RIP相对地址,在gdb中显示指令的最佳方式是什么,特别是当我们事先不知道指令的长度时?是的,在这种情况下,操作码(1)+modrm(1)+rel32(4)是6字节。您可以将其视为RIP=执行此指令期间下一条指令的地址。我不确定让GDB向您显示目标地址的最简单方法是什么,通常只给出指令的机器代码和起始地址;这很重要,因为指令是可变长度的。GDB的解码不会为您生成带有目标地址的注释吗?或者您希望在GDB脚本中以编程方式执行此操作?如果是这样的话,也许你应该编辑你的问题,专门问这个问题。否则,它基本上是机器代码中RIP相对工作原理的复制品;正在寻找合适的复制品。e、 抱歉,我只是想弄清楚您是如何从
python
命令中得到gdb命令行错误消息的。您是否在另一行键入
print
?注释中的格式不是很好。我的建议是在一行中键入整个
python
命令。RIP-relative寻址是相对于指令的结尾,而不是开始。与相对跳转相同。@PeterCordes:谢谢,这意味着指令长度为6字节,RIP相对地址指向指令的最后一个字节?给定指令的RIP相对地址,在gdb中显示指令的最佳方式是什么,特别是当我们事先不知道指令的长度时?是的,在这种情况下,操作码(1)+modrm(1)+rel32(4)是6字节。您可以将其视为RIP=执行此指令期间下一条指令的地址。我不确定让GDB向您显示目标地址的最简单方法是什么,通常只给出指令的机器代码和起始地址;这很重要,因为指令是可变长度的。GDB的解码不会为您生成带有目标地址的注释吗?或者您希望在GDB脚本中以编程方式执行此操作?如果是这样的话,也许你应该编辑你的问题,专门问这个问题。否则,它基本上是机器代码中RIP相对工作原理的复制品;正在寻找合适的复制品。e、 抱歉,我只是想弄清楚您是如何从
python
命令中得到gdb命令行错误消息的。您是否在另一行键入
print
?注释中的格式不是很好。我的建议是在一行中键入整个
python
命令。
(gdb) x/g ($rip + 0x7af5a)
0x5555555d109a <getpwuid@got.plt+2>:    0xd1e0000055555555
(gdb) p/z 0x5555555d10a0 - 0x0000555555556140  # commented address - current address
$3 = 0x000000000007af60