Ce n'gdb 'x' de la commande?

Je suis de la lecture d'un livre sur le piratage et il a un chapitre à propos de l'assemblage.

Voici mon petit programme écrit en C.

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int i;

    for (i = 0; i < 10; i++) {
        puts("Hello World!");
    }

    return 0;
}

Et celle-ci est gdb test:

(gdb) break main
Breakpoint 1 at 0x40050f: file main.c, line 7.
(gdb) run
Breakpoint 1, main (argc=1, argv=0x7fffffffe708) at main.c:7
7       for (i = 0; i < 10; i++) {
(gdb) disassemble main
Dump of assembler code for function main:
   0x0000000000400500 <+0>: push   rbp
   0x0000000000400501 <+1>: mov    rbp,rsp
   0x0000000000400504 <+4>: sub    rsp,0x20
   0x0000000000400508 <+8>: mov    DWORD PTR [rbp-0x14],edi
   0x000000000040050b <+11>:    mov    QWORD PTR [rbp-0x20],rsi
=> 0x000000000040050f <+15>:    mov    DWORD PTR [rbp-0x4],0x0
   0x0000000000400516 <+22>:    jmp    0x400526 <main+38>
   0x0000000000400518 <+24>:    mov    edi,0x4005c4
   0x000000000040051d <+29>:    call   0x4003e0 <puts@plt>
   0x0000000000400522 <+34>:    add    DWORD PTR [rbp-0x4],0x1
   0x0000000000400526 <+38>:    cmp    DWORD PTR [rbp-0x4],0x9
   0x000000000040052a <+42>:    jle    0x400518 <main+24>
   0x000000000040052c <+44>:    mov    eax,0x0
---Type <return> to continue, or q <return> to quit---
   0x0000000000400531 <+49>:    leave  
   0x0000000000400532 <+50>:    ret    
End of assembler dump.

La partie suivante est la choses que je ne comprends pas. Veuillez noter que $rip est le "pointeur d'instruction" et les points à 0x000000000040050f <+15>

(gdb) x/x $rip
0x40050f <main+15>: 0x00fc45c7
(gdb) x/12x $rip
0x40050f <main+15>: 0x00fc45c7  0xeb000000  0x05c4bf0e  0xbee80040
0x40051f <main+31>: 0x83fffffe  0x8301fc45  0x7e09fc7d  0x0000b8ec
0x40052f <main+47>: 0xc3c90000  0x1f0f2e66  0x00000084  0x1f0f0000
(gdb) x/8xb $rip
0x40050f <main+15>: 0xc7    0x45    0xfc    0x00    0x00    0x00    0x00    0xeb
(gdb) x/8xh $rip
0x40050f <main+15>: 0x45c7  0x00fc  0x0000  0xeb00  0xbf0e  0x05c4  0x0040  0xbee8
(gdb) x/8xw $rip
0x40050f <main+15>: 0x00fc45c7  0xeb000000  0x05c4bf0e  0xbee80040
0x40051f <main+31>: 0x83fffffe  0x8301fc45  0x7e09fc7d  0x0000b8ec

Première commande x/x $rip sorties 0x40050f <main+15>: 0x00fc45c7.

Est-il de l'instruction à 0x40050f?
Est 0x00fc45c7 même que mov DWORD PTR [rbp-0x4],0x0 (assemblé instruction à 0x40050f)?

Deuxièmement, si c'est l'instruction, quels sont ces nombres hexadécimaux de la sortie de commandes x/12x $rip, x/8xw $rip, x/8xh $rip?

De ne pas être négatif, mais erickson, qui fait un excellent travail va plus cela dans le détail...essayez également de ti match de ce qu'il fait (apparemment) une nouvelle 64b architecture quand il est déjà difficile (impossible) à obtenir ses exemples de travail en vertu de l'contemporain 32b ubuntu noyaux est probablement pas la meilleure idée. Il y a une raison pour laquelle le livre est livré avec Ubuntu 7.04. live cd.
Il n'est pas question d'essayer ses exemples sur ma machine. Je voudrais obtenir presque les mêmes résultats sur les vieux x86(certains noms différents tels que rip en place de l'eip). C'est la première fois que j'essaie ce genre de bas niveau de stuff, donc je pourrais être un peu confus. Aussi, je ne demande pas à reformuler ce que l'auteur du livre écrit, mais pour expliquer ce que sont ces nombres hexadécimaux(ouptup de 'x' de la commande dans CET EXEMPLE). Je pense qu'il peut être expliqué en une phrase ou deux.
Juste point (voir la réponse), mais vraiment: travail à travers le livre en utilisant aussi vieux unbuntu distro que vous le pouvez. Et quand quelque chose ne fonctionne pas, essayez de googler ou un document qui s'appelle quelque chose comme "l'écrasement de la pile En 2012").

OriginalL'auteur khajvah | 2013-12-13