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。但我想确定我的猜测
答案 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)
换句话说:
您从rax派生指针(计算地址),scale = 8
然后从该地址获取0x602500的偏移量
并将该值(地址+ 0x602500处的值)写入%rdx
比例值可能是1,2,4或8:字节,16位,32位或64位。