Skip to content

Commit 80e82d4

Browse files
committed
released v0.9.8
1 parent cfb1f58 commit 80e82d4

File tree

347 files changed

+135063
-87
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

347 files changed

+135063
-87
lines changed

bap/api/master/Bap.Std.Bil.finder-c.html

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,32 @@ <h1>Class <a href="type_Bap.Std.Bil.finder.html">Bap.Std.Bil.finder</a></h1>
3535
<p>
3636

3737
For example, the following function will check whether <code class="code">x</code>
38-
variable is referenced in the provided scope.
39-
<pre class="codepre"><code class="code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;is_referenced&nbsp;x&nbsp;=&nbsp;find&nbsp;(<span class="keyword">object</span>(self)<br>
38+
variable is assigned (i.e., occurs on the left of the
39+
assignment operator) in the provided scope.
40+
<pre class="codepre"><code class="code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;is_assigned&nbsp;x&nbsp;=&nbsp;find&nbsp;(<span class="keyword">object</span>(self)<br>
4041
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">inherit</span>&nbsp;[unit]&nbsp;finder<br>
41-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>!&nbsp;enter_var&nbsp;y&nbsp;cc&nbsp;=<br>
42+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>!&nbsp;enter_move&nbsp;y&nbsp;_rhs&nbsp;cc&nbsp;=<br>
4243
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span>&nbsp;<span class="constructor">Var</span>.(x&nbsp;=&nbsp;y)&nbsp;<span class="keyword">then</span>&nbsp;cc.return&nbsp;(<span class="constructor">Some</span>&nbsp;());&nbsp;cc<br>
4344
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span>)<br>
44-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code></pre><br>
45+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code></pre>
46+
<p>
47+
48+
There're three <code class="code">find</code> functions in the library, that accepts
49+
an object of type <code class="code">finder</code>:
50+
<p>
51+
<ul>
52+
<li><code class="code"><span class="constructor">Bil</span>.finder</code> searches in the <code class="code">stmt list</code> aka <code class="code">bil</code></li>
53+
<li><code class="code"><span class="constructor">Stmt</span>.finder</code> searches in <code class="code">stmt</code></li>
54+
<li><code class="code"><span class="constructor">Exp</span>.finder</code> searches in <code class="code">exp</code>.</li>
55+
</ul>
56+
57+
In addition, you can use this object directly, using one of
58+
the two provided entry points.<br>
4559
</div>
4660
<b>Inherits</b><ul>
4761
<li><a href="Bap.Std.Bil.visitor-c.html"><code class="code"><span class="constructor">Bap</span>.<span class="constructor">Std</span>.<span class="constructor">Bil</span>.visitor</code></a></li>
4862
</ul>
4963
<hr width="100%">
5064

51-
<pre><span id="METHODfind"><span class="keyword">method</span> find</span> : <code class="type">stmt list -> 'a option</code></pre></body></html>
65+
<pre><span id="METHODfind_in_bil"><span class="keyword">method</span> find_in_bil</span> : <code class="type">stmt list -> 'a option</code></pre>
66+
<pre><span id="METHODfind_in_exp"><span class="keyword">method</span> find_in_exp</span> : <code class="type">exp -> 'a option</code></pre></body></html>

bap/api/master/Bap.Std.Bil.html

Lines changed: 47 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
<link title="Bap" rel="Chapter" href="Bap.html"><link title="Functional constructors" rel="Section" href="#2_Functionalconstructors">
2020
<link title="AST Visitors" rel="Section" href="#bil_visitor">
2121
<link title="BIL Helper functions" rel="Section" href="#bil_helpers">
22+
<link title="General purpose iterators" rel="Subsection" href="#3_Generalpurposeiterators">
2223
<title>Bap.Std.Bil</title>
2324
</head>
2425
<body>
@@ -36,18 +37,23 @@ <h1>Module <a href="type_Bap.Std.Bil.html">Bap.Std.Bil</a></h1>
3637
programs and expressions.
3738
<p>
3839

39-
Example: <pre class="codepre"><code class="code"><span class="constructor">Bil</span>.([<br>
40-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;:=&nbsp;exp_of_op&nbsp;src&nbsp;<span class="keyword">lsr</span>&nbsp;int32&nbsp;1;<br>
41-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;:=&nbsp;exp_of_op&nbsp;src;<br>
42-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;:=&nbsp;int32&nbsp;31;<br>
43-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while_&nbsp;(var&nbsp;v&nbsp;&lt;&gt;&nbsp;int32&nbsp;0)&nbsp;[<br>
44-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;:=&nbsp;var&nbsp;r&nbsp;<span class="keyword">lsl</span>&nbsp;int32&nbsp;1;<br>
45-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;:=&nbsp;var&nbsp;r&nbsp;<span class="keyword">lor</span>&nbsp;(var&nbsp;v&nbsp;<span class="keyword">land</span>&nbsp;int32&nbsp;1);<br>
46-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;:=&nbsp;var&nbsp;v&nbsp;<span class="keyword">lsr</span>&nbsp;int32&nbsp;1;<br>
47-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;:=&nbsp;var&nbsp;s&nbsp;-&nbsp;int32&nbsp;1;<br>
40+
Example:
41+
<pre class="codepre"><code class="code"><span class="constructor">Bil</span>.([<br>
42+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;:=&nbsp;src&nbsp;<span class="keyword">lsr</span>&nbsp;i32&nbsp;1;<br>
43+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;:=&nbsp;src;<br>
44+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;:=&nbsp;i32&nbsp;31;<br>
45+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while_&nbsp;(var&nbsp;v&nbsp;&lt;&gt;&nbsp;i32&nbsp;0)&nbsp;[<br>
46+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;:=&nbsp;var&nbsp;r&nbsp;<span class="keyword">lsl</span>&nbsp;i32&nbsp;1;<br>
47+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;:=&nbsp;var&nbsp;r&nbsp;<span class="keyword">lor</span>&nbsp;(var&nbsp;v&nbsp;<span class="keyword">land</span>&nbsp;i32&nbsp;1);<br>
48+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;:=&nbsp;var&nbsp;v&nbsp;<span class="keyword">lsr</span>&nbsp;i32&nbsp;1;<br>
49+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;:=&nbsp;var&nbsp;s&nbsp;-&nbsp;i32&nbsp;1;<br>
4850
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;];<br>
49-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dest&nbsp;:=&nbsp;var&nbsp;r&nbsp;<span class="keyword">lsl</span>&nbsp;var&nbsp;s;<br>
50-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;])&nbsp;cond</code></pre><br>
51+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dst&nbsp;:=&nbsp;var&nbsp;r&nbsp;<span class="keyword">lsl</span>&nbsp;var&nbsp;s;<br>
52+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;])</code></pre>
53+
where <code class="code">i32</code> is defined as
54+
<code class="code"><span class="keyword">let</span> i32 x = <span class="constructor">Bil</span>.int (<span class="constructor">Word</span>.of_int ~width:32 x)</code>
55+
and <code class="code">v,r,s</code> are some variables of type <code class="code">var</code>; and
56+
<code class="code">src, dst</code> are expressions of type <code class="code">exp</code>.<br>
5157
</div>
5258
<hr width="100%">
5359

@@ -145,47 +151,54 @@ <h2 id="bil_visitor">AST Visitors</h2>.
145151
</div>
146152
<br>
147153
<h2 id="bil_helpers">BIL Helper functions</h2><br>
154+
<br>
155+
<h3 id="3_Generalpurposeiterators">General purpose iterators</h3><br>
148156

149-
<pre><span id="VALfind_map"><span class="keyword">val</span> find_map</span> : <code class="type">'a #<a href="Bap.Std.Bil.finder-c.html">finder</a> -> stmt list -> 'a option</code></pre><div class="info ">
150-
<code class="code">find_map finder bil</code> search in the BIL<br>
151-
</div>
152-
153-
<pre><span id="VALfind"><span class="keyword">val</span> find</span> : <code class="type">unit #<a href="Bap.Std.Bil.finder-c.html">finder</a> -> stmt list -> bool</code></pre><div class="info ">
154-
<code class="code">find finder bil</code> returns true if <code class="code">finder</code> finds
155-
something. Note a better name would be <code class="code">exists</code><br>
157+
<pre><span id="VALfold"><span class="keyword">val</span> fold</span> : <code class="type">'a #<a href="Bap.Std.Bil.visitor-c.html">visitor</a> -> init:'a -> stmt list -> 'a</code></pre><div class="info ">
158+
<code class="code">fold visitor ~init bil</code> folds visitor over BIL, passing init
159+
value through the tree nodes. See also <a href="Bap.Std.Exp.html#VALfold"><code class="code"><span class="constructor">Exp</span>.fold</code></a> and
160+
<a href="Bap.Std.Stmt.html#VALfold"><code class="code"><span class="constructor">Stmt</span>.fold</code></a>.<br>
156161
</div>
157162

158163
<pre><span id="VALiter"><span class="keyword">val</span> iter</span> : <code class="type">unit #<a href="Bap.Std.Bil.visitor-c.html">visitor</a> -> stmt list -> unit</code></pre><div class="info ">
159164
<code class="code">iter visitor bil</code> apply a visitor for each node of a BIL
160-
forest.<br>
165+
forest. See also <a href="Bap.Std.Exp.html#VALiter"><code class="code"><span class="constructor">Exp</span>.iter</code></a> and <a href="Bap.Std.Stmt.html#VALiter"><code class="code"><span class="constructor">Stmt</span>.iter</code></a>.<br>
161166
</div>
162167

163-
<pre><span id="VALfold"><span class="keyword">val</span> fold</span> : <code class="type">'a #<a href="Bap.Std.Bil.visitor-c.html">visitor</a> -> init:'a -> stmt list -> 'a</code></pre><div class="info ">
164-
<code class="code">fold visitor ~init bil</code> folds visitor over BIL, passing init
165-
value through the tree nodes.<br>
168+
<pre><span id="VALmap"><span class="keyword">val</span> map</span> : <code class="type">#<a href="Bap.Std.Bil.mapper-c.html">mapper</a> -> stmt list -> stmt list</code></pre><div class="info ">
169+
<code class="code">map mapper bil</code> map or transform BIL program. See also
170+
<a href="Bap.Std.Exp.html#VALmap"><code class="code"><span class="constructor">Exp</span>.map</code></a>.<br>
166171
</div>
167172

168-
<pre><span id="VALmap"><span class="keyword">val</span> map</span> : <code class="type">#<a href="Bap.Std.Bil.mapper-c.html">mapper</a> -> stmt list -> stmt list</code></pre><div class="info ">
169-
<code class="code">map mapper bil</code> map or transform BIL program.<br>
173+
<pre><span id="VALfind"><span class="keyword">val</span> find</span> : <code class="type">'a #<a href="Bap.Std.Bil.finder-c.html">finder</a> -> stmt list -> 'a option</code></pre><div class="info ">
174+
<code class="code">find finder bil</code> search in <code class="code">bil</code> using provided <code class="code">finder</code>. See
175+
also <a href="Bap.Std.Exp.html#VALfind"><code class="code"><span class="constructor">Exp</span>.find</code></a> and <a href="Bap.Std.Stmt.html#VALfind"><code class="code"><span class="constructor">Stmt</span>.find</code></a>.<br>
176+
</div>
177+
178+
<pre><span id="VALexists"><span class="keyword">val</span> exists</span> : <code class="type">unit #<a href="Bap.Std.Bil.finder-c.html">finder</a> -> stmt list -> bool</code></pre><div class="info ">
179+
<code class="code">exists finder bil</code> returns true if <code class="code">finder</code> finds
180+
something. See also <a href="Bap.Std.Exp.html#VALexists"><code class="code"><span class="constructor">Exp</span>.exists</code></a> and <a href="Bap.Std.Stmt.html#VALexists"><code class="code"><span class="constructor">Stmt</span>.exists</code></a>.<br>
170181
</div>
171182

172183
<pre><span id="VALis_referenced"><span class="keyword">val</span> is_referenced</span> : <code class="type"><a href="Bap.Std.html#TYPEvar">var</a> -> stmt list -> bool</code></pre><div class="info ">
173-
<code class="code">is_referenced x p</code> is <code class="code"><span class="keyword">true</span></code> if <code class="code">x</code> is referenced in some expression or
174-
statement in program <code class="code">p</code>:
175-
BUG: currently occurrences on the left hand side of the
176-
assignment operator is considered a reference too.<br>
184+
<code class="code">is_referenced x p</code> is <code class="code"><span class="keyword">true</span></code> if <code class="code">x</code> is referenced in some
185+
expression or statement in program <code class="code">p</code>, before it is
186+
assigned.<br>
177187
</div>
178188

179189
<pre><span id="VALis_assigned"><span class="keyword">val</span> is_assigned</span> : <code class="type">?strict:bool -> <a href="Bap.Std.html#TYPEvar">var</a> -> stmt list -> bool</code></pre><div class="info ">
180190
<code class="code">is_assigned x p</code> is <code class="code"><span class="keyword">true</span></code> if there exists such <code class="code"><span class="constructor">Move</span></code>
181-
statement, that <code class="code">x</code> occures on the left side of it. If <code class="code">strict</code>
182-
is true, then only unconditional assignments. By default,
183-
<code class="code">strict</code> is <code class="code"><span class="keyword">false</span></code><br>
191+
statement, that <code class="code">x</code> occures on the left side of it. If
192+
<code class="code">strict</code> is true, then only unconditional assignments are
193+
accounted. By default, <code class="code">strict</code> is <code class="code"><span class="keyword">false</span></code><br>
184194
</div>
185195

186196
<pre><span id="VALprune_unreferenced"><span class="keyword">val</span> prune_unreferenced</span> : <code class="type">stmt list -> stmt list</code></pre><div class="info ">
187197
<code class="code">prune_unreferenced p</code> remove all assignments to variables that
188-
are not used in the program <code class="code">p</code><br>
198+
are not used in the program <code class="code">p</code>. This is a local optimization.
199+
The variable is unreferenced if it is not referenced in its lexical
200+
scope, or if it is referenced after the assignment. Only
201+
temporary variables are pruned, as their scope is local.<br>
189202
</div>
190203

191204
<pre><span id="VALnormalize_negatives"><span class="keyword">val</span> normalize_negatives</span> : <code class="type">stmt list -> stmt list</code></pre><div class="info ">
@@ -194,7 +207,8 @@ <h2 id="bil_helpers">BIL Helper functions</h2><br>
194207

195208
<pre><span id="VALsubstitute"><span class="keyword">val</span> substitute</span> : <code class="type">exp -> exp -> stmt list -> stmt list</code></pre><div class="info ">
196209
<code class="code">substitute x y p</code> substitutes each occurrence of expression <code class="code">x</code> by
197-
expression <code class="code">y</code> in program <code class="code">p</code><br>
210+
expression <code class="code">y</code> in program <code class="code">p</code>. The mnemonic to remember the
211+
order is to recall the sed's <code class="code">s/<span class="keyword">in</span>/out</code> syntax.<br>
198212
</div>
199213

200214
<pre><span id="VALsubstitute_var"><span class="keyword">val</span> substitute_var</span> : <code class="type"><a href="Bap.Std.html#TYPEvar">var</a> -> exp -> stmt list -> stmt list</code></pre><div class="info ">

bap/api/master/Bap.Std.CPU.html

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ <h3 id="3_Minimumsetofrequireddefinitions">Minimum set of required definitions</
4242
</div>
4343

4444
<pre><span id="VALpc"><span class="keyword">val</span> pc</span> : <code class="type"><a href="Bap.Std.html#TYPEvar">var</a></code></pre><div class="info ">
45-
Program counter<br>
45+
<span class="warning">Deprecated.</span>this maybe removed, if we decide, that PC register
46+
breaks abstraction.<br>
47+
Program counter.<br>
4648
</div>
4749

4850
<pre><span id="VALsp"><span class="keyword">val</span> sp</span> : <code class="type"><a href="Bap.Std.html#TYPEvar">var</a></code></pre><div class="info ">
@@ -56,7 +58,15 @@ <h4 id="4_Flagregisters">Flag registers</h4><br>
5658
<pre><span id="VALcf"><span class="keyword">val</span> cf</span> : <code class="type"><a href="Bap.Std.html#TYPEvar">var</a></code></pre>
5759
<pre><span id="VALvf"><span class="keyword">val</span> vf</span> : <code class="type"><a href="Bap.Std.html#TYPEvar">var</a></code></pre>
5860
<pre><span id="VALnf"><span class="keyword">val</span> nf</span> : <code class="type"><a href="Bap.Std.html#TYPEvar">var</a></code></pre>
59-
<pre><span id="VALaddr_of_pc"><span class="keyword">val</span> addr_of_pc</span> : <code class="type"><a href="Bap.Std.html#TYPEmem">mem</a> -> <a href="Bap.Std.html#TYPEaddr">addr</a></code></pre>
61+
<pre><span id="VALaddr_of_pc"><span class="keyword">val</span> addr_of_pc</span> : <code class="type"><a href="Bap.Std.html#TYPEmem">mem</a> -> <a href="Bap.Std.html#TYPEaddr">addr</a></code></pre><div class="info ">
62+
<span class="warning">Deprecated.</span>this maybe removed, if we decide, that PC register
63+
breaks abstraction.<br>
64+
<code class="code">addr_of_pc mem</code> given a memory region, representing some
65+
instruction, return a value to which a PC register is set when
66+
this instruction is executed by CPU.
67+
This function is useful to resolve PC-relative calculations.<br>
68+
</div>
69+
6070
<pre><span id="VALis_reg"><span class="keyword">val</span> is_reg</span> : <code class="type"><a href="Bap.Std.html#TYPEvar">var</a> -> bool</code></pre><div class="info ">
6171
<h3 id="3_Predicates">Predicates</h3><br>
6272
</div>

bap/api/master/Bap.Std.Dwarf.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
66
<link rel="Start" href="index.html">
77
<link rel="previous" href="Bap.Std.Project.html">
8-
<link rel="next" href="Bap.Std.Signatures.html">
8+
<link rel="next" href="Bap.Std.Elf.html">
99
<link rel="Up" href="Bap.Std.html">
1010
<link title="Index of types" rel=Appendix href="index_types.html">
1111
<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
@@ -21,7 +21,7 @@
2121
<body>
2222
<div class="navbar"><a class="pre" href="Bap.Std.Project.html" title="Bap.Std.Project">Previous</a>
2323
&nbsp;<a class="up" href="Bap.Std.html" title="Bap.Std">Up</a>
24-
&nbsp;<a class="post" href="Bap.Std.Signatures.html" title="Bap.Std.Signatures">Next</a>
24+
&nbsp;<a class="post" href="Bap.Std.Elf.html" title="Bap.Std.Elf">Next</a>
2525
</div>
2626
<h1>Module <a href="type_Bap.Std.Dwarf.html">Bap.Std.Dwarf</a></h1>
2727

0 commit comments

Comments
 (0)