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

Ich möchte wissen, was 0x602500(,%rax,8) bedeutet.GDB Ausdrücke

Es gibt Quellcode wie diese

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> 

jeder 0x400a8c, 400d44, 400faa, 401.262 und 401.295 Adresse von Funktionen ist Ich denke, 0x602500(,%rax,8) ordnungsgemäße Funktion von rax ausführen wählen. Aber ich will sicher

Antwort

3

Von der Gnu Dokumentation über meine Vermutung machen:

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) 

Mit anderen Worten:

  1. Sie leiten einen Zeiger (berechnet eine Adresse) von rax, scale = 8

  2. Dann nehmen Sie die Offs et von 0x602500 von dieser Adresse

  3. und diesen Wert schreiben (der Wert bei der Adresse + 0x602500) auf% RDX

Skalenwerte 1 sein könnte, 2, 4 oder 8: Byte, 16- Bit, 32-Bit oder 64-Bit.