-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathinfo_vtbl.htm
73 lines (65 loc) · 3.39 KB
/
info_vtbl.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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Referensi Perintah GDB - info vtbl command</title></head>
<body><div class="container-fluid"><div class="row"><div class="col-xs-12"><div class="main">
<h2>Perintah info vtbl</h2>
<p> Menampilkan informasi tentang tabel metode virtual (vtable) dari sebuah objek</p>
<h4>Sintaks</h4>
<div class="syntax">
<b>info</b> vtbl [<i>Ekspresi</i>]<br/>
</div>
<p></p>
<h4>Parameter</h4>
<dl>
<dt>Ekspresi</dt>
<dd>Menyebutkan sebuah ekspresi yang akan dievaluasi untuk mendapatkan pointer ke objek yang vtable-nya akan ditampilkan.</dd>
</dl>
<p></p>
<h4>Catatan</h4>
<p>Vtable berisi daftar pointer ke metode-metode virtual yang didefinisikan dalam kelas objek tersebut. Alamat vtable juga dapat digunakan untuk mengidentifikasi tipe aktual objek menggunakan perintah <b>info symbol</b>.</p>
<p></p>
<h4>Contoh</h4>
<p>Kami akan menunjukkan penggunaan perintah <b>info vtbl</b> menggunakan program C++ yang terdiri dari 2 kelas:</p>
<pre><div class="code">
<span class="keyword">class</span> BaseClass
{
<span class="keyword">public</span>:
<span class="keyword">virtual</span> <span class="keyword">void</span> Test()
{
}
};
<span class="keyword">class</span> ChildClass : <span class="keyword">public</span> BaseClass
{
<span class="keyword">public</span>:
<span class="keyword">virtual</span> <span class="keyword">void</span> Test()
{
}
};
<span class="keyword">typedef</span> <span class="keyword">int</span> UnusedType, UsedType;
<span class="keyword">int</span> main(<span class="keyword">int</span> argc, <span class="keyword">char</span> **argv)
{
BaseClass *pObject = <span class="keyword">new</span> ChildClass();
<span class="keyword">asm</span>(<span class="string">"int3"</span>);
<span class="keyword">delete</span> pObject;
<span class="keyword">return</span> 0;
}
</div></pre>
<p>Program membuat sebuah instance dari <b>ChildClass</b> dan menyimpan alamatnya dalam pointer <b>BaseClass</b>. Sekarang kita akan menggunakan perintah <b>info vtbl</b> untuk menampilkan vtable dan menunjukkan bahwa objek yang ditunjuk oleh pointer <b>BaseClass</b> sebenarnya adalah sebuah instance dari <b>ChildClass:</b></p>
<pre><div class="code">
(gdb) <b>run</b>
Starting program: /home/bazis/test
Program received signal SIGTRAP, Trace/breakpoint trap.
main (argc=1, argv=0xbffff064) at test.cpp:23
23 delete pObject;
(gdb) <b>print pObject</b>
$1 = (BaseClass *) 0x804b008
(gdb) <b>info vtbl pObject</b>
vtable for 'BaseClass' @ 0x80486c8 (subobject @ 0x804b008):
[0]: 0x80485f4 <ChildClass::Test()>
(gdb) <b>info symbol 0x80486c8</b>
vtable for ChildClass + 8 in section .rodata of /home/bazis/test
</div></pre>
<p></p>
</div></div></div></div>
</body>
</html>