2016-11-13 24 views
1
0x00000000004013fb <+334>: mov 0x602500(,%rax,8),%rdx 

我想知道0x602500(,%rax,8)是什麼意思。GDB表達式

有這樣

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執行地址的源代碼。但我想確保我的猜測

回答

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

刻度值可能是1,2,4,或8等:字節,16-位,32位或64位。