擅长:python、mysql、java
<p><code>import gdb</code>仅当您的Python代码在GDB进程中运行时才起作用。它不应该在常规的系统Python解释器中工作。</p>
<h2>解释</h2>
<ul>
<li>GDB嵌入了Python解释器,因此它可以使用Python作为扩展语言。</li>
<li>你不能像普通的Python库一样从<code>/usr/bin/python</code>中<code>import gdb</code>,因为GDB不是一个库。</li>
<li>你能做的就是从gdb内部<code>source MY-SCRIPT.py</code>(相当于运行<code>gdb -x MY-SCRIPT.py</code>)。</li>
</ul>
<h2>示例程序</h2>
<p>这里有一个独立的例子。将下面的文件保存到<code>t.py</code>:</p>
<pre><code>import gdb
gdb.execute('file /bin/cat')
o = gdb.execute('disassemble exit', to_string=True)
print(o)
gdb.execute('quit')
</code></pre>
<p>运行:</p>
<pre><code>$ gdb -q -x t.py
</code></pre>
<p>您将看到<code>exit()</code>的PLT存根被反汇编。在x86-64 Linux上:</p>
<pre><code>Dump of assembler code for function exit@plt:
0x0000000000401ae0 <+0>: jmpq *0x20971a(%rip) # 0x60b200 <exit@got.plt>
0x0000000000401ae6 <+6>: pushq $0x3d
0x0000000000401aeb <+11>: jmpq 0x401700
End of assembler dump.
</code></pre>
<p>我收集了一些关于学习GDB Python API <a href="http://blog.scottt.tw/2012/01/exploring-gdb-python-api-with-ipython_31.html">here</a>的资源。</p>