Files
metasploit-gs/api/Msf/Exploit/Remote/Gdb.html
T
jenkins-metasploit c3f5bd3de2 Reboot gh-pages
2026-05-08 17:08:43 +00:00

1708 lines
54 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
Module: Msf::Exploit::Remote::Gdb
&mdash; Documentation by YARD 0.9.37
</title>
<link rel="stylesheet" href="../../../css/style.css" type="text/css" />
<link rel="stylesheet" href="../../../css/common.css" type="text/css" />
<script type="text/javascript">
pathId = "Msf::Exploit::Remote::Gdb";
relpath = '../../../';
</script>
<script type="text/javascript" charset="utf-8" src="../../../js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="../../../js/app.js"></script>
</head>
<body>
<div class="nav_wrap">
<iframe id="nav" src="../../../class_list.html?1"></iframe>
<div id="resizer"></div>
</div>
<div id="main" tabindex="-1">
<div id="header">
<div id="menu">
<a href="../../../_index.html">Index (G)</a> &raquo;
<span class='title'><span class='object_link'><a href="../../../Msf.html" title="Msf (module)">Msf</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../../Exploit.html" title="Msf::Exploit (class)">Exploit</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Remote.html" title="Msf::Exploit::Remote (class)">Remote</a></span></span>
&raquo;
<span class="title">Gdb</span>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="../../../class_list.html">
<svg width="24" height="24">
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
</svg>
</a>
</div>
<div class="clear"></div>
</div>
<div id="content"><h1>Module: Msf::Exploit::Remote::Gdb
</h1>
<div class="box_info">
<dl>
<dt>Includes:</dt>
<dd><span class='object_link'><a href="Tcp.html" title="Msf::Exploit::Remote::Tcp (module)">Tcp</a></span></dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/msf/core/exploit/remote/gdb.rb</dd>
</dl>
</div>
<h2>Overview</h2><div class="docstring">
<div class="discussion">
<p>Implement some helpers for communicating with a remote gdb instance.</p>
<p>More info on the gdb protocol can be found here: <a href="https://sourceware.org/gdb/current/onlinedocs/gdb/Overview.html#Overview">sourceware.org/gdb/current/onlinedocs/gdb/Overview.html#Overview</a></p>
</div>
</div>
<div class="tags">
</div><h2>Defined Under Namespace</h2>
<p class="children">
<strong class="classes">Classes:</strong> <span class='object_link'><a href="Gdb/BadAckError.html" title="Msf::Exploit::Remote::Gdb::BadAckError (class)">BadAckError</a></span>, <span class='object_link'><a href="Gdb/BadChecksumError.html" title="Msf::Exploit::Remote::Gdb::BadChecksumError (class)">BadChecksumError</a></span>, <span class='object_link'><a href="Gdb/BadResponseError.html" title="Msf::Exploit::Remote::Gdb::BadResponseError (class)">BadResponseError</a></span>
</p>
<h2>
Constant Summary
<small><a href="#" class="constants_summary_toggle">collapse</a></small>
</h2>
<dl class="constants">
<dt id="GDB_FEATURES-constant" class="">GDB_FEATURES =
<div class="docstring">
<div class="discussion">
<p>Default list of supported GDB features to send them to the target</p>
</div>
</div>
<div class="tags">
</div>
</dt>
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>qSupported:multiprocess+;qRelocInsn+;qvCont+;</span><span class='tstring_end'>&#39;</span></span></pre></dd>
<dt id="PC_REGISTERS-constant" class="">PC_REGISTERS =
<div class="docstring">
<div class="discussion">
<p>Maps index of register in GDB that holds $PC to architecture</p>
</div>
</div>
<div class="tags">
</div>
</dt>
<dd><pre class="code"><span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>08</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='const'>ARCH_X86</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0f</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='const'>ARCH_ARMLE</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>10</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='const'>ARCH_X64</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>20</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='const'>ARCH_AARCH64</span>
<span class='rbrace'>}</span></pre></dd>
</dl>
<h2>Instance Attribute Summary</h2>
<h3 class="inherited">Attributes included from <span class='object_link'><a href="Tcp.html" title="Msf::Exploit::Remote::Tcp (module)">Tcp</a></span></h3>
<p class="inherited"><span class='object_link'><a href="Tcp.html#sock-instance_method" title="Msf::Exploit::Remote::Tcp#sock (method)">#sock</a></span></p>
<h2>
Instance Method Summary
<small><a href="#" class="summary_toggle">collapse</a></small>
</h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#checksum-instance_method" title="#checksum (instance method)">#<strong>checksum</strong>(str) &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The two-digit checksum is computed as the modulo 256 sum of all characters between the leading $ and the trailing # (an eight bit unsigned checksum).</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#continue-instance_method" title="#continue (instance method)">#<strong>continue</strong>(opts = {}) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Continues execution of the remote process.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#decode_rle-instance_method" title="#decode_rle (instance method)">#<strong>decode_rle</strong>(msg) &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Implements decoding of gdbservers Run-Length-Encoding that is applied on some hex values to collapse repeated characters.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#detach-instance_method" title="#detach (instance method)">#<strong>detach</strong>(opts = {}) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Detaches from the remote process.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#enable_extended_mode-instance_method" title="#enable_extended_mode (instance method)">#<strong>enable_extended_mode</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#handshake-instance_method" title="#handshake (instance method)">#<strong>handshake</strong>(features = GDB_FEATURES) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Performs a handshake packet exchange.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#process_info-instance_method" title="#process_info (instance method)">#<strong>process_info</strong> &#x21d2; Hash </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Steps execution and finds $PC pointer and architecture.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#read_ack-instance_method" title="#read_ack (instance method)">#<strong>read_ack</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Reads an ACK packet from the wire.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#read_response-instance_method" title="#read_response (instance method)">#<strong>read_response</strong>(opts = {}) &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Reads (and possibly decodes) from the socket and sends an ACK to verify receipt.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#run_file-instance_method" title="#run_file (instance method)">#<strong>run_file</strong>(filename) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#send_ack-instance_method" title="#send_ack (instance method)">#<strong>send_ack</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Send an ACK packet.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#send_cmd-instance_method" title="#send_cmd (instance method)">#<strong>send_cmd</strong>(cmd) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Sends a command and receives an ACK from the remote.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#step-instance_method" title="#step (instance method)">#<strong>step</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Executes one instruction on the remote process.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#verify_checksum-instance_method" title="#verify_checksum (instance method)">#<strong>verify_checksum</strong>(res) &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Verifies a responses checksum.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#write-instance_method" title="#write (instance method)">#<strong>write</strong>(buf, addr) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Writes the buffer <code>buf</code> to the address <code>addr</code> in the remote processs memory.</p>
</div></span>
</li>
</ul>
<h3 class="inherited">Methods included from <span class='object_link'><a href="Tcp.html" title="Msf::Exploit::Remote::Tcp (module)">Tcp</a></span></h3>
<p class="inherited"><span class='object_link'><a href="Tcp.html#chost-instance_method" title="Msf::Exploit::Remote::Tcp#chost (method)">#chost</a></span>, <span class='object_link'><a href="Tcp.html#cleanup-instance_method" title="Msf::Exploit::Remote::Tcp#cleanup (method)">#cleanup</a></span>, <span class='object_link'><a href="Tcp.html#connect-instance_method" title="Msf::Exploit::Remote::Tcp#connect (method)">#connect</a></span>, <span class='object_link'><a href="Tcp.html#connect_timeout-instance_method" title="Msf::Exploit::Remote::Tcp#connect_timeout (method)">#connect_timeout</a></span>, <span class='object_link'><a href="Tcp.html#cport-instance_method" title="Msf::Exploit::Remote::Tcp#cport (method)">#cport</a></span>, <span class='object_link'><a href="Tcp.html#disconnect-instance_method" title="Msf::Exploit::Remote::Tcp#disconnect (method)">#disconnect</a></span>, <span class='object_link'><a href="Tcp.html#handler-instance_method" title="Msf::Exploit::Remote::Tcp#handler (method)">#handler</a></span>, <span class='object_link'><a href="Tcp.html#initialize-instance_method" title="Msf::Exploit::Remote::Tcp#initialize (method)">#initialize</a></span>, <span class='object_link'><a href="Tcp.html#lhost-instance_method" title="Msf::Exploit::Remote::Tcp#lhost (method)">#lhost</a></span>, <span class='object_link'><a href="Tcp.html#lport-instance_method" title="Msf::Exploit::Remote::Tcp#lport (method)">#lport</a></span>, <span class='object_link'><a href="Tcp.html#peer-instance_method" title="Msf::Exploit::Remote::Tcp#peer (method)">#peer</a></span>, <span class='object_link'><a href="Tcp.html#print_prefix-instance_method" title="Msf::Exploit::Remote::Tcp#print_prefix (method)">#print_prefix</a></span>, <span class='object_link'><a href="Tcp.html#proxies-instance_method" title="Msf::Exploit::Remote::Tcp#proxies (method)">#proxies</a></span>, <span class='object_link'><a href="Tcp.html#replicant-instance_method" title="Msf::Exploit::Remote::Tcp#replicant (method)">#replicant</a></span>, <span class='object_link'><a href="Tcp.html#rhost-instance_method" title="Msf::Exploit::Remote::Tcp#rhost (method)">#rhost</a></span>, <span class='object_link'><a href="Tcp.html#rport-instance_method" title="Msf::Exploit::Remote::Tcp#rport (method)">#rport</a></span>, <span class='object_link'><a href="Tcp.html#set_tcp_evasions-instance_method" title="Msf::Exploit::Remote::Tcp#set_tcp_evasions (method)">#set_tcp_evasions</a></span>, <span class='object_link'><a href="Tcp.html#shutdown-instance_method" title="Msf::Exploit::Remote::Tcp#shutdown (method)">#shutdown</a></span>, <span class='object_link'><a href="Tcp.html#ssl-instance_method" title="Msf::Exploit::Remote::Tcp#ssl (method)">#ssl</a></span>, <span class='object_link'><a href="Tcp.html#ssl_cipher-instance_method" title="Msf::Exploit::Remote::Tcp#ssl_cipher (method)">#ssl_cipher</a></span>, <span class='object_link'><a href="Tcp.html#ssl_verify_mode-instance_method" title="Msf::Exploit::Remote::Tcp#ssl_verify_mode (method)">#ssl_verify_mode</a></span>, <span class='object_link'><a href="Tcp.html#ssl_version-instance_method" title="Msf::Exploit::Remote::Tcp#ssl_version (method)">#ssl_version</a></span>, <span class='object_link'><a href="Tcp.html#sslkeylogfile-instance_method" title="Msf::Exploit::Remote::Tcp#sslkeylogfile (method)">#sslkeylogfile</a></span></p>
<div id="instance_method_details" class="method_details_list">
<h2>Instance Method Details</h2>
<div class="method_details first">
<h3 class="signature first" id="checksum-instance_method">
#<strong>checksum</strong>(str) &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The two-digit checksum is computed as the modulo 256 sum of all characters between the leading $ and the trailing # (an eight bit unsigned checksum).</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>str</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>the string to calculate the checksum of</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>hex string containing checksum</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
98
99
100</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 98</span>
<span class='kw'>def</span> <span class='id identifier rubyid_checksum'>checksum</span><span class='lparen'>(</span><span class='id identifier rubyid_str'>str</span><span class='rparen'>)</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>%02x</span><span class='tstring_end'>&quot;</span></span> <span class='op'>%</span> <span class='id identifier rubyid_str'>str</span><span class='period'>.</span><span class='id identifier rubyid_bytes'>bytes</span><span class='period'>.</span><span class='id identifier rubyid_inject'>inject</span><span class='lparen'>(</span><span class='int'>0</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_b'>b</span><span class='comma'>,</span> <span class='id identifier rubyid_sum'>sum</span><span class='op'>|</span> <span class='lparen'>(</span><span class='id identifier rubyid_sum'>sum</span><span class='op'>+</span><span class='id identifier rubyid_b'>b</span><span class='rparen'>)</span><span class='op'>%</span><span class='int'>256</span> <span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="continue-instance_method">
#<strong>continue</strong>(opts = {}) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Continues execution of the remote process</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>opts</span>
<span class='type'>(<tt>Hash</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
&mdash;
<div class='inline'>
<p>the options hash</p>
</div>
</li>
</ul>
<p class="tag_title">Options Hash (<tt>opts</tt>):</p>
<ul class="option">
<li>
<span class="name">:read</span>
<span class="type">(<tt>Boolean</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>read the response</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
144
145
146
147</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 144</span>
<span class='kw'>def</span> <span class='id identifier rubyid_continue'>continue</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_send_cmd'>send_cmd</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>vCont;c</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_read_response'>read_response</span> <span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:read</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="decode_rle-instance_method">
#<strong>decode_rle</strong>(msg) &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Implements decoding of gdbservers Run-Length-Encoding that is applied on some hex values to collapse repeated characters.</p>
<p><a href="https://sourceware.org/gdb/current/onlinedocs/gdb/Overview.html#Binary-Data">sourceware.org/gdb/current/onlinedocs/gdb/Overview.html#Binary-Data</a></p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>msg</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>the message to decode</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>the decoded result</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
87
88
89
90
91
92</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 87</span>
<span class='kw'>def</span> <span class='id identifier rubyid_decode_rle'>decode_rle</span><span class='lparen'>(</span><span class='id identifier rubyid_msg'>msg</span><span class='rparen'>)</span>
<span class='id identifier rubyid_vprint_status'>vprint_status</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Before decoding: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_msg'>msg</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='id identifier rubyid_msg'>msg</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>.\*.</span><span class='regexp_end'>/</span></span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_match'>match</span><span class='op'>|</span>
<span class='id identifier rubyid_match'>match</span><span class='period'>.</span><span class='id identifier rubyid_bytes'>bytes</span><span class='period'>.</span><span class='id identifier rubyid_to_a'>to_a</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_chr'>chr</span> <span class='op'>*</span> <span class='lparen'>(</span><span class='id identifier rubyid_match'>match</span><span class='period'>.</span><span class='id identifier rubyid_bytes'>bytes</span><span class='period'>.</span><span class='id identifier rubyid_to_a'>to_a</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span> <span class='op'>-</span> <span class='int'>29</span> <span class='op'>+</span> <span class='int'>1</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="detach-instance_method">
#<strong>detach</strong>(opts = {}) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Detaches from the remote process</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>opts</span>
<span class='type'>(<tt>Hash</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
&mdash;
<div class='inline'>
<p>the options hash</p>
</div>
</li>
</ul>
<p class="tag_title">Options Hash (<tt>opts</tt>):</p>
<ul class="option">
<li>
<span class="name">:read</span>
<span class="type">(<tt>Boolean</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>read the response</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
152
153
154
155</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 152</span>
<span class='kw'>def</span> <span class='id identifier rubyid_detach'>detach</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_send_cmd'>send_cmd</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>D</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_read_response'>read_response</span> <span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:read</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="enable_extended_mode-instance_method">
#<strong>enable_extended_mode</strong> &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
176
177
178
179</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 176</span>
<span class='kw'>def</span> <span class='id identifier rubyid_enable_extended_mode'>enable_extended_mode</span>
<span class='id identifier rubyid_send_cmd'>send_cmd</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>!</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_read_response'>read_response</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="handshake-instance_method">
#<strong>handshake</strong>(features = GDB_FEATURES) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Performs a handshake packet exchange</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>features</span>
<span class='type'>(<tt>String</tt>)</span>
<em class="default">(defaults to: <tt>GDB_FEATURES</tt>)</em>
&mdash;
<div class='inline'>
<p>the list of supported features to tell the remote host that the client supports (defaults to <code>DEFAULT_GDB_FEATURES</code>)</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
184
185
186
187</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 184</span>
<span class='kw'>def</span> <span class='id identifier rubyid_handshake'>handshake</span><span class='lparen'>(</span><span class='id identifier rubyid_features'>features</span><span class='op'>=</span><span class='const'>GDB_FEATURES</span><span class='rparen'>)</span>
<span class='id identifier rubyid_send_cmd'>send_cmd</span> <span class='id identifier rubyid_features'>features</span>
<span class='id identifier rubyid_read_response'>read_response</span> <span class='comment'># lots of flags, nothing interesting
</span><span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="process_info-instance_method">
#<strong>process_info</strong> &#x21d2; <tt>Hash</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Steps execution and finds $PC pointer and architecture</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Hash</tt>)</span>
&mdash;
<div class='inline'>
<p>with :arch and :pc keys containing architecture and PC pointer</p>
</div>
</li>
</ul>
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt><span class='object_link'><a href="Gdb/BadResponseError.html" title="Msf::Exploit::Remote::Gdb::BadResponseError (class)">BadResponseError</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>if necessary data is missing</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 122</span>
<span class='kw'>def</span> <span class='id identifier rubyid_process_info'>process_info</span>
<span class='id identifier rubyid_data'>data</span> <span class='op'>=</span> <span class='id identifier rubyid_step'>step</span>
<span class='id identifier rubyid_pc_data'>pc_data</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_split'>split</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='lbracket'>[</span><span class='int'>2</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="Gdb/BadResponseError.html" title="Msf::Exploit::Remote::Gdb::BadResponseError (class)">BadResponseError</a></span></span> <span class='kw'>if</span> <span class='id identifier rubyid_pc_data'>pc_data</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='id identifier rubyid_pc_data'>pc_data</span> <span class='op'>=</span> <span class='id identifier rubyid_pc_data'>pc_data</span><span class='period'>.</span><span class='id identifier rubyid_split'>split</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>:</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_my_arch'>my_arch</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="#PC_REGISTERS-constant" title="Msf::Exploit::Remote::Gdb::PC_REGISTERS (constant)">PC_REGISTERS</a></span></span><span class='lbracket'>[</span><span class='id identifier rubyid_pc_data'>pc_data</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_pc'>pc</span> <span class='op'>=</span> <span class='id identifier rubyid_pc_data'>pc_data</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_my_arch'>my_arch</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Could not detect a supported arch from response to step:\n</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_pc_data'>pc_data</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='lbrace'>{</span>
<span class='label'>arch:</span> <span class='id identifier rubyid_my_arch'>my_arch</span><span class='comma'>,</span>
<span class='label'>pc:</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Text</span><span class='period'>.</span><span class='id identifier rubyid_to_hex'>to_hex</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Arch</span><span class='period'>.</span><span class='id identifier rubyid_pack_addr'>pack_addr</span><span class='lparen'>(</span><span class='id identifier rubyid_my_arch'>my_arch</span><span class='comma'>,</span> <span class='const'>Integer</span><span class='lparen'>(</span><span class='id identifier rubyid_pc'>pc</span><span class='comma'>,</span> <span class='int'>16</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='comma'>,</span>
<span class='label'>pc_raw:</span> <span class='const'>Integer</span><span class='lparen'>(</span><span class='id identifier rubyid_pc'>pc</span><span class='comma'>,</span> <span class='int'>16</span><span class='rparen'>)</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="read_ack-instance_method">
#<strong>read_ack</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Reads an ACK packet from the wire</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt><span class='object_link'><a href="Gdb/BadAckError.html" title="Msf::Exploit::Remote::Gdb::BadAckError (class)">BadAckError</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>if a bad ACK is received</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
45
46
47
48
49
50</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 45</span>
<span class='kw'>def</span> <span class='id identifier rubyid_read_ack'>read_ack</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_sock'>sock</span><span class='period'>.</span><span class='id identifier rubyid_get_once'>get_once</span><span class='lparen'>(</span><span class='int'>1</span><span class='rparen'>)</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>+</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="Gdb/BadAckError.html" title="Msf::Exploit::Remote::Gdb::BadAckError (class)">BadAckError</a></span></span>
<span class='kw'>end</span>
<span class='id identifier rubyid_vprint_status'>vprint_status</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Received ack...</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="read_response-instance_method">
#<strong>read_response</strong>(opts = {}) &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Reads (and possibly decodes) from the socket and sends an ACK to verify receipt</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>opts</span>
<span class='type'>(<tt>Hash</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
&mdash;
<div class='inline'>
<p>the options hash</p>
</div>
</li>
</ul>
<p class="tag_title">Options Hash (<tt>opts</tt>):</p>
<ul class="option">
<li>
<span class="name">:decode</span>
<span class="type">(<tt>Boolean</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>rle decoding should be applied to the response</p>
</div>
</li>
<li>
<span class="name">:verify</span>
<span class="type">(<tt>Boolean</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>verify the response's checksum</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>the response</p>
</div>
</li>
</ul>
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt><span class='object_link'><a href="Gdb/BadResponseError.html" title="Msf::Exploit::Remote::Gdb::BadResponseError (class)">BadResponseError</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>if the expected response is missing</p>
</div>
</li>
<li>
<span class='type'>(<tt><span class='object_link'><a href="Gdb/BadChecksumError.html" title="Msf::Exploit::Remote::Gdb::BadChecksumError (class)">BadChecksumError</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>if the checksum is invalid</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
69
70
71
72
73
74
75
76
77
78</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 69</span>
<span class='kw'>def</span> <span class='id identifier rubyid_read_response'>read_response</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_decode'>decode</span><span class='comma'>,</span> <span class='id identifier rubyid_verify'>verify</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:decode</span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:verify</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='id identifier rubyid_sock'>sock</span><span class='period'>.</span><span class='id identifier rubyid_get_once'>get_once</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="Gdb/BadResponseError.html" title="Msf::Exploit::Remote::Gdb::BadResponseError (class)">BadResponseError</a></span></span> <span class='kw'>if</span> <span class='id identifier rubyid_res'>res</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="Gdb/BadChecksumError.html" title="Msf::Exploit::Remote::Gdb::BadChecksumError (class)">BadChecksumError</a></span></span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_verify'>verify</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_verify_checksum'>verify_checksum</span><span class='lparen'>(</span><span class='id identifier rubyid_res'>res</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='id identifier rubyid_decode_rle'>decode_rle</span><span class='lparen'>(</span><span class='id identifier rubyid_res'>res</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_decode'>decode</span>
<span class='id identifier rubyid_vprint_status'>vprint_status</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Result: </span><span class='tstring_end'>&#39;</span></span><span class='op'>+</span><span class='id identifier rubyid_res'>res</span><span class='rparen'>)</span>
<span class='id identifier rubyid_send_ack'>send_ack</span>
<span class='id identifier rubyid_res'>res</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="run_file-instance_method">
#<strong>run_file</strong>(filename) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
171
172
173
174</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 171</span>
<span class='kw'>def</span> <span class='id identifier rubyid_run_file'>run_file</span><span class='lparen'>(</span><span class='id identifier rubyid_filename'>filename</span><span class='rparen'>)</span>
<span class='id identifier rubyid_send_cmd'>send_cmd</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>vRun;</span><span class='embexpr_beg'>#{</span><span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Text</span><span class='period'>.</span><span class='id identifier rubyid_to_hex'>to_hex</span><span class='lparen'>(</span><span class='id identifier rubyid_filename'>filename</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='id identifier rubyid_read_response'>read_response</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="send_ack-instance_method">
#<strong>send_ack</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Send an ACK packet</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
38
39
40
41</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 38</span>
<span class='kw'>def</span> <span class='id identifier rubyid_send_ack'>send_ack</span>
<span class='id identifier rubyid_sock'>sock</span><span class='period'>.</span><span class='id identifier rubyid_put'>put</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>+</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_vprint_status'>vprint_status</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Sending ack...</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="send_cmd-instance_method">
#<strong>send_cmd</strong>(cmd) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Sends a command and receives an ACK from the remote.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>cmd</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>the gdb command to run. The command is will be wrapped '$' prefix and checksum.</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
55
56
57
58
59
60</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 55</span>
<span class='kw'>def</span> <span class='id identifier rubyid_send_cmd'>send_cmd</span><span class='lparen'>(</span><span class='id identifier rubyid_cmd'>cmd</span><span class='rparen'>)</span>
<span class='id identifier rubyid_full_cmd'>full_cmd</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>$</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>#</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_checksum'>checksum</span><span class='lparen'>(</span><span class='id identifier rubyid_cmd'>cmd</span><span class='rparen'>)</span>
<span class='id identifier rubyid_vprint_status'>vprint_status</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Sending cmd: </span><span class='tstring_end'>&#39;</span></span><span class='op'>+</span><span class='id identifier rubyid_full_cmd'>full_cmd</span><span class='rparen'>)</span>
<span class='id identifier rubyid_sock'>sock</span><span class='period'>.</span><span class='id identifier rubyid_put'>put</span><span class='lparen'>(</span><span class='id identifier rubyid_full_cmd'>full_cmd</span><span class='rparen'>)</span>
<span class='id identifier rubyid_read_ack'>read_ack</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="step-instance_method">
#<strong>step</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Executes one instruction on the remote process</p>
<p>The results of running “step” will look like: x86: $T0505:00000000;04:a0f7ffbf;08:d2f0fdb7;thread:p2d39.2d39;core:0;#53 x64: $T0506:0000000000000000;07:b0587f9fff7f0000;10:d3e29d03057f0000;thread:p8bf9.8bf9;core:0;#df The third comma-separated field will contain EIP, and the register index will let us deduce the remote architecture (through PC_REGISTERS lookup)</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>a list of key/value pairs, including current PC</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
166
167
168
169</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 166</span>
<span class='kw'>def</span> <span class='id identifier rubyid_step'>step</span>
<span class='id identifier rubyid_send_cmd'>send_cmd</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>vCont;s</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_read_response'>read_response</span><span class='lparen'>(</span><span class='label'>decode:</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="verify_checksum-instance_method">
#<strong>verify_checksum</strong>(res) &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Verifies a responses checksum</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>res</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>the response to check</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
&mdash;
<div class='inline'>
<p>whether the checksum is valid</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
105
106
107
108</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 105</span>
<span class='kw'>def</span> <span class='id identifier rubyid_verify_checksum'>verify_checksum</span><span class='lparen'>(</span><span class='id identifier rubyid_res'>res</span><span class='rparen'>)</span>
<span class='id identifier rubyid_msg'>msg</span><span class='comma'>,</span> <span class='id identifier rubyid_chksum'>chksum</span> <span class='op'>=</span> <span class='id identifier rubyid_res'>res</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^\$(.*)#(\h{2})$</span><span class='regexp_end'>/</span></span><span class='rparen'>)</span><span class='lbracket'>[</span><span class='int'>1</span><span class='op'>..</span><span class='int'>2</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_checksum'>checksum</span><span class='lparen'>(</span><span class='id identifier rubyid_msg'>msg</span><span class='rparen'>)</span> <span class='op'>==</span> <span class='id identifier rubyid_chksum'>chksum</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="write-instance_method">
#<strong>write</strong>(buf, addr) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Writes the buffer <code>buf</code> to the address <code>addr</code> in the remote processs memory</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>buf</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>the buffer to write</p>
</div>
</li>
<li>
<span class='name'>addr</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>the hex-encoded address to write to</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
113
114
115
116
117</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/gdb.rb', line 113</span>
<span class='kw'>def</span> <span class='id identifier rubyid_write'>write</span><span class='lparen'>(</span><span class='id identifier rubyid_buf'>buf</span><span class='comma'>,</span> <span class='id identifier rubyid_addr'>addr</span><span class='rparen'>)</span>
<span class='id identifier rubyid_hex'>hex</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Text</span><span class='period'>.</span><span class='id identifier rubyid_to_hex'>to_hex</span><span class='lparen'>(</span><span class='id identifier rubyid_buf'>buf</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_send_cmd'>send_cmd</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>M</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_addr'>addr</span><span class='embexpr_end'>}</span><span class='tstring_content'>,</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_buf'>buf</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='lparen'>(</span><span class='int'>16</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_hex'>hex</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='id identifier rubyid_read_response'>read_response</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:01:23 2026 by
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.37 (ruby-3.1.5).
</div>
</div>
</body>
</html>