-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathx.htm
99 lines (94 loc) · 3.51 KB
/
x.htm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Referensi Perintah GDB - perintah x</title></head>
<body><div class="container-fluid"><div class="row"><div class="col-xs-12"><div class="main">
<h2>Perintah x</h2>
<p> Menampilkan isi memori di alamat tertentu menggunakan format yang ditentukan.</p>
<h4>Sintaks</h4>
<div class="syntax">
<b>x</b> [<i>Ekspresi Alamat</i>]<br/>
<b>x</b> /[<i>Format</i>] [<i>Ekspresi Alamat</i>]<br/>
<b>x</b> /[<i>Panjang</i>][<i>Format</i>] [<i>Ekspresi Alamat</i>]<br/>
<b>x</b><br/>
</div>
<p></p>
<h4>Parameter</h4>
<dl>
<dt>Ekspresi Alamat</dt>
<dd>Menentukan alamat memori yang isiannya akan ditampilkan. Ini bisa berupa alamat itu sendiri atau ekspresi C/C++ yang mengevaluasi ke alamat. Ekspresi dapat mencakup register (misalnya $eip) dan pseudoregister (misalnya $pc). Jika ekspresi alamat tidak ditentukan, perintah akan terus menampilkan isi memori dari alamat di mana perintah sebelumnya berakhir.</dd>
<dt>Format</dt>
<dd>Jika ditentukan, memungkinkan untuk mengganti format keluaran yang digunakan oleh perintah ini. Penyebut format yang valid adalah:</dd>
</dl>
<ul>
<li> o - oktal</li>
<li> x - heksadesimal</li>
<li> d - desimal</li>
<li> u - desimal tanpa tanda</li>
<li> t - biner</li>
<li> f - titik mengambang</li>
<li> a - alamat</li>
<li> c - karakter</li>
<li> s - string</li>
<li> i - instruksi</li>
</ul>
<p>Modifier ukuran berikut didukung:</p>
<ul>
<li> b - byte</li>
<li> h - setengah kata (nilai 16-bit)</li>
<li> w - kata (nilai 32-bit)</li>
<li> g - kata raksasa (nilai 64-bit)</li>
</ul>
<dl>
<dt>Panjang</dt>
<dd>Menentukan jumlah elemen yang akan ditampilkan oleh perintah ini.</dd>
</dl>
<p></p>
<h4>Contoh</h4>
<p>Kami akan mendemonstrasikan penggunaan perintah <b>x</b> menggunakan program dasar yang mendefinisikan sebuah array byte di stack:</p>
<pre><div class="code">
int main()
{
char testArray[] = "0123456789ABCDEF";
return 0;
}
</div></pre>
<p>Sekarang kita akan menggunakan perintah <b>x</b> untuk menampilkan isi memori yang diisi oleh array <b>testArray</b> dalam berbagai format. Kami juga akan menunjukkan cara menggunakan perintah <b>x</b> untuk mendisassemble instruksi yang ditunjuk oleh pseudoregister program counter ($pc).</p>
<pre><div class="code">
(gdb) <b>start</b>
Breakpoint sementara 1 di 0x8048446: file test.cpp, baris 2.
Starting program: /home/bazis/test
Breakpoint sementara 1, main () di test.cpp:2
2 {
(gdb) <b>next</b>
3 char testArray[] = "0123456789ABCDEF";
(gdb) <b>next</b>
4 return 0;
(gdb) <b>x testArray</b>
0xbfffef7b: 0x33323130
(gdb) <b>x/c testArray</b>
0xbfffef7b: 48 '0'
(gdb) <b>x/5c testArray</b>
0xbfffef7b: 48 '0' 49 '1' 50 '2' 51 '3' 52 '4'
(gdb) <b>x/2c</b>
0xbfffef80: 53 '5' 54 '6'
(gdb) <b>x/wx testArray</b>
0xbfffef7b: 0x33323130
(gdb) <b>x/2hx testArray</b>
0xbfffef7b: 0x3130 0x3332
(gdb) <b>x/gx testArray</b>
0xbfffef7b: 0x3736353433323130
(gdb) <b>x/s testArray</b>
0xbfffef7b: "0123456789ABCDEF"
(gdb) <b>x/5bx testArray</b>
0xbfffef7b: 0x30 0x31 0x32 0x33 0x34
(gdb) <b>x/5i $pc</b>
=> 0x8048477 <main()+58>: mov $0x0,%eax
0x804847c <main()+63>: mov 0x1c(%esp),%edx
0x8048480 <main()+67>: xor %gs:0x14,%edx
0x8048487 <main()+74>: je 0x804848e <main()+81>
0x8048489 <main()+76>: call 0x8048310 <__stack_chk_fail@plt>
</div></pre>
<p></p>
</div></div></div></div>
</body>
</html>