GDB表达式

时间:2016-11-13 06:17:02

标签: assembly gdb

   0x00000000004013fb <+334>:   mov    0x602500(,%rax,8),%rdx

我想知道0x602500(,%rax,8)的含义。

有这样的源代码

 0x00000000004012fb <+78>:  movq   $0x400a8c,0x2011fa(%rip)        # 0x602500 <func>
   0x0000000000401306 <+89>:    movq   $0x400d44,0x2011f7(%rip)        # 0x602508 <func+8>
   0x0000000000401311 <+100>:   movq   $0x400faa,0x2011f4(%rip)        # 0x602510 <func+16>
   0x000000000040131c <+111>:   movq   $0x401262,0x2011f1(%rip)        # 0x602518 <func+24>
   0x0000000000401327 <+122>:   movq   $0x401295,0x2011ee(%rip)        # 0x602520 <func+32>

每个0x400a8c,400d44,400faa,401262和401295是函数的地址 我猜0x602500(,%rax,8)选择适当的函数来执行rax。但我想确定我的猜测

1 个答案:

答案 0 :(得分:3)

来自Gnu文档:

https://sourceware.org/binutils/docs/as/i386_002dMemory.html#i386_002dMemory

An Intel syntax indirect memory reference of the form

     section:[base + index*scale + disp]

is translated into the AT&T syntax

     section:disp(base, index, scale)

换句话说:

  1. 您从rax派生指针(计算地址),scale = 8

  2. 然后从该地址获取0x602500的偏移量

  3. 并将该值(地址+ 0x602500处的值)写入%rdx

  4. 比例值可能是1,2,4或8:字节,16位,32位或64位。