hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Free Software" and "Free Software Needs
Free Documentation", with the Front-Cover Texts being "A GNU Manual,"
and with the Back-Cover Texts as in (a) below.
 
(a) The FSF's Back-Cover Text is: "You are free to copy and modify
this GNU Manual.  Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom." -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Debugging with GDB: Disassembly In Guile</title>
 
<meta name="description" content="Debugging with GDB: Disassembly In Guile">
<meta name="keywords" content="Debugging with GDB: Disassembly In Guile">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Guile-API.html#Guile-API" rel="up" title="Guile API">
<link href="I_002fO-Ports-in-Guile.html#I_002fO-Ports-in-Guile" rel="next" title="I/O Ports in Guile">
<link href="Architectures-In-Guile.html#Architectures-In-Guile" rel="previous" title="Architectures In Guile">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
 
 
</head>
 
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Disassembly-In-Guile"></a>
<div class="header">
<p>
Next: <a href="I_002fO-Ports-in-Guile.html#I_002fO-Ports-in-Guile" accesskey="n" rel="next">I/O Ports in Guile</a>, Previous: <a href="Architectures-In-Guile.html#Architectures-In-Guile" accesskey="p" rel="previous">Architectures In Guile</a>, Up: <a href="Guile-API.html#Guile-API" accesskey="u" rel="up">Guile API</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Disassembly-In-Guile-1"></a>
<h4 class="subsubsection">23.3.3.22 Disassembly In Guile</h4>
 
<p>The disassembler can be invoked from Scheme code.
Furthermore, the disassembler can take a Guile port as input,
allowing one to disassemble from any source, and not just target memory.
</p>
<dl>
<dt><a name="index-arch_002ddisassemble"></a>Scheme Procedure: <strong>arch-disassemble</strong> <em>arch start-pc <span class="roman">[</span>#:port port<span class="roman">]</span> <span class="roman">[</span>#:offset offset<span class="roman">]</span> <span class="roman">[</span>#:size size<span class="roman">]</span> <span class="roman">[</span>#:count count<span class="roman">]</span></em></dt>
<dd><p>Return a list of disassembled instructions starting from the memory
address <var>start-pc</var>.
</p>
<p>The optional argument <var>port</var> specifies the input port to read bytes from.
If <var>port</var> is <code>#f</code> then bytes are read from target memory.
</p>
<p>The optional argument <var>offset</var> specifies the address offset of the
first byte in <var>port</var>.  This is useful, for example, when <var>port</var>
specifies a &lsquo;<samp>bytevector</samp>&rsquo; and you want the bytevector to be disassembled
as if it came from that address.  The <var>start-pc</var> passed to the reader
for <var>port</var> is offset by the same amount.
</p>
<p>Example:
</p><div class="smallexample">
<pre class="smallexample">(gdb) guile (use-modules (rnrs io ports))
(gdb) guile (define pc (value-&gt;integer (parse-and-eval &quot;$pc&quot;)))
(gdb) guile (define mem (open-memory #:start pc))
(gdb) guile (define bv (get-bytevector-n mem 10))
(gdb) guile (define bv-port (open-bytevector-input-port bv))
(gdb) guile (define arch (current-arch))
(gdb) guile (arch-disassemble arch pc #:port bv-port #:offset pc)
(((address . 4195516) (asm . &quot;mov    $0x4005c8,%edi&quot;) (length . 5)))
</pre></div>
 
<p>The optional arguments <var>size</var> and
<var>count</var> determine the number of instructions in the returned list.
If either <var>size</var> or <var>count</var> is specified as zero, then
no instructions are disassembled and an empty list is returned.
If both the optional arguments <var>size</var> and <var>count</var> are
specified, then a list of at most <var>count</var> disassembled instructions
whose start address falls in the closed memory address interval from
<var>start-pc</var> to (<var>start-pc</var> + <var>size</var> - 1) are returned.
If <var>size</var> is not specified, but <var>count</var> is specified,
then <var>count</var> number of instructions starting from the address
<var>start-pc</var> are returned.  If <var>count</var> is not specified but
<var>size</var> is specified, then all instructions whose start address
falls in the closed memory address interval from <var>start-pc</var> to
(<var>start-pc</var> + <var>size</var> - 1) are returned.
If neither <var>size</var> nor <var>count</var> are specified, then a single
instruction at <var>start-pc</var> is returned.
</p>
<p>Each element of the returned list is an alist (associative list)
with the following keys:
</p>
<dl compact="compact">
<dt><code>address</code></dt>
<dd><p>The value corresponding to this key is a Guile integer of
the memory address of the instruction.
</p>
</dd>
<dt><code>asm</code></dt>
<dd><p>The value corresponding to this key is a string value which represents
the instruction with assembly language mnemonics.  The assembly
language flavor used is the same as that specified by the current CLI
variable <code>disassembly-flavor</code>.  See <a href="Machine-Code.html#Machine-Code">Machine Code</a>.
</p>
</dd>
<dt><code>length</code></dt>
<dd><p>The value corresponding to this key is the length of the instruction in bytes.
</p>
</dd>
</dl>
</dd></dl>
 
<hr>
<div class="header">
<p>
Next: <a href="I_002fO-Ports-in-Guile.html#I_002fO-Ports-in-Guile" accesskey="n" rel="next">I/O Ports in Guile</a>, Previous: <a href="Architectures-In-Guile.html#Architectures-In-Guile" accesskey="p" rel="previous">Architectures In Guile</a>, Up: <a href="Guile-API.html#Guile-API" accesskey="u" rel="up">Guile API</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
 
 
 
</body>
</html>