(gdb) x/12x $rip
0x400564 <main+8>: 0x00fc45c7 0xeb000000 0x0634bf0e 0xc9e80040
0x400574 <main+24>: 0x83fffffe 0x8301fc45 0x7e09fc7d 0x0000b8ec
0x400584 <main+40>: 0xc3c90000 0x00841f0f 0x00000000 0x246c8948
Dodatkowo możemy zmienić rozmiar jednostki, bo aktualnie jest ustawiona na 4bajty i możemy je formatować na pojedynczy bajt, pół słowo(2bajty), słowo o rozmiarze 4 bajtów i słowo podwójne.
(gdb) x/12x $rip
0x400564 <main+8>: 0x00fc45c7 0xeb000000 0x0634bf0e 0xc9e80040
0x400574 <main+24>: 0x83fffffe 0x8301fc45 0x7e09fc7d 0x0000b8ec
0x400584 <main+40>: 0xc3c90000 0x00841f0f 0x00000000 0x246c8948
(gdb) x/8xb $rip
0x400564 <main+8>: 0xc7 0x45 0xfc 0x00 0x00 0x00 0x00 0xeb
(gdb) x/8xh $rip
0x400564 <main+8>: 0x45c7 0x00fc 0x0000 0xeb00 0xbf0e 0x0634 0x0040 0xc9e8
(gdb) x/8xw $rip
0x400564 <main+8>: 0x00fc45c7 0xeb000000 0x0634bf0e 0xc9e80040
0x400574 <main+24>: 0x83fffffe 0x8301fc45 0x7e09fc7d 0x0000b8ec
(gdb) x/8xg $rip
0x400564 <main+8>: 0xeb00000000fc45c7 0xc9e800400634bf0e
0x400574 <main+24>: 0x8301fc4583fffffe 0x0000b8ec7e09fc7d
0x400584 <main+40>: 0x00841f0fc3c90000 0x246c894800000000
0x400594 <__libc_csu_init+4>: 0x8d48e02464894cd8 0x258d4c002008672d
Powyżej można zauważyć pewne udziwnienia w danych. Przy zmianie adnotacji ze słowa na pół słowa czy też na pojedynczy bajt, każda adnotacja jakby pokazywała coś innego. Pierwszy wydruk pokazuje jednak, że pierwsze dwa bajty to 0xc7 i 0x45, ale gdy badamy po pół słowie, w tym samym miejscu pamięci, pokazywana jest wartość 0x45c7. Spokojnie jest to tylko odwrócona kolejność bajtów i ten sam efekt jest przy całym słowie. Jest to logiczne z punktu widzenia procesora, bo wartości są przechwytywane w kolejności little endian.
To tyle na ten post, w następnym postaram się troszkę posprawdzać co kryje aplikacja po skompilowaniu i czy rzeczywiście jest to co w niej zawieraliśmy.
Brak komentarzy:
Prześlij komentarz