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

问题描述

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

我看到上面的链接在有两个参数时打印值,但是当有三个参数时我该怎么办?偏移量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来地址。例如,可以使用GDB打印地址为0x28(%rdx,%rsi,4)的

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

在前面提供的链接上查看eXamine命令的完整文档,以获取对该命令及其参数的完整描述。


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