ghidra/GhidraDocs/languages/html/reference.html
2023-06-23 15:41:50 +02:00

531 lines
14 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Syntax Reference</title>
<link rel="stylesheet" type="text/css" href="DefaultStyle.css">
<link rel="stylesheet" type="text/css" href="languages.css">
<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="pcoderef.html" title="P-Code Reference Manual">
<link rel="up" href="pcoderef.html" title="P-Code Reference Manual">
<link rel="prev" href="additionalpcode.html" title="Additional P-CODE Operations">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">Syntax Reference</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="additionalpcode.html">Prev</a> </td>
<th width="60%" align="center"> </th>
<td width="20%" align="right"> </td>
</tr>
</table>
<hr>
</div>
<div class="sect1">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="reference"></a>Syntax Reference</h2></div></div></div>
<div class="informalexample"><div class="table">
<a name="ref.htmltable"></a><table xml:id="ref.htmltable" width="90%" frame="box" rules="rows">
<col width="25%">
<col width="25%">
<col width="50%">
<thead><tr>
<td><span class="bold"><strong>Name</strong></span></td>
<td><span class="bold"><strong>Syntax</strong></span></td>
<td><span class="bold"><strong>Description</strong></span></td>
</tr></thead>
<tbody>
<tr>
<td>COPY</td>
<td><code class="code">v0 = v1;</code></td>
<td>Copy v1 into v0.</td>
</tr>
<tr>
<td>LOAD</td>
<td>
<div class="table">
<a name="loadtmp.htmltable"></a><table xml:id="loadtmp.htmltable" frame="none"><tbody>
<tr>
<td><code class="code">* v1</code></td>
</tr>
<tr>
<td><code class="code">*[spc]v1</code></td>
</tr>
<tr>
<td><code class="code">*:2 v1</code></td>
</tr>
<tr>
<td><code class="code">*[spc]:2 v1</code></td>
</tr>
</tbody></table>
</div>
</td>
<td>Dereference v1 as pointer into default space. Optionally specify a space
to load from and size of data in bytes.</td>
</tr>
<tr>
<td>STORE</td>
<td>
<div class="table">
<a name="storetmp.htmltable"></a><table xml:id="storetmp.htmltable" frame="none"><tbody>
<tr>
<td><code class="code">*v0 = v1;</code></td>
</tr>
<tr>
<td><code class="code">*[spc]v0 = v1;</code></td>
</tr>
<tr>
<td><code class="code">*:4 v0 = v1;</code></td>
</tr>
<tr>
<td><code class="code">*[spc]:4 v0 = v1;</code></td>
</tr>
</tbody></table>
</div>
</td>
<td>Store in v1 in default space using v0 as pointer. Optionally specify space to store in
and size of data in bytes.</td>
</tr>
<tr>
<td>BRANCH</td>
<td><code class="code">goto v0;</code></td>
<td>Branch execution to address of v0.</td>
</tr>
<tr>
<td>CBRANCH</td>
<td><code class="code">if (v0) goto v1;</code></td>
<td>Branch execution to address of v1 if v0 equals 1 (true).</td>
</tr>
<tr>
<td>BRANCHIND</td>
<td><code class="code">goto [v0];</code></td>
<td>Branch execution to value in v0 viewed as an offset into the current space.</td>
</tr>
<tr>
<td>CALL</td>
<td><code class="code">call v0;</code></td>
<td>Branch execution to address of v0. Hint that the branch is a subroutine call.</td>
</tr>
<tr>
<td>CALLIND</td>
<td><code class="code">call [v0];</code></td>
<td>Branch execution to value in v0 viewed as an offset into the current space.
Hint that the branch is a subroutine call.</td>
</tr>
<tr>
<td>RETURN</td>
<td><code class="code">return [v0];</code></td>
<td>Branch execution to value in v0 viewed as an offset into the current space.
Hint that the branch is a subroutine return.</td>
</tr>
<tr>
<td>PIECE</td>
<td><code class="code">&lt;na&gt;</code></td>
<td>Concatenate two varnodes into a single varnode.</td>
</tr>
<tr>
<td>SUBPIECE</td>
<td><code class="code">v0:2</code></td>
<td>The least signficant n bytes of v0.</td>
</tr>
<tr>
<td>SUBPIECE</td>
<td><code class="code">v0(2)</code></td>
<td>All but the least significant n bytes of v0.</td>
</tr>
<tr>
<td>POPCOUNT</td>
<td><code class="code">popcount(v0)</code></td>
<td>Count 1 bits in v0.</td>
</tr>
<tr>
<td>LZCOUNT</td>
<td><code class="code">lzcount(v0)</code></td>
<td>Counts the number of leading zero bits in v0.</td>
</tr>
<tr>
<td>INT_EQUAL</td>
<td><code class="code">v0 == v1</code></td>
<td>True if v0 equals v1.</td>
</tr>
<tr>
<td>INT_NOTEQUAL</td>
<td><code class="code">v0 != v1</code></td>
<td>True if v0 does not equal v1.</td>
</tr>
<tr>
<td>INT_LESS</td>
<td>
<div class="table">
<a name="less.htmltable"></a><table xml:id="less.htmltable" frame="none"><tbody>
<tr>
<td><code class="code">v0 &lt; v1</code></td>
</tr>
<tr>
<td><code class="code">v1 &gt; v0</code></td>
</tr>
</tbody></table>
</div>
</td>
<td>True if v0 is less than v1 as an unsigned integer.</td>
</tr>
<tr>
<td>INT_SLESS</td>
<td>
<div class="table">
<a name="sless.htmltable"></a><table xml:id="sless.htmltable" frame="none"><tbody>
<tr>
<td><code class="code">v0 s&lt; v1</code></td>
</tr>
<tr>
<td><code class="code">v1 s&gt; v0</code></td>
</tr>
</tbody></table>
</div>
</td>
<td>True if v0 is less than v1 as a signed integer.</td>
</tr>
<tr>
<td>INT_LESSEQUAL</td>
<td>
<div class="table">
<a name="lessequal.htmltable"></a><table xml:id="lessequal.htmltable" frame="none"><tbody>
<tr>
<td><code class="code">v0 &lt;= v1</code></td>
</tr>
<tr>
<td><code class="code">v1 &gt;= v0</code></td>
</tr>
</tbody></table>
</div>
</td>
<td>True if v0 is less than or equal to v1 as an unsigned integer.</td>
</tr>
<tr>
<td>INT_SLESSEQUAL</td>
<td>
<div class="table">
<a name="slessequal.htmltable"></a><table xml:id="slessequal.htmltable" frame="none"><tbody>
<tr>
<td><code class="code">v0 s&lt;= v1</code></td>
</tr>
<tr>
<td><code class="code">v1 s&gt;= v0</code></td>
</tr>
</tbody></table>
</div>
</td>
<td>True if v0 is less than or equal to v1 as a signed integer.</td>
</tr>
<tr>
<td>INT_ZEXT</td>
<td><code class="code">zext(v0)</code></td>
<td>Zero extension of v0.</td>
</tr>
<tr>
<td>INT_SEXT</td>
<td><code class="code">sext(v0)</code></td>
<td>Sign extension of v0.</td>
</tr>
<tr>
<td>INT_ADD</td>
<td><code class="code">v0 + v1</code></td>
<td>Addition of v0 and v1 as integers.</td>
</tr>
<tr>
<td>INT_SUB</td>
<td><code class="code">v0 - v1</code></td>
<td>Subtraction of v1 from v0 as integers.</td>
</tr>
<tr>
<td>INT_CARRY</td>
<td><code class="code">carry(v0,v1)</code></td>
<td>True if adding v0 and v1 would produce an unsigned carry.</td>
</tr>
<tr>
<td>INT_SCARRY</td>
<td><code class="code">scarry(v0,v1)</code></td>
<td>True if adding v0 and v1 would produce an signed carry.</td>
</tr>
<tr>
<td>INT_SBORROW</td>
<td><code class="code">sborrow(v0,v1)</code></td>
<td>True if subtracting v1 from v0 would produce a signed borrow.</td>
</tr>
<tr>
<td>INT_2COMP</td>
<td><code class="code">-v0</code></td>
<td>Twos complement of v0.</td>
</tr>
<tr>
<td>INT_NEGATE</td>
<td><code class="code">~v0</code></td>
<td>Bitwise negation of v0.</td>
</tr>
<tr>
<td>INT_XOR</td>
<td><code class="code">v0 ^ v1</code></td>
<td>Bitwise Exclusive Or of v0 with v1.</td>
</tr>
<tr>
<td>INT_AND</td>
<td><code class="code">v0 &amp; v1</code></td>
<td>Bitwise Logical And of v0 with v1.</td>
</tr>
<tr>
<td>INT_OR</td>
<td><code class="code">v0 | v1</code></td>
<td>Bitwise Logical Or of v0 with v1.</td>
</tr>
<tr>
<td>INT_LEFT</td>
<td><code class="code">v0 &lt;&lt; v1</code></td>
<td>Left shift of v0 by v1 bits.</td>
</tr>
<tr>
<td>INT_RIGHT</td>
<td><code class="code">v0 &gt;&gt; v1</code></td>
<td>Unsigned (logical) right shift of v0 by v1 bits.</td>
</tr>
<tr>
<td>INT_SRIGHT</td>
<td><code class="code">v0 s&gt;&gt; v1</code></td>
<td>Signed (arithmetic) right shift of v0 by v1 bits.</td>
</tr>
<tr>
<td>INT_MULT</td>
<td><code class="code">v0 * v1</code></td>
<td>Integer multiplication of v0 and v1.</td>
</tr>
<tr>
<td>INT_DIV</td>
<td><code class="code">v0 / v1</code></td>
<td>Unsigned division of v0 by v1.</td>
</tr>
<tr>
<td>INT_REM</td>
<td><code class="code">v0 % v1</code></td>
<td>Unsigned remainder of v0 modulo v1.</td>
</tr>
<tr>
<td>INT_SDIV</td>
<td><code class="code">v0 s/ v1</code></td>
<td>Signed division of v0 by v1.</td>
</tr>
<tr>
<td>INT_SREM</td>
<td><code class="code">v0 s% v1</code></td>
<td>Signed remainder of v0 modulo v1.</td>
</tr>
<tr>
<td>BOOL_NEGATE</td>
<td><code class="code">!v0</code></td>
<td>Negation of boolean value v0.</td>
</tr>
<tr>
<td>BOOL_XOR</td>
<td><code class="code">v0 ^^ v1</code></td>
<td>Exclusive-Or of booleans v0 and v1.</td>
</tr>
<tr>
<td>BOOL_AND</td>
<td><code class="code">v0 &amp;&amp; v1</code></td>
<td>Logical-And of booleans v0 and v1.</td>
</tr>
<tr>
<td>BOOL_OR</td>
<td><code class="code">v0 || v1</code></td>
<td>Logical-Or of booleans v0 and v1.</td>
</tr>
<tr>
<td>FLOAT_EQUAL</td>
<td><code class="code">v0 f== v1</code></td>
<td>True if v0 equals v1 viewed as floating-point numbers.</td>
</tr>
<tr>
<td>FLOAT_NOTEQUAL</td>
<td><code class="code">v0 f!= v1</code></td>
<td>True if v0 does not equal v1 viewed as floating-point numbers.</td>
</tr>
<tr>
<td>FLOAT_LESS</td>
<td>
<div class="table">
<a name="floatlesstmp.htmltable"></a><table xml:id="floatlesstmp.htmltable" frame="none"><tbody>
<tr>
<td><code class="code">v0 f&lt; v1</code></td>
</tr>
<tr>
<td><code class="code">v1 f&gt; v0</code></td>
</tr>
</tbody></table>
</div>
</td>
<td>True if v0 is less than v1 viewed as floating-point numbers.</td>
</tr>
<tr>
<td>FLOAT_LESSEQUAL</td>
<td>
<div class="table">
<a name="floatlessequaltmp.htmltable"></a><table xml:id="floatlessequaltmp.htmltable" frame="none"><tbody>
<tr>
<td><code class="code">v0 f&lt;= v1</code></td>
</tr>
<tr>
<td><code class="code">v1 f&gt;= v0</code></td>
</tr>
</tbody></table>
</div>
</td>
<td>True if v0 is less than or equal to v1 viewed as floating-point numbers.</td>
</tr>
<tr>
<td>FLOAT_ADD</td>
<td><code class="code">v0 f+ v1</code></td>
<td>Addition of v0 and v1 as floating-point numbers.</td>
</tr>
<tr>
<td>FLOAT_SUB</td>
<td><code class="code">v0 f- v1</code></td>
<td>Subtraction of v1 from v0 as floating-point numbers.</td>
</tr>
<tr>
<td>FLOAT_MULT</td>
<td><code class="code">v0 f* v1</code></td>
<td>Multiplication of v0 and v1 as floating-point numbers.</td>
</tr>
<tr>
<td>FLOAT_DIV</td>
<td><code class="code">v0 f/ v1</code></td>
<td>Division of v0 by v1 as floating-point numbers.</td>
</tr>
<tr>
<td>FLOAT_NEG</td>
<td><code class="code">f- v0</code></td>
<td>Additive inverse of v0 as a floating-point number.</td>
</tr>
<tr>
<td>FLOAT_ABS</td>
<td><code class="code">abs(v0)</code></td>
<td>Absolute value of v0 as a floating-point number.</td>
</tr>
<tr>
<td>FLOAT_SQRT</td>
<td><code class="code">sqrt(v0)</code></td>
<td>Square root of v0 as a floating-point number.</td>
</tr>
<tr>
<td>FLOAT_CEIL</td>
<td><code class="code">ceil(v0)</code></td>
<td>Nearest integral floating-point value greater than v0, viewed as a floating-point number.</td>
</tr>
<tr>
<td>FLOAT_FLOOR</td>
<td><code class="code">floor(v0)</code></td>
<td>Nearest integral floating-point value less than v0, viewed as a floating-point number.</td>
</tr>
<tr>
<td>FLOAT_ROUND</td>
<td><code class="code">round(v0)</code></td>
<td>Nearest integral floating-point to v0, viewed as a floating-point number.</td>
</tr>
<tr>
<td>FLOAT_NAN</td>
<td><code class="code">nan(v0)</code></td>
<td>True if v0 is not a valid floating-point number (NaN).</td>
</tr>
<tr>
<td>INT2FLOAT</td>
<td><code class="code">int2float(v0)</code></td>
<td>Floating-point representation of v0 viewed as an integer.</td>
</tr>
<tr>
<td>FLOAT2FLOAT</td>
<td><code class="code">float2float(v0)</code></td>
<td>Copy of floating-point number v0 with more or less precision.</td>
</tr>
<tr>
<td>TRUNC</td>
<td><code class="code">trunc(v0)</code></td>
<td>Signed integer obtained by truncating v0 viewed as a floating-point number.</td>
</tr>
<tr>
<td>CPOOLREF</td>
<td><code class="code">cpool(v0,...)</code></td>
<td>Obtain constant pool value.</td>
</tr>
<tr>
<td>NEW</td>
<td>
<div class="table">
<a name="newtmp.htmltable"></a><table xml:id="newtmp.htmltable" frame="none"><tbody>
<tr>
<td><code class="code">newobject(v0)</code></td>
</tr>
<tr>
<td><code class="code">newobject(v0,v1)</code></td>
</tr>
</tbody></table>
</div>
</td>
<td>Allocate an object or an array of objects.</td>
</tr>
<tr>
<td>MULTIEQUAL</td>
<td><code class="code">&lt;na&gt;</code></td>
<td>Compiler phi-node: values merging from multiple control-flow paths.</td>
</tr>
<tr>
<td>INDIRECT</td>
<td><code class="code">&lt;na&gt;</code></td>
<td>Indirect effect from input varnode to output varnode.</td>
</tr>
<tr>
<td>CAST</td>
<td><code class="code">&lt;na&gt;</code></td>
<td>Copy from input to output. A hint that the underlying datatype has changed.</td>
</tr>
<tr>
<td>PTRADD</td>
<td><code class="code">&lt;na&gt;</code></td>
<td>Construct a pointer to an element from a pointer to the start of an array and an index.</td>
</tr>
<tr>
<td>PTRSUB</td>
<td><code class="code">&lt;na&gt;</code></td>
<td>Construct a pointer to a field from a pointer to a structure and an offset.</td>
</tr>
<tr>
<td>INSERT</td>
<td><code class="code">&lt;na&gt;</code></td>
<td>Insert a value as a bit-range into a varnode</td>
</tr>
<tr>
<td>EXTRACT</td>
<td><code class="code">&lt;na&gt;</code></td>
<td>Extract a bit-range from a varnode</td>
</tr>
</tbody>
</table>
</div></div>
</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="additionalpcode.html">Prev</a> </td>
<td width="20%" align="center"> </td>
<td width="40%" align="right"> </td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Additional P-CODE Operations </td>
<td width="20%" align="center"><a accesskey="h" href="pcoderef.html">Home</a></td>
<td width="40%" align="right" valign="top"> </td>
</tr>
</table>
</div>
</body>
</html>