在 GDB 中打印 (%r12,%rbx,1)

Print (%r12,%rbx,1) in GDB

In GDB how do I print 0xc(%rsp)?

我看到上面的 link 当有两个参数时打印值,但是当有三个时我该怎么办?如何处理偏移量 1?

如何找到(%r12,%rbx,1)的地址并打印其内容?

在 x86/x86-64 AT&T 语法中,地址的格式为 displacement(basereg, indexreg, scale)。计算地址为 displacement+basereg+indexreg*scale 其中 scale 为 1、2、4 或 8。您可以留下任何方程式的一部分。在 GDB 中,您可以使用 print 命令 print 来自此类表达式的地址。例如地址 0x28(%rdx, %rsi, 4) 可以用 GDB 打印:

print 0x28+$rdx+$rsi*4

如果你想打印出这个地址的内容,你可以使用 GDB 的 x (examine) command。要打印该地址处的字符串,您可以使用:

x/s 0x28+$rdx+$rsi*4

要以十六进制显示该地址处的一个字节:

x/bx 0x28+$rdx+$rsi*4

以十进制显示从该地址开始的 12 个 16 位有符号值:

x/12hd 0x28+$rdx+$rsi*4

以十进制显示从该地址开始的 6 个 32 位无符号值:

x/6wu 0x28+$rdx+$rsi*4

以十六进制显示从该地址开始的 3 个 64 位值:

x/3gx 0x28+$rdx+$rsi*4

查看之前提供的 link 中 eXamine 命令的完整文档,以获得命令及其参数的完整描述。


在您的示例中,您没有位移,因此假定为 0。(%r12,%rbx,1) 的 GDB 表达式是 0+$r12+$rbx*1,可以简化为 $r12+$rbx