<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-CN"><id>https://nonmirror.icu/atom.xml</id><title type="text">NonMirror</title><subtitle type="text">你又来看我啦</subtitle><link rel="self" type="application/atom+xml" href="https://nonmirror.icu/atom.xml"/><link rel="alternate" type="text/html" href="https://nonmirror.icu/"/><updated>2026-07-11T20:16:36.000Z</updated><author><name>NonMirror</name></author><entry><id>https://nonmirror.icu/posts/%E5%81%87%E6%97%A5/</id><title type="text">假日</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/%E5%81%87%E6%97%A5/"/><updated>2026-07-11T20:16:36.000Z</updated><published>2026-07-11T20:16:36.000Z</published><summary type="text">我躺在床上，直视的分明是天花板，却觉得天空要把我碾碎了。</summary><content type="html">&lt;p&gt;我躺在床上，直视的分明是天花板，却觉得天空要把我碾碎了。&lt;/p&gt;</content><category term="diary"/></entry><entry><id>https://nonmirror.icu/posts/%E8%80%83%E8%AF%9502/</id><title type="text">考试02</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/%E8%80%83%E8%AF%9502/"/><updated>2026-06-22T04:58:24.000Z</updated><published>2026-06-22T04:58:24.000Z</published><summary type="text">对自私的人来说，所有人都平等的不重要，但又在某些时候希望某个人可以出现。两个自私的人交往，希望对方出现的时刻没能重合，就积压了矛盾。 我捏死了一只蚂蚁，残留在指尖的蚁酸的气味使我想起————高三，或许是夏夜，我合上那本硬质封面的书，抚摸着书脊，懵懂地幻想我有一天成为烧掉寺庙的僧人。 看过的书和所有经历一样，在后来生命的某个时候突然想起，你渴望从以前的经验得出今后如何是好的一些线索，往往又以不断反刍沉溺思考的痛苦作结。当晚，我凝视着硬质封面上的楷体，以为自己读懂了三岛，于是慢慢睡去，做着一些平平无奇的十七岁的梦。</summary><content type="html">&lt;p&gt;对自私的人来说，所有人都平等的不重要，但又在某些时候希望某个人可以出现。两个自私的人交往，希望对方出现的时刻没能重合，就积压了矛盾。&lt;/p&gt;
&lt;p&gt;我捏死了一只蚂蚁，残留在指尖的蚁酸的气味使我想起————高三，或许是夏夜，我合上那本硬质封面的书，抚摸着书脊，懵懂地幻想我有一天成为烧掉寺庙的僧人。&lt;/p&gt;
&lt;p&gt;看过的书和所有经历一样，在后来生命的某个时候突然想起，你渴望从以前的经验得出今后如何是好的一些线索，往往又以不断反刍沉溺思考的痛苦作结。当晚，我凝视着硬质封面上的楷体，以为自己读懂了三岛，于是慢慢睡去，做着一些平平无奇的十七岁的梦。&lt;/p&gt;</content><category term="diary"/></entry><entry><id>https://nonmirror.icu/posts/%E8%80%83%E8%AF%95/</id><title type="text">考试</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/%E8%80%83%E8%AF%95/"/><updated>2026-05-18T17:04:55.000Z</updated><published>2026-05-18T17:04:55.000Z</published><summary type="text">我到四处看了又看，只觉得世界上的一切都让我太疲惫了。</summary><content type="html">&lt;p&gt;我到四处看了又看，只觉得世界上的一切都让我太疲惫了。&lt;/p&gt;</content><category term="diary"/></entry><entry><id>https://nonmirror.icu/posts/gss2026-final/</id><title type="text">Gss2026 final</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/gss2026-final/"/><updated>2026-05-13T11:15:09.000Z</updated><published>2026-05-13T11:15:09.000Z</published><summary type="text">payload.sys 代码量很小，逻辑也比较简单，这里略过 R3 攻击链路中 R3 主要负责环境检查、释放驱动、创建虚拟磁盘用于与内核通信，后续通过 cpuid 进入被劫持的 hypervisor Hyper V 检测 144A07540 detect hypervisor 中， cpuid(1) 检查返回的 rcx 第 31 位（Hypervisor Present Bit）以确认 HyperV 是否开启， cpuid(0x40000000) ，拼接返回的 ebx、ecx、edx，对于 HyperV，拼接结果为…</summary><content type="html">&lt;p&gt;payload.sys 代码量很小，逻辑也比较简单，这里略过&lt;/p&gt;
&lt;h2 id=&quot;r3&quot;&gt;R3&lt;/h2&gt;
&lt;p&gt;攻击链路中 R3 主要负责环境检查、释放驱动、创建虚拟磁盘用于与内核通信，后续通过 cpuid 进入被劫持的 hypervisor&lt;/p&gt;
&lt;h3 id=&quot;hyper-v-检测&quot;&gt;Hyper-V 检测&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;144A07540 detect_hypervisor&lt;/code&gt; 中，&lt;code&gt;cpuid(1)&lt;/code&gt; 检查返回的 rcx 第 31 位（Hypervisor Present Bit）以确认 HyperV 是否开启，&lt;code&gt;cpuid(0x40000000)&lt;/code&gt; ，拼接返回的 ebx、ecx、edx，对于 HyperV，拼接结果为 “Microsoft Hv”。通过后进入 IOMMU 检查&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _RAX &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __asm { cpuid }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v14 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _RAX;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v15 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _RBX;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v16 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _RDX;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( _RCX &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_7;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  LOBYTE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v16) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _RAX &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;40000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __asm { cpuid }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v15 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; __PAIR64__&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(_RDX, _RCX);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v14 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _RBX;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;strcmp&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;v14&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Microsoft Hv&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;check_dmar_ivrs_acpi_tables&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _mm_load_si128&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;xmmword_144A654E0);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a2;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;iommu-检测&quot;&gt;IOMMU 检测&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;144A06650 check_dmar_ivrs_acpi_tables&lt;/code&gt; 中有两个字符串加密，分别解出来模块名 “ntdll.dll” 和 proc 名 “NtQuerySystemInformation”，然后 getHandle、getAddress 来调用 &lt;code&gt;NtQuerySystemInformation(0x4C, &apos;ACPI&apos;, ...)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;0x4C 语义为 &lt;code&gt;SystemFirmwareTableInformation&lt;/code&gt; ，即枚举 ACPI firmware table&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v18 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFE0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;AA5A0BBC9C7B78FB&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E36209&quot;&gt;  _RBP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BDA70F05583CEF67&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E36209&quot;&gt;  _RBP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;E976CEEBC88D0D68&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E36209&quot;&gt;  _RBP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;AEC4913EB047EFF0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E36209&quot;&gt;  _RBP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;F92379D9E92A0CB5&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E36209&quot;&gt;  _RBP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;DBC946683D489C1E&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E36209&quot;&gt;  _RBP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;13&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8719A79FA9E07F07&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E36209&quot;&gt;  _RBP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;AEC4913EB047EFF0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E36209&quot;&gt;  _RBP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_RBP;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __asm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    vmovdqu ymm0, [rbp&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;0A0h&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;var_60]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    vpxor   ymm1, ymm0, [rbp&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;0A0h&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;var_40]; vpxor 解出 proc name &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;NtQuerySystemInformation&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    vmovdqa [rbp&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;0A0h&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;var_60], ymm1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;发现 DMAR 或 IVRS 表项则环境不合格，即 IOMMU 开启&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v17 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;RAMD&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v17 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;SRVI&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    break&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;scsi&quot;&gt;SCSI&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;144A10B30 resolve_kernel32_and_virtdisk_apis&lt;/code&gt; 有大段的字符串加密、GetModuleHandleA、LoadLibraryA、GetProcAddress 之类的 api，解密出来的字符串至少包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;kernel32.dll&lt;/li&gt;
&lt;li&gt;virtdisk.dll&lt;/li&gt;
&lt;li&gt;DeleteFileW, OpenVirtualDisk, DetachVirtualDisk, CreateVirtualDisk, ActtachVirtualDisk&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;144A111E0 cleanup_existing_vhd_files_in_dir&lt;/code&gt; 枚举目标目录下的 vhd，&lt;code&gt;OpenVirtualDisk -&amp;gt; DetachVirtualDisk -&amp;gt; CloseHandle/DeleteFileW&lt;/code&gt; 清理旧 vhd&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;resolve_kernel32_and_virtdisk_apis&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_144A100D0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v34, a1, L&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;*.vhd&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v34;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; v34&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    FirstFileW &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; FindFirstFileW&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v2, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v38);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;g_pOpenVirtualDisk&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v36, v18, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;40000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v25, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v23) )&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// OpenVirtualDisk(..., OPEN_VIRTUAL_DISK_FLAG_NO_PARENTS, GetInfoOnly=TRUE, &amp;amp;hVhd)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            g_pDetachVirtualDisk&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v23, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // DetachVirtualDisk(hVhd, 0, 0) on stale VHD before deleting it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            g_pCloseHandle&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v23);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                // CloseHandle(hVhd) after the detach/open cleanup path.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            v19 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v32;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v33 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            v19 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v32;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            g_pDeleteFileW&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v19);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                  // DeleteFileW(fullVhdPath) removes the stale *.vhd file from the workspace.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;144A04A10 prepare_vhd_workspace_and_path&lt;/code&gt; 先调用上面的清理逻辑，然后创建新的 vhd。vhd 名为随机 GUID，运行 R3 程序后可以枚举出来，这个现象在逆向前就能够发现，此时闭环&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;sub_144A097F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(_RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 136&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, _RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 192&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // XOR-decoded wide string here is the VHD workspace directory: C:\\Windows\\Temp\\WdiServiceHost&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v10 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (_RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 136&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFE0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;A0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v10 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFE0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;88&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;CreateDirectoryW&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v10, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                     // CreateDirectoryW(L&quot;C:\\Windows\\Temp\\WdiServiceHost&quot;, NULL)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;cleanup_existing_vhd_files_in_dir&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((_RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 136&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;));&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Cleanup stale *.vhd files under the workspace before generating a fresh GUID-backed VHD path.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;CoCreateGuid&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((_RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 56&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;sub_144A003E0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    _RBP &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 320&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    L&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;{&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%08lX&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%04X&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%04X&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%02X%02X&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%02X%02X%02X%02X%02X%02X&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFE0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFE0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3C&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFE0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3E&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFE0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFE0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;41&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFE0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;42&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFE0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;43&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFE0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;44&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFE0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;45&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFE0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;46&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFE0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;47&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;驱动释放&quot;&gt;驱动释放&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;144A05540 drop_embedded_file_and_reset_service&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;144A05902 call CreateFileW&lt;/code&gt; -&amp;gt; &lt;code&gt;144A05948 call WriteFile&lt;/code&gt; -&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;144A0595D call sub_144A068B0&lt;/code&gt;，跳到 vm 段，之后 StartServiceW&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;asm&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; r10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; eax&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;106&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; byte&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ptr &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;ds&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:[7FFE0308], &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;jne&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ntd11&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;7FFD4D22F655&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;syscall&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;ret&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这边的 syscall 看调用号就知道是 NtLoadDriver。DriverEntry 应该故意返回了 STATUS_UNSUCCESSFUL，使驱动加载看起来失败了&lt;/p&gt;
&lt;p&gt;之后 R3 OpenSCManagerW, OpenServiceW, ControlService(SERVICE_CONTROL_STOP), DeleteService, DeleteFileW 一套连招清理痕迹&lt;/p&gt;
&lt;h3 id=&quot;控制台与结果显示&quot;&gt;控制台与结果显示&lt;/h3&gt;
&lt;p&gt;不是重点，贴一下 ai 吐的分析结果&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;console_setup_and_api_resolve&lt;/code&gt;：&lt;code&gt;0x144A3EAB0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;api_resolve_init&lt;/code&gt;：&lt;code&gt;0x144A3ED50&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resolve_kernel32_and_virtdisk_apis&lt;/code&gt;：&lt;code&gt;0x144A10B30&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stage_result_reporter&lt;/code&gt;：&lt;code&gt;0x144A04160&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;thread_entry_stage_result_reporter&lt;/code&gt;：&lt;code&gt;0x1449FA120&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;作用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;配置控制台输出&lt;/li&gt;
&lt;li&gt;动态解析一些 API&lt;/li&gt;
&lt;li&gt;启动结果线程&lt;/li&gt;
&lt;li&gt;输出 &lt;code&gt;[ OK ] / [FAIL] / [READY]&lt;/code&gt; 等阶段状态&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;r0&quot;&gt;R0&lt;/h2&gt;
&lt;p&gt;主要分析 R3 释放出来的驱动。核心调度为 &lt;code&gt;141DD7167 tvm_manual_map_and_vmexit_hook_stage&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&quot;scsi-4kb-bounce-通道&quot;&gt;SCSI 4KB bounce 通道&lt;/h3&gt;
&lt;p&gt;R3 创建了一个 VHD，得到一条正常的虚拟磁盘设备栈，驱动随后向磁盘的设备对象发 &lt;code&gt;IOCTL_SCSI_PASS_THROUGH_DIRECT&lt;/code&gt;，每次收发 0x1000 字节，即一页&lt;/p&gt;
&lt;p&gt;这条链路存在以下四个关键函数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;scsi_passthrough_lba0_4k&lt;/code&gt;：&lt;code&gt;0x140009530&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scsi_sfer_n_4k_pages&lt;/code&gt;：&lt;code&gt;0x140004FB0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ensure_pfn_entry_state_for_scsi_bounce&lt;/code&gt;：&lt;code&gt;0x140003EB0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scsi_xfer_1_page&lt;/code&gt;：&lt;code&gt;0x140003E10&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;scsi_passthrough_lba0_4k&quot;&gt;scsi_passthrough_lba0_4k&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;0x140009530&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;动态解析几个 ntoskrnl 导出函数，然后构造一个&lt;code&gt;IOCTL_SCSI_PASS_THROUGH_DIRECT&lt;/code&gt; IRP，向目标磁盘设备对象发送 SCSI READ(10) 或 WRITE(10)，固定访问虚拟磁盘 LBA0 开始的 4KB 数据&lt;/p&gt;
&lt;h5 id=&quot;api-解析&quot;&gt;API 解析&lt;/h5&gt;
&lt;p&gt;FNV-1a 解析 api，流程大致如下&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v6 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; g_pKeInitializeEvent;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;g_pKeInitializeEvent )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( qword_141D0FE40&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(qword_141D0FE40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(qword_141D0FE40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 60&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 136&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v8 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(qword_141D0FE40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 24&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(qword_141D0FE40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 24&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v62 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a1;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v73 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; qword_141D0FE40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(qword_141D0FE40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 28&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v9 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; qword_141D0FE40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(qword_141D0FE40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 32&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v10 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; qword_141D0FE40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(qword_141D0FE40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 36&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v11 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v12 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v9 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v11);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v13 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(qword_141D0FE40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v12);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v13 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v14 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (qword_141D0FE40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v12 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v15 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CBF29CE484222325&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            v16 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;100000001B3&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (v15 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v13);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            v17 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v14&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            v13 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v17;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            v15 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v16;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          while&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v17 );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v16 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;D9FE78EA5EE16A1&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // FNV-1a compare hit for KeInitializeEvent. Hash 0x0D9FE78EA5EE16A1 = FNV1a64(&quot;KeInitializeEvent&quot;).&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            v6 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v73 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v10 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v11)) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; qword_141D0FE40;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_13;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用这样的方法共解析了以下四个函数。解析失败会把函数指针设为 0x114514。后续几乎所有 api 都是这样调用的，不再赘述&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;KeInitializeEvent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IoBuildDeviceIoControlRequest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IofCallDriver&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;KeWaitForSingleObject&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;初始化同步事件&quot;&gt;初始化同步事件&lt;/h5&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v6)(v75, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                              // KeInitializeEvent(&amp;amp;event, NotificationEvent=1, InitialState=FALSE)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用于等待下面构造出来的同步 IRP 完成&lt;/p&gt;
&lt;h5 id=&quot;scsi_pass_through_direct-构造&quot;&gt;SCSI_PASS_THROUGH_DIRECT 构造&lt;/h5&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v65 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v71 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v72 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  LOWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v65) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                           // SCSI_PASS_THROUGH_DIRECT.Length = 0x38 (56 bytes)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  BYTE6&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v65) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                              // SCSI_PASS_THROUGH_DIRECT.CdbLength = 10 -&amp;gt; CDB is READ(10)/WRITE(10)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v68 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  HIDWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v65) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                        // SCSI_PASS_THROUGH_DIRECT.DataTransferLength = 0x1000 (one 4 KB page)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v66 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                                      // SCSI_PASS_THROUGH_DIRECT.TimeOutValue = 5 seconds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v67 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a3;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                                     // SCSI_PASS_THROUGH_DIRECT.DataBuffer = caller-supplied page buffer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v69 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2A&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;28&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;              // CDB[0] opcode = 0x28 (READ10) or 0x2A (WRITE10). The helper always uses 8 sectors = 0x1000 bytes, i.e. LBA0 page-sized bounce I/O.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  memset&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v70, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v70));&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中 v70 长度为 7&lt;/p&gt;
&lt;p&gt;那么可以得到 CDB 大致结构&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CDB[0]    = 0x28 / 0x2A       READ(10) / WRITE(10)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CDB[1]    = 0                 flags&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CDB[2..5] = 00 00 00 00       起始 LBA = 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CDB[6]    = 0                 group/reserved&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CDB[7..8] = 00 08             Transfer Length = 8 blocks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;CDB[9]    = 0                 Control&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即访问 LBA0 开始的 8 个 block = 8 * 512 = 4KB&lt;/p&gt;
&lt;h5 id=&quot;构造并发送-ioctl&quot;&gt;构造并发送 IOCTL&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;IOCTL_SCSI_PASS_THROUGH_DIRECT&lt;/code&gt; 的 Major Code 是 &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt;，调用者创建 SCSI CDB，如果 CDB 涉及数据传输就需要设置&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v31 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (v18)(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4D014&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, a1, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v65, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;56&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v75, v74);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// IoBuildDeviceIoControlRequest(IOCTL_SCSI_PASS_THROUGH_DIRECT=0x4D014, DeviceObject, &amp;amp;sptd, 0x38, NULL, 0, FALSE, &amp;amp;event, &amp;amp;iosb)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后调用 &lt;code&gt;IofCallDriver&lt;/code&gt;，把 IRP 发给 a1 指向的设备对象，也就是之前挂载的 vhd 对应的设备对象，最终由&lt;strong&gt;与该设备对象关联的驱动对象&lt;/strong&gt;消费，因为磁盘挂载是 R3 程序调用 AttachVirtualDisk 实现的，所以对应的驱动对象是 disk.sys&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v46 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (v33)(a1, v32);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                       // IofCallDriver(DeviceObject, Irp) -&amp;gt; standard storage stack dispatch, eventually handled by the target Disk/vhdmp path.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;一般的设备协议栈传递 IRP 是这样的路径（可能在某一层被阻断，取决于上层驱动是否转发）&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;a1 指向过滤驱动的 DeviceObject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  → 首先由过滤驱动接收 IRP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;a1 指向 disk.sys 创建/管理的磁盘类 DeviceObject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  → 首先由 disk.sys 的 IRP_MJ_DEVICE_CONTROL 分发函数接收&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;a1 指向更底层的虚拟磁盘相关 DeviceObject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  → 首先由 vhdmp/虚拟存储路径接收&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;调试可以看到设备栈，IofCallDriver 前断下，第一个参数就是 DeviceObject&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4: kd&amp;gt; !devstack rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Cannot read info offset from nt!ObpInfoMaskToOffset&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  !DevObj           !DrvObj            !DevExt           ObjectName&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ffffd20721dec060  \Driver\partmgr    ffffd20721dec1b0  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;gt; ffffd2072318b530  \Driver\disk       ffffd2072318b680  DR1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ffffd20722a89050  \Driver\vhdmp      ffffd20722a891a0  00000092&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;!DevNode ffffd20722fc7cc0 :&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  DeviceInst is &quot;SCSI\Disk&amp;amp;Ven_Msft&amp;amp;Prod_Virtual_Disk\2&amp;amp;1f4adffe&amp;amp;0&amp;amp;000001&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ServiceName is &quot;disk&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;partmgn (Partition Manager, 分区管理器) 在当前设备对象上层，不经过。当前驱动调用 IofCallDriver，IRP 给 disk.sys，如果 disk.sys 转发再传透到 vhdmp.sys&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;若 IoBuildDeviceIoControlRequest 返回 null，函数 return 0xC000009A，即 STATUS_INSUFFICIENT_RESOURCES，表示 IRP 构造失败&lt;/p&gt;
&lt;h5 id=&quot;同步等待完成&quot;&gt;同步等待完成&lt;/h5&gt;
&lt;p&gt;如果底层驱动异步处理请求（STATUS_PENDING = 0x103，当前线程就等待事件，完成后返回 IO_STATUS_BLOCK.Status&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v46 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;103&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                         // STATUS_PENDING path: wait on the event and return iosb.Status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;	(v47)(v75, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                   // KeWaitForSingleObject(&amp;amp;event, Executive, KernelMode, FALSE, NULL)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; v74&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // return iosb.Status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;ensure_pfn_entry_state_for_scsi_bounce&quot;&gt;ensure_pfn_entry_state_for_scsi_bounce&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;0x140003EB0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;控制流平坦化，先脱了，能看大致逻辑就行&lt;/p&gt;
&lt;p&gt;主要是修改 MMPFN 来伪造内存状态，从而支持 scsi 的 bounce 访问&lt;/p&gt;
&lt;p&gt;先拿 pa，然后 RltGetVersion 拿版本号&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( g_pMmGetPhysicalAddress )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    pa &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (g_pMmGetPhysicalAddress)(targetVa);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( pa )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    memset&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(buffer, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;114&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( g_pRtlGetVersion ) &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (g_pRtlGetVersion)(buffer); &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      g_pRtlGetVersion &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; resolved_rtlgetversion;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (resolved_rtlgetversion)(buffer);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    nt_build_number &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; g_CachedNtBuildNumber;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;g_CachedNtBuildNumber ) &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      g_CachedNtBuildNumber &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; buffer&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].m128_u32[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      nt_build_number &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; buffer&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].m128_u32[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后取对应 PFN 表项（MMPFN + 0x28，一个叫做 u4 的 union），由 PFN = target_phys_addr &amp;gt;&amp;gt; 12 可以化简为 &lt;code&gt;page_meta_entry_ptr = (uint64_t *)(qword_141D0FD20 + PFN * 0x30 + 0x28)&lt;/code&gt;，qword_141D0FD20 大概就是 PFN 数据库基址，每个 entry 固定在 0x30，实际访问 entry + 0x28 的 64 位页面元数据&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;page_meta_entry_ptr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (qword_141D0FD20 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ((target_phys_addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFF0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 40&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;根据版本新旧设置了一个状态掩码&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    state_mask &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;7000000000000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( nt_build_number &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;47BC&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      state_mask &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1C0000000000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;进行一个状态检查，代数式可以化简为 &lt;code&gt;if ( (*page_meta_entry_ptr &amp;amp; state_mask) == 0 )&lt;/code&gt;。语义就是检查这个物理页当前的特定标志位是否为 0，如果是则说明不符合要求，进入修改逻辑。修改逻辑可以化简成 &lt;code&gt;new = (old &amp;amp; ~state_mask) | desired_state&lt;/code&gt; 也就是把三个位改成 001&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;page_meta_entry_ptr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ~&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;page_meta_entry_ptr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; state_mask)) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      desired_state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000000000000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( nt_build_number &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;47BC&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        desired_state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;40000000000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v11 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;7000000000000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;               &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( nt_build_number &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;47BC&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v11 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1C0000000000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(qword_141D0FD20 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ((target_phys_addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFF0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 40&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (v11 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ~&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;page_meta_old_value)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                                                                                      ^&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;desired_state&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                                                                                       &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;213485D88326B894&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                                                                                       |&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; desired_state&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                                                                                       &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;DECB7A277CD9476B&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                                                                                      ^&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;DECB7A277CD9476B&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                                                                                      |&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ~&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v11&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                                                                                        |&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ~&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;page_meta_old_value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                                                                                        |&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ~&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;desired_state);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v16 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; page_meta_old_value;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v15 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; page_meta_entry_ptr;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最后返回旧的元数据&lt;/p&gt;
&lt;p&gt;写入的这一步进行动态调试可以看得更清楚，在  *(qword_141D0FD20 + …) = … 这句，即偏移 &lt;code&gt;4D7A&lt;/code&gt; 处断下来，先确认一下这个位置是 u4，可以递归看一下 u4 现在的内容，值为 0x0004000f`fffffffd，也就是说 &lt;strong&gt;PageIdentity&lt;/strong&gt; 这一位是 0&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;5: kd&amp;gt; g&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Breakpoint 2 hit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;srztLao5dQ+0x4d7a:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fffff809`2bc44d7a 4c8908          mov     qword ptr [rax],r9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;5: kd&amp;gt; dt nt!_MMPFN @@c++(@rax - 0x28)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x000 ListEntry        : _LIST_ENTRY [ 0x00000a40`e3d86610 - 0xffffb480`00000000 ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x000 TreeNode         : _RTL_BALANCED_NODE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x000 u1               : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x008 PteAddress       : 0xffffb480`00000000 _MMPTE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x008 PteLong          : 0xffffb480`00000000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x010 OriginalPte      : _MMPTE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x018 u2               : _MIPFNBLINK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x020 u3               : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x024 NodeBlinkLow     : 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x026 Unused           : 0y0000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x026 Unused2          : 0y0000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x027 ViewCount        : 0 &apos;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x027 NodeFlinkLow     : 0 &apos;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x027 ModifiedListBucketIndex : 0y0000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x027 AnchorLargePageSize : 0y00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x028 u4               : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   5: kd&amp;gt; dt nt!_MMPFN -r1 @@c++(@rax - 0x28)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x000 ListEntry        : _LIST_ENTRY [ 0x00000a40`e3d86610 - 0xffffb480`00000000 ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Flink            : 0x00000a40`e3d86610 _LIST_ENTRY&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x008 Blink            : 0xffffb480`00000000 _LIST_ENTRY&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x000 TreeNode         : _RTL_BALANCED_NODE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Children         : [2] 0x00000a40`e3d86610 _RTL_BALANCED_NODE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Left             : 0x00000a40`e3d86610 _RTL_BALANCED_NODE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x008 Right            : 0xffffb480`00000000 _RTL_BALANCED_NODE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x010 Red              : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x010 Balance          : 0y00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x010 ParentValue      : 0x80&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x000 u1               : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 NextSlistPfn     : _SINGLE_LIST_ENTRY&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Next             : 0x00000a40`e3d86610 Void&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Flink            : 0y000011100011110110000110011000010000 (0xe3d86610)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 NodeFlinkHigh    : 0y0000000000000000000010100100 (0xa4)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Active           : _MI_ACTIVE_PFN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x008 PteAddress       : 0xffffb480`00000000 _MMPTE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 u                : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x008 PteLong          : 0xffffb480`00000000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x010 OriginalPte      : _MMPTE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 u                : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x018 u2               : _MIPFNBLINK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Blink            : 0y000000000000000000000000000000000001 (0x1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 NodeBlinkHigh    : 0y00000000000000000000 (0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 TbFlushStamp     : 0y0000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Unused           : 0y00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PageBlinkDeleteBit : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PageBlinkLockBit : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 ShareCount       : 0y00000000000000000000000000000000000000000000000000000000000001 (0x1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PageShareCountDeleteBit : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PageShareCountLockBit : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 EntireField      : 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Lock             : 0n1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 LockNotUsed      : 0y00000000000000000000000000000000000000000000000000000000000001 (0x1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 DeleteBit        : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 LockBit          : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x020 u3               : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 ReferenceCount   : 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x002 e1               : _MMPFNENTRY1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x003 e3               : _MMPFNENTRY3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 e2               : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 e4               : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x024 NodeBlinkLow     : 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x026 Unused           : 0y0000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x026 Unused2          : 0y0000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x027 ViewCount        : 0 &apos;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x027 NodeFlinkLow     : 0 &apos;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x027 ModifiedListBucketIndex : 0y0000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x027 AnchorLargePageSize : 0y00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x028 u4               : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PteFrame         : 0y111111111111111111111111111111111101 (0xffffffffd)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 ResidentPage     : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Unused1          : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Unused2          : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Partition        : 0y0000000000 (0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 FileOnly         : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PfnExists        : 0y1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Spare            : 0y000000000 (0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PageIdentity     : 0y000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PrototypePte     : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 EntireField      : 0x0004000f`fffffffd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;步过之后再看，此时 &lt;code&gt;PageIdentity&lt;/code&gt; 已经置 1&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;5: kd&amp;gt; dt nt!_MMPFN -r1 @@c++(@rax - 0x28)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x000 ListEntry        : _LIST_ENTRY [ 0x00000a40`e3d86610 - 0xffffb480`00000000 ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Flink            : 0x00000a40`e3d86610 _LIST_ENTRY&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x008 Blink            : 0xffffb480`00000000 _LIST_ENTRY&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x000 TreeNode         : _RTL_BALANCED_NODE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Children         : [2] 0x00000a40`e3d86610 _RTL_BALANCED_NODE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Left             : 0x00000a40`e3d86610 _RTL_BALANCED_NODE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x008 Right            : 0xffffb480`00000000 _RTL_BALANCED_NODE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x010 Red              : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x010 Balance          : 0y00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x010 ParentValue      : 0x80&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x000 u1               : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 NextSlistPfn     : _SINGLE_LIST_ENTRY&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Next             : 0x00000a40`e3d86610 Void&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Flink            : 0y000011100011110110000110011000010000 (0xe3d86610)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 NodeFlinkHigh    : 0y0000000000000000000010100100 (0xa4)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Active           : _MI_ACTIVE_PFN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x008 PteAddress       : 0xffffb480`00000000 _MMPTE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 u                : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x008 PteLong          : 0xffffb480`00000000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x010 OriginalPte      : _MMPTE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 u                : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x018 u2               : _MIPFNBLINK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Blink            : 0y000000000000000000000000000000000001 (0x1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 NodeBlinkHigh    : 0y00000000000000000000 (0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 TbFlushStamp     : 0y0000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Unused           : 0y00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PageBlinkDeleteBit : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PageBlinkLockBit : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 ShareCount       : 0y00000000000000000000000000000000000000000000000000000000000001 (0x1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PageShareCountDeleteBit : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PageShareCountLockBit : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 EntireField      : 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Lock             : 0n1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 LockNotUsed      : 0y00000000000000000000000000000000000000000000000000000000000001 (0x1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 DeleteBit        : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 LockBit          : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x020 u3               : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 ReferenceCount   : 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x002 e1               : _MMPFNENTRY1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x003 e3               : _MMPFNENTRY3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 e2               : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 e4               : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x024 NodeBlinkLow     : 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x026 Unused           : 0y0000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x026 Unused2          : 0y0000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x027 ViewCount        : 0 &apos;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x027 NodeFlinkLow     : 0 &apos;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x027 ModifiedListBucketIndex : 0y0000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x027 AnchorLargePageSize : 0y00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   +0x028 u4               : &amp;lt;anonymous-tag&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PteFrame         : 0y111111111111111111111111111111111101 (0xffffffffd)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 ResidentPage     : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Unused1          : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Unused2          : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Partition        : 0y0000000000 (0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 FileOnly         : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PfnExists        : 0y1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 Spare            : 0y000000000 (0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PageIdentity     : 0y001&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 PrototypePte     : 0y0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      +0x000 EntireField      : 0x1004000f`fffffffd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;scsi_sfer_n_4k_pages&quot;&gt;scsi_sfer_n_4k_pages&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;0x140004FB0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;逻辑比较简单，贴一下完整代码。就是先 WRITE(10) 再 READ(10) 再 WRITE(10)，即&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先修改 PFN 元数据，使得 SCSI 可 bounce&lt;/li&gt;
&lt;li&gt;把修改过后的页面 push 到 LBA0&lt;/li&gt;
&lt;li&gt;恢复 PFN&lt;/li&gt;
&lt;li&gt;从 LBA0 把内容读到目标页面&lt;/li&gt;
&lt;li&gt;把恢复后的页面写回一个 buffer&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Higher-level 4 KB bounce helper: WRITE(10) source page -&amp;gt; disk buffer, READ(10) disk buffer -&amp;gt; destination page, then WRITE(10) scratch/original buffer back for cleanup.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// scsi_sfer_n_4k_pages: page-level bounce primitive. Sequence is WRITE(10) src page -&amp;gt; READ(10) dst page -&amp;gt; cleanup WRITE(10) scratch/original buffer.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;__int64 __fastcall &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;scsi_sfer_n_4k_pages&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(__int64 &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;allocated_memory&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;mapped_va&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, __int64 &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;page_count&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v5;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  unsigned&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; __int64 v6;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r14&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v7;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // eax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v8;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // ebp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  unsigned&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; __int64 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;page_meta_restore_slot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [rsp+20h] [rbp-38h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( g_HasScsiBounceChannel )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( page_count )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v5 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; page_count;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      while&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        page_meta_restore_slot &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v6 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; ensure_pfn_entry_state_for_scsi_bounce&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(mapped_va, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;page_meta_restore_slot);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 调用 ensure_pfn_entry_state_for_scsi_bounce：RAX=旧 PFN 元数据值，*page_meta_restore_slot=需要恢复的 entry+0x28 槽位。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; scsi_passthrough_lba0_4k&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(scsi_bounce_ctx-&amp;gt;DeviceObject, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2A&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, mapped_va);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// WRITE(10): push the source page into the VHD-backed disk buffer via standard SCSI passthrough.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( page_meta_restore_slot )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;page_meta_restore_slot &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v6;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;         // 第一次 WRITE(10) 返回后恢复被临时改写的 PFN 元数据：*restore_slot = saved_old。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          break&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v8 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; scsi_passthrough_lba0_4k&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(scsi_bounce_ctx-&amp;gt;DeviceObject, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;28&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, allocated_memory);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// READ(10): pull the same 4 KB sector back into the destination page.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v8 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          scsi_passthrough_lba0_4k&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(scsi_bounce_ctx-&amp;gt;DeviceObject, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2A&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, scsi_bounce_ctx-&amp;gt;Sector0RestoreBuf);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Cleanup WRITE(10): send the static scratch/original buffer at qword_141D0FD18+8 back to the same LBA.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          mapped_va &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          allocated_memory &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v5 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            continue&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v8;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v7;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;C00000A3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;值得一提的是 141D0FD18（scsi_bounce_ctx）这个全局变量被传给 &lt;code&gt;IoBuildDeviceIoControlRequest&lt;/code&gt; 作为第二个参数，随后被传给 &lt;code&gt;IofCallDriver&lt;/code&gt; 作为第一个参数，因此可以判断是 &lt;code&gt;DeviceObject&lt;/code&gt; 的指针。&lt;/p&gt;
&lt;p&gt;基于这个判断，可以从 &lt;code&gt;scsi_passthrough_lba0_4k(loc_141D0FD18, 0x2A, loc_141D0FD18 + 8)&lt;/code&gt; 这句调用恢复（猜测）出来一个结构体的雏形&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; #pragma &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;pack&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(push, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _SCSI_BOUNCE_CONTEXT&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // sizeof=0x1008&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                                       // XREF: SCSI_BOUNCE_CONTEXT/r&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;DeviceObject;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000008&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     unsigned&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; __int8 &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;Sector0RestoreBuf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4096&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00001008&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00001008&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; #pragma &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;pack&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(pop)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00001008&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; typedef&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _SCSI_BOUNCE_CONTEXT SCSI_BOUNCE_CONTEXT;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;scsi_xfer_1_page&quot;&gt;scsi_xfer_1_page&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;0x140003E10&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;上面三个函数最终由 &lt;code&gt;copy_phys_page_with_lazy_resolve&lt;/code&gt; 调用，只有这个函数属于 &lt;code&gt;find_kernel_signature_in_physical_ranges&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;做的事情跟 &lt;code&gt;scsi_sfer_n_4k_pages&lt;/code&gt; 差不多，做一波复制的操作，如果复制成功那么页面可用，继续做签名匹配&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Validate that the mapped physical page matches the scratch copy before the signature scan continues.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Use the same SCSI WRITE(10) + READ(10) bounce path to validate that mappedPage and copiedPage observe the same content.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// scsi_xfer_1_page: validate that the MmMapIoSpace view and the scratch-page copy view really match by replaying the same page through the VHD/vhdmp SCSI bounce channel.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;NTSTATUS __fastcall &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;scsi_xfer_1_page&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;copiedPage&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;mappedPage&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  unsigned&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; __int64 phys_addr;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  NTSTATUS result;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // eax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  NTSTATUS v6;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // esi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  unsigned&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; __int64 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;page_meta_restore_slot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [rsp+28h] [rbp-20h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;g_HasScsiBounceChannel )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;C00000A3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  page_meta_restore_slot &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  phys_addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; ensure_pfn_entry_state_for_scsi_bounce&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(mappedPage, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;page_meta_restore_slot);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 调用 ensure_pfn_entry_state_for_scsi_bounce，为验证路径里的 mappedPage 临时准备 PFN 元数据恢复信息。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  result &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; scsi_passthrough_lba0_4k&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(g_ScsiBounceCtx-&amp;gt;DeviceObject, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2A&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, mappedPage);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( page_meta_restore_slot )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;page_meta_restore_slot &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; phys_addr;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 验证路径同样在第一次 WRITE(10) 后恢复 PFN 元数据旧值。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( result &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v6 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; scsi_passthrough_lba0_4k&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(g_ScsiBounceCtx-&amp;gt;DeviceObject, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, copiedPage);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    scsi_passthrough_lba0_4k&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(g_ScsiBounceCtx-&amp;gt;DeviceObject, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;42&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, g_ScsiBounceCtx-&amp;gt;Sector0RestoreBuf);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Final cleanup WRITE(10) after the validation READ(10).&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v6;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; result;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;copy_phys_page_with_lazy_resolve&quot;&gt;copy_phys_page_with_lazy_resolve&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;14000DF10 &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;先分配出 n 个页面大小的 allocated_memory 作为目标地址，然后扫物理内存，筛选符合条件的页面填入 allocated_memory&lt;/p&gt;
&lt;p&gt;主循环逻辑如下&lt;/p&gt;
&lt;h4 id=&quot;筛出全-0xff-的页面&quot;&gt;筛出全 0xFF 的页面&lt;/h4&gt;
&lt;p&gt;分配 page_count (第二个参数) 个页面，分配失败输出日志返回错误码，注意这边分配的是内核虚拟地址&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _page_count &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 12&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                        // 页数转为字节数&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  allocated_memory &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (soved_MmAllocateContiguousMemory)(size, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;allocated_memory )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    decode_hidden_string_len6&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D0FFEC, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;byte_14002135F);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_string_len6(&quot;debug&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    decode_hidden_string_len51&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D0FF30, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;dword_14002117C);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_string_len51(&quot;D:\\UGit\\HyperCharge2\\src\\kernelsys\\hypercharge.cpp&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    decode_hidden_string_len44&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D10270, byte_140021993);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_string_len44(&quot;hypercharge::FindContinousEmptyPagesInRange&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    decode_hidden_log_string&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D0FFBC, byte_140021303);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_log_string(&quot;failed to alloc memory for empty buffer.\r\n&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    log_decoded_hypercharge_message&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D0FFEC, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D0FF30, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D10270, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;385&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D0FFBC);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// log_decoded_hypercharge_message(..., line=385, message=&quot;failed to alloc memory for empty buffer.\r\n&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;C000009A&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;取一个页面起始的物理地址，copy 到分配的页面里。这边 &lt;code&gt;MmCopyMemory&lt;/code&gt; 的 Flags = 1，即 MM_COPY_MEMORY_PHYSICAL&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    phys &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (pRange &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v24) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFF000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( (MmCopyMemory)(allocated_memory, phys, size, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v92) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;筛选条件&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 接上文&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v41 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(allocated_memory &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v41 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFFF&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_22;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v41 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      while&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v41 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FF7&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; );&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就是扫连续八字节，确保全为 0xFFFFFFFFFFFFFFFF&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;MmCopy&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(allocated_memory, phys, size, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v92) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uint64_t&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)(allocated_memory &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFFF&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_22;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;筛选成功后用 &lt;code&gt;MmMapIoSpace&lt;/code&gt; 进行一个映射，然后 bounce 到 allocated_memory 中&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  mapped_va &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (MmMapIoSpace)(phys, size, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _mapped_va &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mapped_va;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;scsi_sfer_n_4k_pages&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(allocated_memory, mapped_va, page_count) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// copy_phys_page_with_lazy_resolve ultimately falls back to scsi_sfer_n_4k_pages() when normal MmCopyMemory/MmMapIoSpace only sees the fake/guarded page view.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;筛掉-0int3nop&quot;&gt;筛掉 0、int3、nop&lt;/h4&gt;
&lt;p&gt;bounce 一次后又进行了一个筛，筛掉有 0 和 int3 和 nop 的页&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    while&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v61 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v58 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v60);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v58 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v60) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v61 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CC&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v61 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;90&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          break&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v59 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v60 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_61;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;find_kernel_signature_in_physical_ranges&quot;&gt;find_kernel_signature_in_physical_ranges&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;14000BEB0&lt;/code&gt;&lt;/p&gt;
&lt;h4 id=&quot;取受保护页面的真实内容&quot;&gt;取受保护页面的真实内容&lt;/h4&gt;
&lt;p&gt;分配一页的内存，失败输出日志，也是做题过程中看到的第一条日志&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  allocated_memory &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (MmAllocateContiguousMemory)(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFFF&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;allocated_memory )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    decode_hidden_string_len6&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D0FFEC, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;byte_14002135F);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_string_len6(&quot;debug&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    decode_hidden_string_len51&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D0FF30, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;dword_14002117C);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_string_len51(&quot;D:\\UGit\\HyperCharge2\\src\\kernelsys\\hypercharge.cpp&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    decode_hidden_log_string_ex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D102F0, word_140021A82);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_log_string_ex(&quot;hypercharge::FindVMExitHandler&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    decode_hidden_log_string_v2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D10188, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;word_140021706);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_log_string_v2(&quot;failed to alloc mmeory for read buffer.\r\n&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    log_decoded_hypercharge_message&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D0FFEC, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D0FF30, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D102F0, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;808&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D10188);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// log_decoded_hypercharge_message(..., line=808, message=&quot;failed to alloc mmeory for read buffer.\r\n&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;C000009A&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后 &lt;code&gt;MmGetPhysicalMemoryRanges&lt;/code&gt; 拿到一个物理内存区间表，要保证 BaseAddress 为 0&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  range &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (MmGetPhysicalMemoryRanges)();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;range&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;BaseAddress )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_158;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;MmGetPhysicalMemoryRanges&lt;/code&gt; 返回一个 &lt;code&gt;PPHYSICAL_MEMORY_RANGE&lt;/code&gt;，结构体定义如下&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _PHYSICAL_MEMORY_RANGE {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    PHYSICAL_ADDRESS BaseAddress;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 物理地址的起始位置&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    LARGE_INTEGER    NumberOfBytes;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 该范围的字节数&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;} PHYSICAL_MEMORY_RANGE, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;PPHYSICAL_MEMORY_RANGE;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;遍历 range，拿到当前页边界，把当前页 copy 到 scratch page，开始筛 0xFF，跟前面一样的，对这样的 candidate 做映射，然后拿到它的真实内容&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    while&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      CurrentAddress &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v42 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _range_1-&amp;gt;BaseAddress;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      MmCopyMemory &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; g_pMmCopyMemory;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      CurrentPage &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; CurrentAddress &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFF000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( (MmCopyMemory)(_allocated_memory_2, CurrentPage, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v237) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_38;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v59 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;_allocated_memory_2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[v59 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFFF&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_38;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v59 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      mapped_va &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (MmMapIoSpace)(CurrentPage, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4096&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Map the candidate page so it can be validated and, if it passes, scanned in-place.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;mapped_va )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_38;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      _mapped_va &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mapped_va;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;scsi_xfer_1_page&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(_allocated_memory_2, mapped_va) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        break&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                                  // Only if scsi_xfer_1_page succeeds does the scanner trust this page as a candidate &apos;real content&apos; page for signature matching.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;这一步之后开始对 scratch 做模式匹配，说明这个物理页面直接 copy 的话读到的是全 0xFF，但映射到虚拟内存并经过 &lt;code&gt;scsi_xfer_1_page&lt;/code&gt; 之后复制到 scratch 的是包含特征码的真实内容。这表明这个物理页面是隐藏/受保护的页面&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;匹配特征码&quot;&gt;匹配特征码&lt;/h4&gt;
&lt;p&gt;首先会检查 CPU 为 Intel 或 AMD，如果两个都不是会急&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260502120914969&lt;/span&gt;&lt;code&gt;image-20260502120914969.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h5 id=&quot;amd-路径&quot;&gt;AMD 路径&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;bytes: E8 ?? ?? ?? ?? 48 89 04 24 E9&lt;/li&gt;
&lt;li&gt;mask: x????xxxxx&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260502121830371&lt;/span&gt;&lt;code&gt;image-20260502121830371.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260502121813044&lt;/span&gt;&lt;code&gt;image-20260502121813044.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h5 id=&quot;intel-路径&quot;&gt;Intel 路径&lt;/h5&gt;
&lt;p&gt;一样先区 Build Number，然后进入 &lt;code&gt;InitIntelBuildPatternDescriptor&lt;/code&gt;(140018260) 拿到对应系统版本的特征码。可以看到只有 Win11 22621 这条分支加密了，其它特征码都是明文，后面可以直接用&lt;/p&gt;
&lt;p&gt;本机特征码 &lt;code&gt;65 C6 04 25 6D ?? ?? ?? ?? 48 8B 4C 24 ?? 48 8B 54 24 ?? E8 ?? ?? ?? ?? E9&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Initialize a PATTERN_DESCRIPTOR for Intel systems based on NtBuildNumber. The packed qword at +0x48 stores Length in the low 32 bits and MatchOffset in the high 32 bits.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 按 NtBuildNumber 选择 Intel 版 VmExit dispatcher 特征描述器；低32位=pattern长度，高32位=命中后再偏移到目标 call 的 MatchOffset。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;PATTERN_DESCRIPTOR &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;__fastcall &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;InitIntelBuildPatternDescriptor&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        PATTERN_DESCRIPTOR &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;outPattern&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        unsigned&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; __int64 &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;ntBuildNumber&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v4;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v5;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;outPattern-&amp;gt;Mask[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;56&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;outPattern-&amp;gt;Mask[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;outPattern-&amp;gt;Mask[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;24&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;outPattern-&amp;gt;Mask[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;outPattern-&amp;gt;Bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( ntBuildNumber &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;585D&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                 // Build 22621 is the main split: newer Intel builds use the decrypted Win11 pattern, older builds use legacy per-build signatures.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                                             // Build 19041 is the next split between the 2004+ Intel pattern and the older 17763/17134/10586/10240 patterns.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( ntBuildNumber &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4A61&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( ntBuildNumber &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4563&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        outPattern-&amp;gt;Bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; g_Win10_17763PatternBytes;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;outPattern-&amp;gt;Length &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1300000019&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // Packed descriptor field: Length=0x19, MatchOffset=0x13.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        qmemcpy&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(outPattern-&amp;gt;Mask, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;xxxx?xxx????xxxxxx?x????&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;24&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_11;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( ntBuildNumber &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;42EE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( ntBuildNumber &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;295A&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( ntBuildNumber &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; outPattern;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          outPattern-&amp;gt;Bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; g_Win10_10240PatternBytes;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;outPattern-&amp;gt;Length &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1300000019&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          qmemcpy&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(outPattern-&amp;gt;Mask, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;xxxxxxxxxxxxxxx????x&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_8;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        outPattern-&amp;gt;Bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; g_Win10_10586PatternBytes;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;outPattern-&amp;gt;Length &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1300000019&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        qmemcpy&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(outPattern-&amp;gt;Mask, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;xx????x?xx????xxxx&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        outPattern-&amp;gt;Bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; g_Win10_17134PatternBytes;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;outPattern-&amp;gt;Length &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1300000019&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        qmemcpy&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(outPattern-&amp;gt;Mask, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;xxxxxxx?xx????xxxx&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      outPattern-&amp;gt;Bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; g_Win10_19041PatternBytes;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;outPattern-&amp;gt;Length &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1300000019&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      qmemcpy&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(outPattern-&amp;gt;Mask, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;xxxxxxxxxxxxx?xxxx&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;outPattern-&amp;gt;Mask[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;x?&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LABEL_8:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;outPattern-&amp;gt;Mask[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;????&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LABEL_11:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    outPattern-&amp;gt;Mask[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;24&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;x&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; outPattern;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  outPattern-&amp;gt;Bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; g_Win11_22621PatternBytes;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;outPattern-&amp;gt;Length &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;170000001D&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // Packed descriptor field: Length=0x1D, MatchOffset=0x17.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v5 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v4;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DecodeWin11PatternBytesOnce&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(byte_141D10224, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;g_EncodedWin11PatternMask);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Decode the obfuscated Win11 mask once, then copy it into outPattern-&amp;gt;Mask.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    outPattern-&amp;gt;Mask[v5] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; byte_141D10224&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[v5];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v5 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  while&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v5 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 28&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  outPattern-&amp;gt;Mask[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;29&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; outPattern;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;后面是特征码匹配算法，就是线性扫描，Mask[i] == ‘x’ 时要求字节严格相等，Mask[i] == ’?’ 时跳过&lt;/p&gt;
&lt;p&gt;没匹配到有日志&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    decode_hidden_string_len6_alt&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;unk_141D0FF68&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, byte_1400211E9);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_string_len6_alt(&quot;error&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    decode_hidden_string_len51&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;unk_141D0FF30&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;dword_14002117C&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_string_len51(&quot;D:\\UGit\\HyperCharge2\\src\\kernelsys\\hypercharge.cpp&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    decode_hidden_log_string_ex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;unk_141D102F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, word_140021A82);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_log_string_ex(&quot;hypercharge::FindVMExitHandler&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    decode_hidden_log_string_len14&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;unk_141D101D8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, word_1400217BA);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_log_string_len14(&quot;no any sig.\r\n&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    log_decoded_hypercharge_message&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;unk_141D0FF68&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;unk_141D0FF30&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;unk_141D102F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;867&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;unk_141D101D8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// log_decoded_hypercharge_message(..., line=867, message=&quot;no any sig.\r\n&quot;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;manual_map_pe_image&quot;&gt;manual_map_pe_image&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;地址：&lt;code&gt;0x14000E630&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;拷贝 PE，断点下到这里就能取到 shellcode&lt;/p&gt;
&lt;p&gt;校验 PE 结构，失败输出日志&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260502124412943&lt;/span&gt;&lt;code&gt;image-20260502124412943.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;后面就是节拷贝，拷贝失败会输出做题的时候看到的日志&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v17 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v14;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v78 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v12;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v18 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v12;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v19 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v72 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 40&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v12 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 16&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v19 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          memmove_sse2_overlap_safe&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v72 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v18 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 12&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;), (v79 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v72 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v18 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 20&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)), v19);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v20 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (v72 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v18);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        decode_hidden_section_name_pdpt_len3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;word_141D10018, word_1400213E2);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_section_name_pdpt_len3(&quot;.3&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v20 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; word_141D10018 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v21 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v72 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v18 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 12&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;a2)[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].m128_u64[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v21) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v13 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFF000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                                           |&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;a2)[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].m128_u64[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v21) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFF0000000000FF8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uLL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                                           |&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v17 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v72 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v18 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 12&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          decode_hidden_log_level_debug_string_len6&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D0FFEC, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;byte_14002135F);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_log_level_debug_string_len6(&quot;debug&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          decode_hidden_source_path_string_len51&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D0FF30, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;dword_14002117C);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_source_path_string_len51(&quot;D:\\UGit\\HyperCharge2\\src\\kernelsys\\hypercharge.cpp&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          decode_hidden_log_scope_prepare_payload_string_len28&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D102A0, qword_1400219E8);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_log_scope_prepare_payload_string_len28(&quot;hypercharge::PreparePayload&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          decode_hidden_log_pdpt_physaddr_string_len68&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D10020, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;dword_140021414);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_log_pdpt_physaddr_string_len68(&quot;Section .3 (pdpt) physical address at %p, pointing to physical %p\r\n&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          log_Hypercharge_Q_v3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D0FFEC, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D0FF30, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D102A0, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;499&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_141D10020, v17, v13);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Formatted log: [debug] hypercharge::PreparePayload @ D:\\UGit\\HyperCharge2\\src\\kernelsys\\hypercharge.cpp:499 -&amp;gt; &quot;Section .3 (pdpt) physical address at %p, pointing to physical %p\r\n&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        decode_hidden_section_name_pd_len3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;word_141D10068, byte_14002148B);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// decode_hidden_section_name_pd_len3(&quot;.2&quot;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;build_vmexit_hook_shellcode&quot;&gt;build_vmexit_hook_shellcode&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;14000FC40&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;整个题目最核心的攻击逻辑就在这里。匹配到特征码位置后从特征码处开始搜索 0xCC 代码洞，填入 payload，payload 主要做页表映射的操作。patch vmexit dispatcher 跳转到代码洞之后 cpuid 触发 vmexit，跑完 payload 之后将代码洞恢复，再 patch vmexit dispatcher 跳转到密码校验逻辑&lt;/p&gt;
&lt;h4 id=&quot;调试记录&quot;&gt;调试记录&lt;/h4&gt;
&lt;p&gt;函数入口处断下来，可以拿到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rcx = FFFFE281A15A43DF：patch_site，从这里可以拿 &lt;code&gt;hvxi64.exe&lt;/code&gt; 代码中本来要跳转的地址 &lt;code&gt;original_target&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;第二个参数就是 patch_site 的页边界，用于辅助计算和一些校验&lt;/li&gt;
&lt;li&gt;r8 = FFFFE281880C0000，驱动分配的 scratch 页面，作为 vmexit 页面的副本，传给 scsi_xfer_1_page 做校验&lt;/li&gt;
&lt;li&gt;r9 = 420000：用于写入占位符 &lt;code&gt;0xCAFEBABEDEADBEEF&lt;/code&gt;，.3 节， PDPT 页，对应 .data 段在 41C000&lt;/li&gt;
&lt;li&gt;[rsp+28] = 4080：payload_slot_offset，pyaload.sys 中的 &lt;code&gt;140004080&lt;/code&gt;，在 .data 段，分析可得到全局变量语义是原始 vmexit dispatcher 的槽位&lt;/li&gt;
&lt;li&gt;[rsp+30] = 1720：payload_entry_rva，payload.sys 中的 &lt;code&gt;140001720 vmexit_cpuid_backdoor_handler&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;patch_site 不仅是 0xcc 代码洞的位置，其实也是 vmexit dispatcher 的位置，看附近的代码可以发现&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260504180706222&lt;/span&gt;&lt;code&gt;image-20260504180706222.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;262 行这个位置替换了占位符 &lt;code&gt;0xCAFEBABEDEADBEEF&lt;/code&gt;，在对应的地方断下来步过，发现 420000 被写入了&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260504173745877&lt;/span&gt;&lt;code&gt;image-20260504173745877.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;6: kd&amp;gt; u ffffda04`706030b0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030b0 50              push    rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030b1 53              push    rbx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030b2 48bb00e0dfbf7fffffff mov rbx,0FFFFFF7FBFDFE000h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030bc 48b80000420000000000 mov rax,420000h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030c6 4883c803        or      rax,3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030ca 48898320030000  mov     qword ptr [rbx+320h],rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030d1 0f20db          mov     rbx,cr3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030d4 0f22db          mov     cr3,rbx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;类似地，另外两个占位符在如图所示位置 patch&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260504174111811&lt;/span&gt;&lt;code&gt;image-20260504174111811.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;patch 后长这个样子，&lt;code&gt;8A0&lt;/code&gt; 恰好是 original_target 的页偏移，下面的是 vmexit handler 指针在 payload.sys 中的偏移&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030f0 4805a038fdff    add     rax,0FFFFFFFFFFFD38A0h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030f6 4881c380400000  add     rbx,4080h&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;完整 payload&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;6: kd&amp;gt; u ffffda04`706030b0 L15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030b0 50              push    rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030b1 53              push    rbx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030b2 48bb00e0dfbf7fffffff mov rbx,0FFFFFF7FBFDFE000h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030bc 48b80000420000000000 mov rax,420000h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030c6 4883c803        or      rax,3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030ca 48898320030000  mov     qword ptr [rbx+320h],rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030d1 0f20db          mov     rbx,cr3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030d4 0f22db          mov     cr3,rbx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030d7 48bb0000e0ff7f320000 mov rbx,327FFFE00000h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030e1 488b03          mov     rax,qword ptr [rbx]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030e4 e800000000      call    ffffda04`706030e9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030e9 58              pop     rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030ea 482500f0ffff    and     rax,0FFFFFFFFFFFFF000h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030f0 4805a038fdff    add     rax,0FFFFFFFFFFFD38A0h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030f6 4881c380400000  add     rbx,4080h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`706030fd 488903          mov     qword ptr [rbx],rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`70603100 5b              pop     rbx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffda04`70603101 58              pop     rax&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;真正将 payload 写入代码洞的位置在这里，对应地址 1400111E5&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260504181008080&lt;/span&gt;&lt;code&gt;image-20260504181008080.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260504181157810&lt;/span&gt;&lt;code&gt;image-20260504181157810.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;追加了一句 call 和一句 jmp&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260512185812074&lt;/span&gt;&lt;code&gt;image-20260512185812074.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;现在的状况：payload 写入代码洞，vmexit dispatcher 还没有被 patch&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;6: kd&amp;gt; db ffffe281`a15a4406&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4406  50 53 48 bb 00 e0 df bf-7f ff ff ff 48 b8 00 00  PSH.........H...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4416  42 00 00 00 00 00 48 83-c8 03 48 89 83 20 03 00  B.....H...H.. ..&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4426  00 0f 20 db 0f 22 db 48-bb 00 00 e0 ff 7f 32 00  .. ..&quot;.H......2.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4436  00 48 8b 03 e8 00 00 00-00 58 48 25 00 f0 ff ff  .H.......XH%....&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4446  48 05 a0 38 fd ff 48 81-c3 80 40 00 00 48 89 03  H..8..H...@..H..&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4456  5b 58 e8 43 34 fd ff e9-82 ff ff ff cc cc cc cc  [X.C4...........&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4466  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4476  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;6: kd&amp;gt; u FFFFE281A15A43DF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43df e8bc34fdff      call    ffffe281`a15778a0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43e4 e957fdffff      jmp     ffffe281`a15a4140&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43e9 740d            je      ffffe281`a15a43f8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43eb c744243011100080 mov     dword ptr [rsp+30h],80001011h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43f3 e91bffffff      jmp     ffffe281`a15a4313&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43f8 c744243012100080 mov     dword ptr [rsp+30h],80001012h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4400 e90effffff      jmp     ffffe281`a15a4313&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4405 cc              int     3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接下来开始 patch vmexit dispatcher，首先是将原本的 call 改成 jmp（1400118B4），然后把目标 ffffe281`a15778a0 改成 ffffe281`a15a4406（1400118DD）。这里跳转目标就是代码洞内的 payload&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260504184313930&lt;/span&gt;&lt;code&gt;image-20260504184313930.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260504184613328&lt;/span&gt;&lt;code&gt;image-20260504184613328.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;之后又将这次修改回滚（140011349），因为此时这段 payload 已经跑完。那么不难想到在此之前一定调用了一次 cpuid 来跑这段 payload&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260504190155823&lt;/span&gt;&lt;code&gt;image-20260504190155823.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4: kd&amp;gt; u ffffe281`a15a43df&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43df e922000000      jmp     ffffe281`a15a4406&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43e4 e957fdffff      jmp     ffffe281`a15a4140&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43e9 740d            je      ffffe281`a15a43f8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43eb c744243011100080 mov     dword ptr [rsp+30h],80001011h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43f3 e91bffffff      jmp     ffffe281`a15a4313&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43f8 c744243012100080 mov     dword ptr [rsp+30h],80001012h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4400 e90effffff      jmp     ffffe281`a15a4313&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4405 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4: kd&amp;gt; p&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;srztLao5dQ+0x1134b:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fffff808`efff134b 0fb68c2484000000 movzx   ecx,byte ptr [rsp+84h]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4: kd&amp;gt; u ffffe281`a15a43df&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43df e8bc34fd00      call    ffffe281`a25778a0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43e4 e957fdffff      jmp     ffffe281`a15a4140&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43e9 740d            je      ffffe281`a15a43f8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43eb c744243011100080 mov     dword ptr [rsp+30h],80001011h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43f3 e91bffffff      jmp     ffffe281`a15a4313&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43f8 c744243012100080 mov     dword ptr [rsp+30h],80001012h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4400 e90effffff      jmp     ffffe281`a15a4313&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4405 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4: kd&amp;gt; p&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;srztLao5dQ+0x11353:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fffff808`efff1353 884804          mov     byte ptr [rax+4],cl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4: kd&amp;gt; p&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;srztLao5dQ+0x11356:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fffff808`efff1356 488b05f3dccd01  mov     rax,qword ptr [srztLao5dQ+0x1cef050 (fffff808`f1ccf050)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4: kd&amp;gt; u ffffe281`a15a43df&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43df e8bc34fdff      call    ffffe281`a15778a0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43e4 e957fdffff      jmp     ffffe281`a15a4140&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43e9 740d            je      ffffe281`a15a43f8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43eb c744243011100080 mov     dword ptr [rsp+30h],80001011h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43f3 e91bffffff      jmp     ffffe281`a15a4313&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43f8 c744243012100080 mov     dword ptr [rsp+30h],80001012h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4400 e90effffff      jmp     ffffe281`a15a4313&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4405 cc              int     3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接下来将代码洞中的 0x52 字节恢复成 0xcc（保留了后面加的 call 和 jmp）&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260504190840746&lt;/span&gt;&lt;code&gt;image-20260504190840746.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;7: kd&amp;gt; db FFFFE281A15A4406&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4406  50 53 48 bb 00 e0 df bf-7f ff ff ff 48 b8 00 00  PSH.........H...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4416  42 00 00 00 00 00 48 83-c8 03 48 89 83 20 03 00  B.....H...H.. ..&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4426  00 0f 20 db 0f 22 db 48-bb 00 00 e0 ff 7f 32 00  .. ..&quot;.H......2.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4436  00 48 8b 03 e8 00 00 00-00 58 48 25 00 f0 ff ff  .H.......XH%....&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4446  48 05 a0 38 fd ff 48 81-c3 80 40 00 00 48 89 03  H..8..H...@..H..&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4456  5b 58 e8 43 34 fd ff e9-82 ff ff ff cc cc cc cc  [X.C4...........&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4466  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4476  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;7: kd&amp;gt; p&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;srztLao5dQ+0x12343:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fffff808`efff2343 488b8424e0000000 mov     rax,qword ptr [rsp+0E0h]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;7: kd&amp;gt; db FFFFE281A15A4406&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4406  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4416  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4426  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4436  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4446  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4456  cc cc e8 43 34 fd ff e9-82 ff ff ff cc cc cc cc  ...C4...........&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4466  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4476  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上图可以看到之后又在代码洞里进行了一个写，这里是最终写入的核心逻辑的 launcher（call 327FFFE01720）&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;7: kd&amp;gt; p&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;srztLao5dQ+0x1234e:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fffff808`efff234e 488b442458      mov     rax,qword ptr [rsp+58h]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;7: kd&amp;gt; db FFFFE281A15A4406&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4406  49 cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  I...............&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4416  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4426  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4436  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4446  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4456  cc cc e8 43 34 fd ff e9-82 ff ff ff cc cc cc cc  ...C4...........&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4466  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4476  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;7: kd&amp;gt; bp srztLao5dQ+123A6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;7: kd&amp;gt; g&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Breakpoint 12 hit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;srztLao5dQ+0x123a6:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fffff808`efff23a6 89480f          mov     dword ptr [rax+0Fh],ecx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;7: kd&amp;gt; bp srztLao5dQ+123A6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;breakpoint 12 redefined&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;7: kd&amp;gt; db FFFFE281A15A4406&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4406  49 ba 20 17 e0 ff 7f 32-00 00 41 ff d2 e9 cc cc  I. ....2..A.....&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4416  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4426  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4436  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4446  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4456  cc cc e8 43 34 fd ff e9-82 ff ff ff cc cc cc cc  ...C4...........&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4466  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4476  cc cc cc cc cc cc cc cc-cc cc cc cc cc cc cc cc  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;7: kd&amp;gt; u FFFFE281A15A4406&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4406 49ba2017e0ff7f320000 mov r10,327FFFE01720h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4410 41ffd2          call    r10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4413 e9cccccccc      jmp     ffffe281`6e2710e4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4418 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4419 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a441a cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a441b cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a441c cc              int     3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;代码洞最终形态&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;7: kd&amp;gt; u FFFFE281A15A4406 L50&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4406 49ba2017e0ff7f320000 mov r10,327FFFE01720h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4410 41ffd2          call    r10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4413 e9ccffffff      jmp     ffffe281`a15a43e4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4418 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4419 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a441a cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a441b cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a441c cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a441d cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a441e cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a441f cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4420 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4421 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4422 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4423 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4424 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4425 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4426 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4427 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4428 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4429 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a442a cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a442b cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a442c cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a442d cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a442e cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a442f cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4430 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4431 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4432 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4433 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4434 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4435 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4436 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4437 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4438 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4439 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a443a cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a443b cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a443c cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a443d cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a443e cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a443f cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4440 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4441 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4442 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4443 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4444 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4445 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4446 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4447 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4448 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4449 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a444a cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a444b cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a444c cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a444d cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a444e cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a444f cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4450 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4451 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4452 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4453 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4454 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4455 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4456 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4457 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4458 e84334fdff      call    ffffe281`a15778a0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a445d e982ffffff      jmp     ffffe281`a15a43e4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接下来又对 vmexit dispatcher 进行了一模一样的 patch（140011C92）&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260504192823504&lt;/span&gt;&lt;code&gt;image-20260504192823504.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4: kd&amp;gt; u rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43df e8bc34fdff      call    ffffe281`a15778a0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43e4 e957fdffff      jmp     ffffe281`a15a4140&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43e9 740d            je      ffffe281`a15a43f8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43eb c744243011100080 mov     dword ptr [rsp+30h],80001011h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43f3 e91bffffff      jmp     ffffe281`a15a4313&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43f8 c744243012100080 mov     dword ptr [rsp+30h],80001012h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4400 e90effffff      jmp     ffffe281`a15a4313&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4405 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4: kd&amp;gt; bp srztLao5dQ+11CA4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4: kd&amp;gt; g&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Breakpoint 13 hit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;srztLao5dQ+0x11ca4:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fffff808`efff1ca4 8901            mov     dword ptr [rcx],eax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4: kd&amp;gt; u ffffe281`a15a43df&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43df e9bc34fdff      jmp     ffffe281`a15778a0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43e4 e957fdffff      jmp     ffffe281`a15a4140&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43e9 740d            je      ffffe281`a15a43f8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43eb c744243011100080 mov     dword ptr [rsp+30h],80001011h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43f3 e91bffffff      jmp     ffffe281`a15a4313&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43f8 c744243012100080 mov     dword ptr [rsp+30h],80001012h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4400 e90effffff      jmp     ffffe281`a15a4313&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4405 cc              int     3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4: kd&amp;gt; p&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;srztLao5dQ+0x11ca6:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fffff808`efff1ca6 488b05a3d3cd01  mov     rax,qword ptr [srztLao5dQ+0x1cef050 (fffff808`f1ccf050)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4: kd&amp;gt; u ffffe281`a15a43df&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43df e922000000      jmp     ffffe281`a15a4406&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43e4 e957fdffff      jmp     ffffe281`a15a4140&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43e9 740d            je      ffffe281`a15a43f8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43eb c744243011100080 mov     dword ptr [rsp+30h],80001011h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43f3 e91bffffff      jmp     ffffe281`a15a4313&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a43f8 c744243012100080 mov     dword ptr [rsp+30h],80001012h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4400 e90effffff      jmp     ffffe281`a15a4313&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ffffe281`a15a4405 cc              int     3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;至此攻击流程一目了然&lt;/p&gt;
&lt;h2 id=&quot;如果没有上帝视角&quot;&gt;如果没有上帝视角&lt;/h2&gt;
&lt;p&gt;程序混淆很重，还没有怎么研究过 tvm，所以如果漏分析了几个关键函数应该如何推进分析呢？看了 saileaxh 的题解有一点启发：&lt;/p&gt;
&lt;p&gt;首先扫特征码定位 hyperv 镜像的逻辑是必须找到的&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;.vmem 是虚拟机物理内存，所有痕迹都可以找到，包括 vmexit handler（通过特征码定位）、代码洞、payload.sys 的位置、题目中的自建页表。题目中的日志泄露了自建页表的物理地址，据此也能够找到 payload.sys 的位置。具体地说，先是要定位到 patch 点，然后拿到 0x327FFFE01720 这个目标地址，再用页表计算物理地址。&lt;/li&gt;
&lt;li&gt;.vmem 中扫题目中多次出现的魔数，分别 dump 上下文，交给 ai 分析，应该也能够发现蛛丝马迹，并且魔数本身就在 payload.sys 中出现过&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;基本概念&quot;&gt;基本概念&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;将 vhd 用 AttachVirtualDisk 挂载后，会在系统内暴露出一个虚拟磁盘设备，之后可以按 LBA 访问&lt;/li&gt;
&lt;li&gt;Windows 存储栈：上层通常有 partmgr.sys, disk.sys，底层是 vhdmp.sys，为 IRP 传输提供一个可用的设备栈&lt;/li&gt;
&lt;li&gt;SCSI_PASS_THROUGH_DIRECT：Windows 提供的标准 pass-through 方式，调用者构造 CDB、DataBuffer、长度等字段，让存储栈来执行一个 SCSI 命令，比如 READ(10), WRITE(10)&lt;/li&gt;
&lt;li&gt;scsi bounce：hypervisor 利用 EPT 保护 Ring -1 页面，此时需要通过 DMA 访问真实内容&lt;/li&gt;
&lt;li&gt;为什么需要 ensure_pfn_entry_state_for_scsi_bounce：通过 scsi_sfer_n_4k_pages 的调用场景中，src 是 hypervisor 保护页面由 MmMapIoSpace 映射的结果，这种页面存储栈可能不接受，需要修改 _MMPFN 的 u4 字段（具体来说，修改 PageIdentity 这一位）。但当前版本测试下来不修改它也能正常运行&lt;/li&gt;
&lt;/ol&gt;</content><category term="gamesec"/><category term="windows"/></entry><entry><id>https://nonmirror.icu/posts/unicorn/</id><title type="text">Unicorn</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/unicorn/"/><updated>2026-03-19T00:29:24.000Z</updated><published>2026-03-19T00:29:24.000Z</published><summary type="text">@source: https://bbs.kanxue.com/thread 280231 1.htm Unicorn 基于 qemu，支持多架构 CPU 核心流程 内存映射需要页对齐（4KB） hook 可以对特定事件插桩 hook 地址范围过滤 TCG 执行原理 翻译块 (TB) 一段连续直线执行的代码，遇到跳转就结束 1. Unicorn 在翻译每个 TB 时为每条指令注入了回调点（UC HOOK CODE），因此 hook 的性能开销在复杂循环中很显著，善用地址范围过滤精准插桩 2. 第一次执行需要翻译，比…</summary><content type="html">&lt;p&gt;@source: &lt;a href=&quot;https://bbs.kanxue.com/thread-280231-1.htm&quot;&gt;https://bbs.kanxue.com/thread-280231-1.htm&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;unicorn&quot;&gt;Unicorn&lt;/h2&gt;
&lt;p&gt;基于 qemu，支持多架构 CPU&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   Python/C 脚本&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ↓&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Unicorn API&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ↓&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    QEMU TCG (Tiny Code Generator)  ← 核心翻译引擎&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ↓&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    翻译为宿主机原生指令执行&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;核心流程&quot;&gt;核心流程&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  # unicorn_skeleton.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  from&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn.arm64_const &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  # Step 1: 创建引擎 —— 指定架构和模式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  uc &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn.Uc(unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARCH_ARM64&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_MODE_ARM&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  # Step 2: 映射内存 —— 划定沙箱边界&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  uc.mem_map(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)   &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 从 0x1000 开始，映射 16KB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  # Step 3: 写入数据 —— 放入代码和初始状态&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  uc.mem_write(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\x00&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  uc.reg_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_SP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  # Step 4: 挂钩子 —— 安装观察窗口（可选）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; on_insn&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc, address, size, user_data):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;      print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;PC=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;address&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;:x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  uc.hook_add(unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_HOOK_CODE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, on_insn)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  # Step 5: 启动模拟 —— 指定起止地址&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  uc.emu_start(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;until&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1010&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;内存映射需要页对齐（4KB）&lt;/p&gt;
&lt;h3 id=&quot;hook&quot;&gt;hook&lt;/h3&gt;
&lt;p&gt;可以对特定事件插桩&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Unicorn 执行引擎&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;         │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;         ├── 执行每条指令前  →  UC_HOOK_CODE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;         ├── 读内存时        →  UC_HOOK_MEM_READ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;         ├── 写内存时        →  UC_HOOK_MEM_WRITE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;         ├── 访问未映射内存  →  UC_HOOK_MEM_UNMAPPED&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;         ├── 执行中断/syscall →  UC_HOOK_INSN (特定指令)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;         └── 遇到无效指令    →  UC_HOOK_INSN_INVALID&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# trace_example.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn, capstone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn.arm64_const &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CODE&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;([&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;D2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# MOV X0, #1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;41&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;D2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# MOV X1, #2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;02&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;01&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8B&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# ADD X2, X0, X1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BASE&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn.Uc(unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARCH_ARM64&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_MODE_ARM&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.mem_map(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BASE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.mem_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BASE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CODE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;cs &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; capstone.Cs(capstone.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CS_ARCH_AARCH64&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, capstone.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CS_MODE_ARM&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; hook_code&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc, address, size, user_data):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    insn_bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uc.mem_read(address, size)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; insn &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; cs.disasm(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(insn_bytes), address):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;  [0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;address&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;:08x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;]  &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;insn.mnemonic&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;:&amp;lt;8&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;insn.op_str&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; hook_mem_invalid&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc, access_type, address, size, value, user_data):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        access_type:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        - UC_MEM_READ_UNMAPPED&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        - UC_MEM_WRITE_UNMAPPED&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        - UC_MEM_FETCH_UNMAPPED 执行未映射地址&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    access_names &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_MEM_READ_UNMAPPED&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:  &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;READ&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_MEM_WRITE_UNMAPPED&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;WRITE&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_MEM_FETCH_UNMAPPED&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;FETCH&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[!] &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;access_names[access_type]&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; @ 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;address&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;:x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; (size=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;)&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; access_type &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_MEM_FETCH_UNMAPPED&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    # 读写失败重试&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    page_addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; address &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ~0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    uc.mem_map(page_addr, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.hook_add(unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_HOOK_CODE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, hook_code)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.hook_add(unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_HOOK_MEM_UNMAPPED&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, hook_mem_invalid)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.emu_start(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BASE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BASE&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CODE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;hook 地址范围过滤&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 只监控 0x1000~0x2000 之间的代码执行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  uc.hook_add(unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_HOOK_CODE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, hook_code, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  # 只监控 0x5000 的内存写入&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  uc.hook_add(unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_HOOK_MEM_WRITE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, hook_write, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;5000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E36209&quot;&gt;  end&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;5004&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;tcg-执行原理&quot;&gt;TCG 执行原理&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   ARM64 字节码&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ┌─────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  │         QEMU TCG 前端            │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  │  ARM64 解码器 → TCG IR 中间表示   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  │                                 │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  │  ADD X2, X0, X1                 │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  │    ↓ 翻译为 TCG IR              │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  │  tcg_gen_add_i64(X2, X0, X1)   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  └─────────────────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ┌─────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  │         QEMU TCG 后端           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  │  把 TCG IR 编译为宿主机指令      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  │  （Mac 是 ARM64，直接接近        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  │   原生；x86 Mac 需要翻译）       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  └─────────────────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     翻译块 (Translation Block, TB)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     缓存起来，下次同样代码直接复用&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      CPU 执行&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;翻译块-tb&quot;&gt;翻译块 (TB)&lt;/h4&gt;
&lt;p&gt;一段连续直线执行的代码，遇到跳转就结束&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    0x1000: MOV X0, #1    ┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    0x1004: MOV X1, #2    ├── TB1（直线，无跳转）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    0x1008: ADD X2, X0, X1┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    0x100C: CBZ X2, 0x2000    ← 条件跳转，TB1 结束&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    0x1010: MOV X3, #9    ┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    0x1014: RET           ┘── TB2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    0x2000: MOV X3, #0    ┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    0x2004: RET           ┘── TB3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;Unicorn 在翻译每个 TB 时为每条指令注入了回调点（UC_HOOK_CODE），因此 hook 的性能开销在复杂循环中很显著，善用地址范围过滤精准插桩&lt;/li&gt;
&lt;li&gt;第一次执行需要翻译，比后续慢，之后命中 TB Cache 直接执行&lt;/li&gt;
&lt;li&gt;修改内存后要调用 emu_stop() 再重启：旧的 TB 可能已经缓存，强制清除缓存后重新翻译&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;反调试对抗&quot;&gt;反调试对抗&lt;/h4&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;反调试手段&lt;/th&gt;&lt;th&gt;检测方式&lt;/th&gt;&lt;th&gt;Unicorn 对策&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;ptrace&lt;/code&gt; self&lt;/td&gt;&lt;td&gt;&lt;code&gt;syscall&lt;/code&gt; 返回值&lt;/td&gt;&lt;td&gt;hook syscall 伪造返回值&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;时间检测&lt;/td&gt;&lt;td&gt;两次 &lt;code&gt;gettimeofday&lt;/code&gt; 比较&lt;/td&gt;&lt;td&gt;hook syscall，返回固定值&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;smc&lt;/td&gt;&lt;td&gt;运行时解密&lt;/td&gt;&lt;td&gt;&lt;code&gt;UC_HOOK_MEM_WRITE&lt;/code&gt; 捕获解密时机&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# syscall_smc_hook.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn.x86_const &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FAKE_TIME&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1700000000&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; # 伪造时间戳&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# SMC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CODE_START&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CODE_END&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;5000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;decrypted_regions &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn.Uc(unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARCH_X86&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_MODE_64&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; hook_syscall&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc, user_data):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    rax &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uc.reg_read(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_X86_REG_RAX&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; rax &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 96&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# gettimeofday (Linux x86_64)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        timeval_ptr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uc.reg_read(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_X86_REG_RDI&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; struct&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        uc.mem_write(timeval_ptr, struct.pack(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&amp;lt;QQ&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FAKE_TIME&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        uc.reg_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_X86_REG_RAX&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 返回 0 = 成功&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    elif&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; rax &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 101&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# ptrace&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        uc.reg_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_X86_REG_RAX&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFFFFFFFFFF&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 返回 -1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    elif&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; rax &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 60&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# exit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        uc.emu_stop()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; hook_code_write&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc, access, address, size, value, user_data):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; CODE_START&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; address &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; CODE_END&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        data &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc.mem_read(address, size))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[SMC] 代码段 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;address&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;:x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; 被写入: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;data.hex()&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        decrypted_regions.append((address, size))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.hook_add(unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_HOOK_INSN&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, hook_syscall, unicorn.x86_const.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_X86_INS_SYSCALL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.hook_add(unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_HOOK_MEM_WRITE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, hook_code_write, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CODE_START&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CODE_END&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;小练习&quot;&gt;小练习&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn.arm64_const &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; keystone &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;code &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;loop:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    LDRB W3, [X0, X1]     &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    EOR  W3, W3, W2       &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    STRB W3, [X0, X1]     &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    ADD  X1, X1, #1       &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    CMP  X1, #8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    B.LT loop             &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ks &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Ks(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;KS_ARCH_ARM64&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, keystone.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;KS_MODE_LITTLE_ENDIAN&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    encoding, count &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ks.asm(code)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    CODE&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(encoding))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;except&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; keystone.KsError &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; e:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;ERROR: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    CODE&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;([&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;03&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;68&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;61&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;63&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;02&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4a&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;03&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;68&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;21&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;21&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;04&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;91&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;6b&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;ff&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;ff&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;54&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CODE_BASE&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BUF_BASE&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;STACK&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;buf_data &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; b&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;HELLO!!!&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn.Uc(unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARCH_ARM64&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_MODE_ARM&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.mem_map(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CODE_BASE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.mem_map(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BUF_BASE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.mem_map(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;STACK&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.mem_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CODE_BASE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CODE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.mem_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BUF_BASE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, buf_data)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.reg_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_X0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BUF_BASE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.reg_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_X1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.reg_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_X2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;55&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; hook_code&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc, access, address, size, value, user_data):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; BUF_BASE&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; address &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; BUF_BASE&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        idx &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; address &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; BUF_BASE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;    buf[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;idx&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;] = 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;value &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FF&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;:02x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{chr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(value &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FF&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 32&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (value &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FF&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 127&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;.&apos;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;)&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.hook_add(unicorn.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_HOOK_MEM_WRITE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, hook_code)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc.emu_start(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CODE_BASE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CODE_BASE&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CODE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;result &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc.mem_read(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BUF_BASE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;result: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;result.hex()&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;result&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;了解一下 ADRP (Form PC-Raelative Address to Page)：&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;X&lt;/mi&gt;&lt;mn&gt;25&lt;/mn&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mtext&gt;PC&lt;/mtext&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;&amp;amp;&lt;/mi&gt;&lt;mo&gt;∼&lt;/mo&gt;&lt;mtext&gt;0xFFF&lt;/mtext&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mtext&gt;immediate&lt;/mtext&gt;&lt;mo&gt;≪&lt;/mo&gt;&lt;mn&gt;12&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;X25 = (\text{PC} \&amp;amp; \sim \text{0xFFF}) + (\text{immediate} \ll 12)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;此处 &lt;code&gt;#off_212C70@PAGE&lt;/code&gt; (immediate) 即目标数据与当前指令页边界的页偏移&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将当前指令所在地址（PC）的低 12 位清零，即对齐到 4KB 页边界&lt;/li&gt;
&lt;li&gt;把指令中给出的立即数左移 12 位，结果相加放入目标寄存器&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;google 会说 ADRP 常与 ADD/LDR 搭配使用&lt;/p&gt;
&lt;p&gt;利用页表的特性来设计位位置无关代码：ADRP 跨大步找到目标数据所在的 4KB 页面，再用 ADD/LDR 跨小步，加上页内偏移定位到字节&lt;/p&gt;
&lt;p&gt;闲得没事算一下，ai 一直算不对&lt;/p&gt;
&lt;p&gt;机器码 79 08 00 F0，大端 F0 00 08 79 = 11110000000000000000100001111001&lt;/p&gt;
&lt;p&gt;ADRP 标准编码格式：&lt;/p&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;位范围&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;31&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;30:29&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;28:24&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;23:5&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;4:0&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;含义&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;op&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;immlo&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;Fixed&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;immhi&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;Rd&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;ADRP 特征值&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;(立即数低位)&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;&lt;strong&gt;10000&lt;/strong&gt;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;(立即数高位)&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;(目标寄存器)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;immlo = 11 = 3&lt;/p&gt;
&lt;p&gt;immhi = 0000000000001000011 = 67&lt;/p&gt;
&lt;p&gt;pc = 0x1031a0&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; immlo &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; immhi &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 67&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; imm &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (immhi &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; immlo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; imm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;271&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; hex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((pc &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ~0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFF&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (imm &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 12&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;0x212000&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;IDA 中的符号 &lt;code&gt;#off_212C70@PAGE&lt;/code&gt; 表示 212C70 的高位，即页边界，&lt;code&gt;#off_212C70@PAGEOFF&lt;/code&gt; 表示低位，即页内偏移，原来 IDA 里面的 &lt;code&gt;ADRP X25, #off_212C70@PAGE&lt;/code&gt; 直接当成赋值语句就好了&lt;/p&gt;
&lt;h2 id=&quot;混淆模式&quot;&gt;混淆模式&lt;/h2&gt;
&lt;p&gt;有如下的混淆&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;asm&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;CMP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;             X19, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOV&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;             W9, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0x40&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; ; &apos;@&apos;         ; X9 = 0x40&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOV&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;             W10, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0x38&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; ; &apos;8&apos;        ; X10 = 0x38&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;ADRP            X25, #off_212C70@PAGE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;CSEL            X9, X10, X9, EQ         &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; if X19 == 0 then X9 = X10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;ADD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;             X25, X25, #off_212C70@PAGEOFF &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; X25 = 0x212C70&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LDR             X8, [X25,X9]            &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; X8 = qword[X25 + X9]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOV&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;             W9, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0xFE53&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;             ; X9 = 0xFE53&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOV&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;             W10, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0x82B4&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;            ; X10 = 0x82B4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;CSEL            X9, X10, X9, EQ         &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; if X19 == 0 then X9 = X10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;SUB&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;             X8, X8, X9              &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; X8 = X8 - X9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;BR              X8                      &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; 跳转到X8&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;0x212C70 是一个函数表，在代码里面就是 X25。X9 是函数表内的偏移，根据 X19 的值决定偏移的值，共两种情况&lt;/p&gt;
&lt;p&gt;但是为什么偏移算完之后那么大，完全不在表里面了，有点反直觉&lt;/p&gt;
&lt;p&gt;这样的函数反编译之后大概长这样，修复后是一个巨大的函数&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;void __fastcall sub_103168(__int64 a1, __int64 a2)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  __int64 v2; // x9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  __int64 v3; // x8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  __int64 v4; // x9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  _ReadStatusReg(TPIDR_EL0);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  v2 = 64;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  if ( !a2 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    v2 = 56;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  v3 = *(__int64 *)((char *)&amp;amp;off_212C70 + v2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  v4 = 65107;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  if ( !a2 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    v4 = 33460;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  __asm { BR              X8 }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;下面还有大量这样类似模式的连续的间接跳转。因为 X25 复用所以有点不一样&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;__int64 sub_103258()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  __int64 v0; // x25&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  __int64 v1; // x26&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  __int64 v2; // x29&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  __int64 v3; // x0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  __int64 v4; // x8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  __int64 v5; // x8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  __int64 v6; // x9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  v3 = sub_1500BC(v2 - 96);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  if ( (v1 | 0x2B355CD000000000uLL) &amp;gt;= 0x3CCCE95800000000LL )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    v4 = 48;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    v4 = 0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  v5 = *(_QWORD *)(v0 + v4);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  v6 = 49525;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  if ( (v1 | 0x2B355CD000000000uLL) &amp;lt; 0x3CCCE95800000000LL )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    v6 = 216;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  return ((__int64 (__fastcall *)(__int64))(v5 - v6))(v3);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以及存在这样的单分支跳转&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;asm&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:00000000000FEA1C 9B &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;08&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 00&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; F0 7B &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;47&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; 3C &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;91&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                       ADRL            X27, unk_211F11&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:00000000000FEA24 &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;81&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 08&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 00&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; F0 &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;21&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; B0 3E &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;91&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                       ADRL            X1, unk_211FAC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:00000000000FEA2C &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;22&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 01&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 80&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 52&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                                   MOV&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;             W2, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:00000000000FEA30 E3 &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;03&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; 1F &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                                   MOV&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;             W3, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:00000000000FEA34 E0 &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;03&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1B&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; AA                                   &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOV&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;             X0, X27&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:00000000000FEA38 A9 9C FC &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;97&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;                                   BL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;              sub_25CDC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:00000000000FEA3C &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;88&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 82&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 41&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; F9                                   LDR             X8, [X20,#&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0x300&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:00000000000FEA40 C9 5A &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;99&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 92&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                                   MOV&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;             X9, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0xFFFFFFFFFFFF3529&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:00000000000FEA44 7F &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0B&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 00&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 39&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                                   STRB            WZR, [X27,#(byte_211F13 - &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0x211F11&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:00000000000FEA48 &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;08&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 01&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 09&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; 8B                                   &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;ADD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;             X8, X8, X9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:00000000000FEA4C &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 01&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; 1F D6                                   BR              X8&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;基址 X25 一直复用导致匹配模式计算跳转目的的思路有点麻烦，考虑模拟执行&lt;/p&gt;
&lt;p&gt;大致思路：从函数头开始执行，以翻译块为单位处理，hook_code 遇到 ret 就停止，contiune 进下一轮， bl/svc/非法内存访问 pc + 1。碰到 br 就进入回溯，找 csel, add, sub ，patch 后返回分支信息和 context（用于将后续翻译块 bfs 递归处理）。如果是双分支，选 nop 块作为跳板，插入两个分支的跳转，br X8 处 patch 成跳转到这个 chunk；如果是单分支直接在原地 patch。细节见脚本，把原脚本改了挺多。ins_help 是自己写的 capstone 中间层，不是很重要
注意文件偏移和虚拟地址映射&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; queue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; struct&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; keystone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; capstone.arm64_const &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; elftools.elf.elffile &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ELFFile&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn.arm64_const &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; unicorn &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins_help &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 1. 将函数头放到队列中&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 2. 从队列中取出一个地址，开始执行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 3. 执行时，将执行过的指令和上下文保存到指令栈中&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 4. 判断是否到达了br reg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 5. 如果到达了br reg，则从指令栈中取指令，判断计算目标地址(单分支、双分支)，patch跳转&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 6. 将目标地址放到队列中&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 7. 遇到了ret或者是bl .__stack_chk_fail 就停止&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;bin_data &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;out_data &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;runtime_data &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uc &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;ins_stack &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;block_flow &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;is_success &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;img_size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;jmp_table_start &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;144320&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;jmp_table_end &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;148000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;start_addrs &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FD0BC&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;100124&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    #0x100198,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; reg_ctou&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(regname):  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    # This function covert capstone reg name to unicorn reg const.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    regname &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; regname.lower()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; regname &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;fp&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_FP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; regname &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;lr&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_LR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; regname &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;sp&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_SP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; regname &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;xzr&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_XZR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; regname &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;wzr&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_WZR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    type1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; regname[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; type1.lower() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;w&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; or&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; type1.lower() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;x&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        idx &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(regname[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; type1.lower() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;w&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; idx &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_W0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; idx &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 29&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            elif&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; idx &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 30&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; idx &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_X0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; is_ref_ilegel_emm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(mu, ins):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.op_str.find(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;[&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.op_str.find(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;[sp&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 不是通过sp访问内存&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.operands:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op.type &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; ARM64_OP_MEM&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op.value.mem.base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                        addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mu.reg_read(reg_ctou(ins.reg_name(op.value.mem.base)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op.value.mem.index &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                        index_value &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mu.reg_read(reg_ctou(ins.reg_name(op.value.mem.index)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op.shift.value &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                            index_value &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op.shift.value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                        addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; index_value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op.value.mem.disp &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                        addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op.value.mem.disp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                    if&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; img_size: &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 访问so中的数据，允许&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                    elif&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;80000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;80000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#访问栈中的数据，允许&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                    else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 是通过sp的内存访问，允许&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; set_context&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc, regs):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; regs &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;29&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# x0 ~ x28&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        idx &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_X0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        uc.reg_write(idx, regs[i])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    uc.reg_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_FP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, regs[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;29&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# fp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    uc.reg_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_LR&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, regs[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# lr&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    uc.reg_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_SP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, regs[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;31&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# sp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; get_context&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    regs &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;29&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        idx &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_X0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        regs.append(uc.reg_read(idx))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    regs.append(uc.reg_read(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_FP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    regs.append(uc.reg_read(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_LR&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    regs.append(uc.reg_read(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_SP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; regs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; get_context_reg&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(context, reg):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_XZR&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_WZR&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_X0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_X28&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; context[reg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_X0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_W0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_W30&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; context[reg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_W0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_FP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; context[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;29&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_LR&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; context[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; UC_ARM64_REG_SP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; context[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;31&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    raise&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; KeyError&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;unsupported reg const: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (reg,))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; format_bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(data):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos; &apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.join(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;:02x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; b &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; data)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; dump_ins_stack&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(ins_stack, limit&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;[+] recent block tail:&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; addr, _, code, ins &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins_stack[&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;limit:]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;    0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\t%s\t%s\t%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            addr,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            format_bytes(code),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            ins.mnemonic,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            ins.op_str,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; create_unicorn&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    uc &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Uc(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARCH_ARM64&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_MODE_ARM&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    uc.mem_map(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;80000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    uc.mem_map(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    uc.mem_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(runtime_data))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    uc.reg_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_SP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;80000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 6&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    uc.hook_add(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_HOOK_CODE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, hook_code)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    uc.hook_add(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_HOOK_MEM_UNMAPPED&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, hook_mem_access)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; apply_patch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(addr, new_bytes):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; out_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; runtime_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    new_bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(new_bytes)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    live_bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc.mem_read(addr, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(new_bytes))) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uc &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; b&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    exec_bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(runtime_data[addr: addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(new_bytes)])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    file_bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(out_data[addr: addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(new_bytes)])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    orig_bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(bin_data[addr: addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(new_bytes)])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; live_bytes:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;live : &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; format_bytes(live_bytes))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;exec : &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; format_bytes(exec_bytes))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;file : &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; format_bytes(file_bytes))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;orig : &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; format_bytes(orig_bytes))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; live_bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; live_bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; exec_bytes:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;warning! live and exec not match at &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (addr))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; file_bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; exec_bytes:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;warning! file and exec not match at &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (addr))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    runtime_data[addr: addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(new_bytes)] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; new_bytes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    out_data[addr: addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(new_bytes)] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; new_bytes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;patch code: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x\t%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (addr, format_bytes(exec_bytes), format_bytes(new_bytes)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; branch_reach_limit&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(mnemonic):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    mnemonic &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mnemonic.lower()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mnemonic &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;b&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        # imm26 &amp;lt;&amp;lt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mnemonic.startswith(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;b&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mnemonic.startswith(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;bl&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        # imm19 &amp;lt;&amp;lt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;100000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;100000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; assemble_branch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(src, dest, mnemonic, block_base&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dest &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        raise&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; ValueError&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;branch target is None: block=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; src=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; ins=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            block_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; block_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            src,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            mnemonic,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dest &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        raise&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; ValueError&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;branch target is not 4-byte aligned: block=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; src=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; dest=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; ins=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            block_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; block_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            src,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            dest,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            mnemonic,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dest &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; img_size):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        raise&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; ValueError&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;branch target is outside image: block=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; src=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; dest=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; img_size=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; ins=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            block_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; block_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            src,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            dest,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            img_size,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            mnemonic,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    reach &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; branch_reach_limit(mnemonic)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reach &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        delta &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dest &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; src&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (reach[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; delta &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reach[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            raise&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; ValueError&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;branch target out of range: block=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; src=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; dest=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; delta=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%#x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; ins=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; limit=[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%#x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%#x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;)&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                block_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; block_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                src,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                dest,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                delta,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                mnemonic,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                reach[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                reach[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            ))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    asm &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; %s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (mnemonic, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;hex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(dest))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ks &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; keystone.Ks(keystone.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;KS_ARCH_ARM64&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, keystone.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;KS_MODE_LITTLE_ENDIAN&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ks.asm(asm, src)[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    except&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; keystone.KsError &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; exc:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        raise&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; ValueError&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;keystone failed: block=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; src=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; dest=0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; asm=`&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;` error=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            block_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; block_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            src,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            dest,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            asm,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            exc,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        )) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; exc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; get_double_branch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc, ins_stack):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    flag_br &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    flag_sub_add &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    flag_ldr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    flag_csel1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    flag_csel2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    br_reg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    op_reg1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    op_reg2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    reg2_value1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    reg2_value2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    op_reg3 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    reg3_value1&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    reg3_value2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ldr_index_scale &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    table_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    cond &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; addr, context, _, ins &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins_stack[::&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        # BR              X8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.mnemonic.lower() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;br&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; flag_br &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            flag_br &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            br_reg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].reg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        # SUB             X8, X8, X9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  flag_br &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (ins.mnemonic.lower() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;add&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; or&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.mnemonic.lower() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;sub&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].reg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; br_reg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; flag_sub_add &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].type &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].type &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                op_reg1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].reg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                op_reg2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].reg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                flag_sub_add &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        # CSEL            X9, X10, X9, EQ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; flag_sub_add &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.mnemonic.lower() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;csel&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].reg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op_reg2 \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; flag_csel1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            cond &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.op_str.split(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;, &apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            regname1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.reg_name(ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].reg)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            regname2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.reg_name(ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].reg)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            reg2_value1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; get_context_reg(context, reg_ctou(regname1))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            reg2_value2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; get_context_reg(context, reg_ctou(regname2))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            flag_csel1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        #  LDR             X8, [X25,X9]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; flag_sub_add &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.mnemonic.lower() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;ldr&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].reg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op_reg1 \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; flag_ldr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            mem_op &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.operands:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op.type &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; ARM64_OP_MEM&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    mem_op &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                    break&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            assert&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mem_op &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;not find mem operand: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x\t%s\t%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (addr, ins.mnemonic, ins.op_str)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            table_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mem_op.mem.base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                table_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; get_context_reg(context, reg_ctou(ins.reg_name(mem_op.mem.base)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mem_op.mem.disp &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                table_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mem_op.mem.disp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mem_op.mem.index &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                op_reg3 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reg_ctou(ins.reg_name(mem_op.mem.index))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mem_op.shift.value &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                ldr_index_scale &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mem_op.shift.value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            flag_ldr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        #  CSEL            X9, X10, X9, EQ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; flag_ldr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.mnemonic.lower() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;csel&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reg_ctou(ins.reg_name(ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].reg)) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op_reg3 \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; flag_csel2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            regname1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.reg_name(ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].reg)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            regname2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.reg_name(ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].reg)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            reg3_value1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; get_context_reg(context, reg_ctou(regname1))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            reg3_value2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; get_context_reg(context, reg_ctou(regname2))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            flag_csel2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; flag_csel1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; flag_csel2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        # 满足条件时走的分支&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        barr1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uc.mem_read(table_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reg3_value1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ldr_index_scale, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#直接从文件中读数据，注意内存偏移和文件偏移的转换&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        base1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; struct.unpack(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;q&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,barr1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        offset1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; base1[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reg2_value1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        # 不满足条件时走的分支&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        barr2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uc.mem_read(table_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reg3_value2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ldr_index_scale, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        base2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; struct.unpack(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;q&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,barr2)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        offset2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; base2[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reg2_value2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (offset1, offset2, get_context(uc), cond)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; get_single_branch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc, ins_stack):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    last_addr, context, _, ins &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins_stack[&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.mnemonic.lower() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;br&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (context[reg_ctou(ins.reg_name(ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].reg)) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; arm64_const.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_X0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;], get_context(uc))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; find2nop&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; jmp_table_start&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; jmp_table_end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; out_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    help&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; InsHelp()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(jmp_table_start, jmp_table_end, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        barr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; out_data[addr: addr&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ins_list &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;help&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.disasm(barr, addr, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;False&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins_list[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].mnemonic.lower() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;nop&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins_list[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].mnemonic.lower() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;nop&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; addr&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; patch_single_branch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(src, dest, block_base&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    jmp_bin &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; assemble_branch(src, dest, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;b&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, block_base)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    apply_patch(src, jmp_bin)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; patch_double_branch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc, addr, branch, block_base&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    nop_addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; find2nop(uc)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; nop_addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;no find 2 nop&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    offset1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; branch[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    offset2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; branch[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    cond &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; branch[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    # 1. 把bx reg修改成跳转到nop_addr&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    jmp1_bin &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; assemble_branch(addr, nop_addr, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;b&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, block_base)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    # 2. bcond addr1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    jmp2_bin &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; assemble_branch(nop_addr, offset1, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;b&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; cond, block_base)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    #3. b addr2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    jmp3_bin &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; assemble_branch(nop_addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, offset2, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;b&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, block_base)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    apply_patch(addr, jmp1_bin)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    apply_patch(nop_addr, jmp2_bin)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    apply_patch(nop_addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, jmp3_bin)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; hook_code&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc, address, size, user_data):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins_stack&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; is_success&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; is_success &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        uc.emu_stop()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ins_help &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; InsHelp()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    code &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uc.mem_read(address, size)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ins &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(ins_help.disasm(code, address, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;False&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[+] tracing instruction&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\t%s\t%s\t%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ins.address, &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &apos; &apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.join(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;:02x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; b &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.bytes),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ins.mnemonic, &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ins.op_str))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    #记录指令和上下文环境&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ins_stack.append((address, get_context(uc), &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(code), ins))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    #遇到ret直接停止&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.mnemonic.lower() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;ret&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        #uc.reg_write(UC_ARM64_REG_PC, 0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[+] encountered ret, stop&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ins_stack.clear()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        uc.emu_stop()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    #遇到bl .__stack_chk_fail停止&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.mnemonic.lower() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;bl&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.operands[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].imm &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;237C0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        #uc.reg_write(UC_ARM64_REG_PC, 0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[+] encountered bl .__stack_chk_fail, stop&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ins_stack.clear()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        uc.emu_stop()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    #跳过bl、非栈、so本身内存访问、svc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.mnemonic.lower().startswith(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;bl&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; is_ref_ilegel_emm(uc, ins) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.mnemonic.lower().startswith(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;svc&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[+] pass instruction 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x\t%s\t%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (ins.address, ins.mnemonic, ins.op_str))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        uc.reg_write(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_PC&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, address &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; size)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins.mnemonic &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;br&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        #判断是否到达间接跳转&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        is_success &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        block_base &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins_stack[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        jmp_addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins_stack[&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ret &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; get_double_branch(uc, ins_stack)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ret &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;find double branch: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (block_base, ret[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;], ret[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                patch_double_branch(uc, jmp_addr, ret, block_base)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            except&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; ValueError&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; as&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; exc:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[+] patch double branch failed for block 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; at br 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    block_base,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    jmp_addr,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    exc,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                ))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                dump_ins_stack(ins_stack)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                is_success &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                block_flow[block_base] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ret&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            ret &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; get_single_branch(uc, ins_stack)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ret &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[+] find dest failed 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x\t%s\t%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (ins.address, ins.mnemonic, ins.op_str))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[+] unresolved block base: 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (block_base))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                dump_ins_stack(ins_stack)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                is_success &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;find single branch: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (block_base, ret[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    patch_single_branch(jmp_addr, ret[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;], block_base)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                except&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; ValueError&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; as&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; exc:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;                    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[+] patch single branch failed for block 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; at br 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                        block_base,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                        jmp_addr,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                        exc,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    ))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    dump_ins_stack(ins_stack)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    is_success &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    block_flow[block_base] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ret&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ins_stack.clear()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        uc.emu_stop()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; hook_mem_access&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uc, type, address, size, value, userdata):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    pc &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uc.reg_read(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;UC_ARM64_REG_PC&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;error! access invalid mem, pc:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; type:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; addr:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; size:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (pc, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, address, size))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    uc.emu_stop()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; load_elf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(filename):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; img_size&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; out_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    segs &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    with&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(filename, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;rb&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        out_data &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytearray&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(f.read())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; seg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ELFFile(f).iter_segments(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;PT_LOAD&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;file_off:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;, va: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;, size: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;hex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(seg[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;p_offset&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]), &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;hex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(seg[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;p_vaddr&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]), &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;hex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(seg[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;p_filesz&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            segs.append((seg[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;p_offset&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;],seg[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;p_vaddr&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;], seg[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;p_filesz&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;], seg.data()))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    img_size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; segs[&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; segs[&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    byte_arr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytearray&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;([&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; img_size)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; seg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; segs:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        vaddr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; seg[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; seg[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        data &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; seg[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        byte_arr[vaddr: vaddr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; size] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytearray&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(data)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; byte_arr&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    # with open(&apos;out.bin&apos;, &apos;wb&apos;) as f:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    #     f.write(bytearray(byte_arr))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; init_unicorn&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(file_name):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; bin_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; runtime_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    #装载一下so到内存&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    bin_data &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(load_elf(file_name))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    runtime_data &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytearray&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(bin_data)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    uc &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(addr, context):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ins_stack&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; is_success&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    global&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; block_flow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    #开始模拟执行，函数返回说明在hook_code中执行了emu_stop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ins_stack.clear()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    create_unicorn()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    set_context(uc, context)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    uc.emu_start(addr, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; is_success &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        is_success &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; block_flow[addr] &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#返回分支信息和context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; deobf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    # 初始化unicorn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    filename &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    patched_filename &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;out.so&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    init_unicorn(filename)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    q &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; queue.Queue()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; start_addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; start_addrs:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        q.put((start_addr, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 入口函数是第一个节点，放到队列中去，队列中是(地址，上下文)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    traced &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; set&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 跑过的节点&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    pending &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; set&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(start_addrs)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    while&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; q.empty(): &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#一直循环，直到队列为空&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        addr, context &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; q.get()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        pending.discard(addr)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; traced:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            continue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        traced.add(addr) &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 跑过了&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        s &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; run(addr, context) &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#开始模拟执行，找br reg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; s &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            continue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(s) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#单分支&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; s[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; traced &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; s[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; pending:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                q.put(s) &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#将分支节点放到队列中&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                pending.add(s[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#双分支&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; s[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; traced &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; s[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; pending:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                q.put((s[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;], s[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]))&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#将分支节点放到队列中&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                pending.add(s[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; s[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; traced &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; s[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; pending:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                q.put((s[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;], s[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]))&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#将分支节点放到队列中&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                pending.add(s[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    #打印代码流&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; block_flow:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(block_flow[addr]) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;hex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(addr), &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;hex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(block_flow[addr][&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]), &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;hex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(block_flow[addr][&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]), block_flow[addr][&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;hex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(addr), &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;hex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(block_flow[addr][&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    #保存patch后的so&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    with&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(patched_filename, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;wb&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        f.write(out_data)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; __name__&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;__main__&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    deobf()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content></entry><entry><id>https://nonmirror.icu/posts/gss2021-andriod/</id><title type="text">Rocket Mouse</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/gss2021-andriod/"/><updated>2026-03-12T15:49:53.000Z</updated><published>2026-03-12T15:49:53.000Z</published><summary type="text">Mono API 调用链 即有这样的关系 mono get root domain() 获取当前 Mono 运行时的根域 (Root Domain) Mono 中有 Domain（应用域）的概念，类似 .NET 的 AppDomain 根域是 Mono runtime 初始化时创建的主域 mono get root domain() 最常见的用途是在 native 代码里操作 C /Mono 程序 示例（Unity 注入常见流程）：获取根域 加载程序集 获取类 获取方法 调用 C 函数 mono image get…</summary><content type="html">&lt;h2 id=&quot;mono-api-调用链&quot;&gt;Mono API 调用链&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌──────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ mono_get_root_domain │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ 获取 Mono RootDomain  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└──────────┬───────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ mono_thread_attach      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ 将当前线程附加到 Mono      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└──────────┬──────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ mono_domain_assembly_open│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ 加载程序集 (.dll)         │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└──────────┬──────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ mono_assembly_get_image │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ 获取 MonoImage           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ (程序集元数据)            │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└──────────┬──────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ mono_class_from_name    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ 获取类 MonoClass         │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ (namespace + class)     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└──────────┬──────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ mono_class_get_method_  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ from_name               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ 获取方法 MonoMethod      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└──────────┬──────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ mono_runtime_invoke     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ 调用 C# 方法             │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└──────────┬──────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;           ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      C# Method 执行&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即有这样的关系&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Domain → Assembly → Image → Class → Method → Invoke&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;mono_get_root_domain&quot;&gt;mono_get_root_domain()&lt;/h3&gt;
&lt;p&gt;获取当前 Mono 运行时的根域 (Root Domain)&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;MonoDomain&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; domain &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; mono_get_root_domain&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;mono_thread_attach&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(domain);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mono 中有 Domain（应用域）的概念，类似 .NET 的 AppDomain&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Root Domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; ├─ Domain 1 (main app)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; ├─ Domain 2 (plugin / reload)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; └─ Domain 3 ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;根域是 Mono runtime 初始化时创建的主域&lt;/p&gt;
&lt;p&gt;mono_get_root_domain() 最常见的用途是在 native 代码里操作 C#/Mono 程序&lt;/p&gt;
&lt;p&gt;示例（Unity 注入常见流程）：获取根域 -&amp;gt; 加载程序集 -&amp;gt; 获取类 -&amp;gt; 获取方法 -&amp;gt; 调用 C# 函数&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;MonoDomain&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; domain &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; mono_get_root_domain&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;mono_thread_attach&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(domain);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;MonoAssembly&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; assembly &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; mono_assembly_open&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;hack.dll&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;MonoImage&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; image &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; mono_assembly_get_image&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(assembly);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;MonoClass&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; klass &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; mono_class_from_name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(image, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Namespace&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Class&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;MonoMethod&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; method &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; mono_class_get_method_from_name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(klass, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Start&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;mono_runtime_invoke&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(method, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;mono_image_get_table_info&quot;&gt;mono_image_get_table_info()&lt;/h3&gt;
&lt;p&gt;从 Image（即 Assembly 解析后的元数据结构）取出某一张元数据表（metadata table），用于遍历程序里的类型、方法、字段。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; MonoTableInfo&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; mono_image_get_table_info&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;MonoImage&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;image&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; table_id&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;比如可以拿 TypeDef 表的每一行，然后遍历拿到类&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;MonoImage&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; image &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; mono_assembly_get_image&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(assembly);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MonoTableInfo&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; table &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; mono_image_get_table_info&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(image, MONO_TABLE_TYPEDEF);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; rows &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; mono_table_info_get_rows&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(table);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; rows; &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    uint32_t&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; token &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MONO_TOKEN_TYPE_DEF &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    MonoClass&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; klass &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; mono_class_get&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(image, token);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;klass)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        continue&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // use klass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;字段field-与-tokenfielddef&quot;&gt;字段：field 与 token（FieldDef）&lt;/h3&gt;
&lt;p&gt;assembly 中，类、字段、方法都有自己的元数据条目，IL 指令通过写 token（类似编号）来索引字段和方法。field 则像是一种运行时句柄，指向字段的元数据条目，mono_get_fields 拿到字段，mono_field_get_token 拿到句柄，mono_field_get_name 拿到字段名，这样 token 和字段就能对应起来&lt;/p&gt;
&lt;h3 id=&quot;方法methoddef-def_tokenmemberref-ref_okenmethodspec-spec_oken&quot;&gt;方法：MethodDef (def_token)、MemberRef (ref_oken)、MethodSpec (spec_oken)&lt;/h3&gt;
&lt;p&gt;对于方法, mono_method_get_token 拿到的是定义 token (MethodDef)，下面 hook dump 出来的 IL 调用方法有些是用 MemberRef&lt;/p&gt;
&lt;p&gt;字段也有 MethodRef&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;高八位&lt;/th&gt;&lt;th&gt;Table 名&lt;/th&gt;&lt;th&gt;含义&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;0x04&lt;/td&gt;&lt;td&gt;FieldDef&lt;/td&gt;&lt;td&gt;字段&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0x06&lt;/td&gt;&lt;td&gt;MethodDef&lt;/td&gt;&lt;td&gt;方法定义&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0x0a&lt;/td&gt;&lt;td&gt;MemberRef&lt;/td&gt;&lt;td&gt;成员引用&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0x2b&lt;/td&gt;&lt;td&gt;MethodSpec&lt;/td&gt;&lt;td&gt;泛型方法实例化(带上具体类型参数后)引用&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;rocketmouse&quot;&gt;RocketMouse&lt;/h2&gt;
&lt;p&gt;Assembly-CSharp.dll 被加密了不用管，之后把 libmono.so hook 下来可以用 Mono API 拿所有信息（assembly -&amp;gt; image -&amp;gt; table -&amp;gt; fqcn -&amp;gt; methods -&amp;gt; signature)。&lt;/p&gt;
&lt;p&gt;启动游戏报 hack detected，把 android_server 和 frida-server 改个名就过了，之后尝试注入 frida 又报了，换个监听端口&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;adb&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; forward&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; tcp:28080&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; tcp:28080&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;adb&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; shell&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; su&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;/data/local/tmp/fd-sv -l 127.0.0.1:28080&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;成功注入（后面发现弹窗后再 attach 就行了…）&lt;/p&gt;
&lt;h3 id=&quot;恢复托管方法结构&quot;&gt;恢复托管方法结构&lt;/h3&gt;
&lt;p&gt;确认 libmono.so 导出表&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;nm&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -D&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; resources/lib/armeabi-v7a/libmono.so&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; rg&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; mono&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;资源非常充足，直接 hook libmono.so&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;frida&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -H&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; 127.0.0.1:28080&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -N&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; com.personal.rocketmouse&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -l&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; scripts/frida_noop.js&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[MI 6::MOU ]-&amp;gt; [*] libmono.so loaded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[*] mono thread attached&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[assembly] System&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[assembly] System.Core&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[assembly] UnityEngine.PlaymodeTestsRunner&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[assembly] UnityEngine.Networking&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[assembly] UnityEngine.UI&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[assembly] Assembly-CSharp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[*] scanning Assembly-CSharp typedef rows=8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[class] LaserScript&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] .ctor ::&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] Start ::&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] FixedUpdate ::&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[class] MouseController&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] .ctor ::&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] Start ::&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] FixedUpdate ::&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] UpdateGroundedStatus ::&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] AdjustJetpack :: bool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] OnTriggerEnter2D :: UnityEngine.Collider2D&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] HitByLaser :: UnityEngine.Collider2D    # &amp;lt;- 这里&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] CollectCoin :: UnityEngine.Collider2D&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] AdjustFootstepsAndJetpackSound :: bool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] RestartGame ::		# &amp;lt;- 这里&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] ExitToMenu ::&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[class] UIManagerScript&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  [method] CloseSettings ::&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[*] target assembly scan complete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[assembly] UnityEngine&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[assembly] mscorlib&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[*] mono scan complete&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;去找 HitByLaser 和 RestartGame，依旧 frida&lt;/p&gt;
&lt;p&gt;思路很简单：mono_get_root_domain 拿到根域 -&amp;gt; mono_assembly_get_image 拿到 Assembly-CSharp -&amp;gt; mono_class_from_name 拿到 MouseController -&amp;gt; mono_class_get_method_from_name 拿到两个方法 -&amp;gt; mono_method_get_header 拿到头 -&amp;gt; mono_method_header_get_code 拿到代码段地址 -&amp;gt; mono_disasm_code 拿到字节码 -&amp;gt; mono_compile_method JIT 成 native 入口（太方便了）&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[Remote::com.personal.rocketmouse ]-&amp;gt; [*] libmono.so loaded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[*] mono thread attached&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[*] located assembly image: Assembly-CSharp @ 0xdb3c20b0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[fields-begin] MouseController&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x04000014 jetpackForce&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x04000015 forwardMovementSpeed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x04000016 groundCheckTransform&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x04000017 groundCheckLayerMask&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x04000018 jetpack&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x04000019 coinIconTexture&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x0400001a coinCollectSound&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x0400001b jetpackAudio&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x0400001c footstepsAudio&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x0400001d parallax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x0400001e startButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x0400001f settingsButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x04000020 coinsLabel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x04000021 restartDialog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x04000022 animator&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x04000023 grounded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x04000024 dead&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0x04000025 coins&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[fields-end] MouseController&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=== MouseController.HitByLaser/1 ===&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[meta] class=0xe930ab50 method=0xe930aeb8 header=0xe3c855c0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[il] code_size=64 max_stack=3 il_ptr=0xd0223e38&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[il-bytes] 02 7b 24 00 00 04 3a 10 00 00 00 03 6f 32 00 00 0a 6f 06 00 00 2b 6f 35 00 00 0a 02 17 7d 24 00 00 04 02 7b 22 00 00 04 72 37 00 00 70 17 6f 2d 00 00 0a 02 7b 21 00 00 04 17 6f 22 00 00 0a 2a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[token-resolve-begin]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;field 0x04000021&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;field 0x04000022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;field 0x04000024&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;method 0x0a000032 -&amp;gt; UnityEngine.Component:get_gameObject () [def_token=0x06000305]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;method 0x2b000006 -&amp;gt; UnityEngine.GameObject:GetComponent&amp;lt;UnityEngine.AudioSource&amp;gt; () [def_token=0x060003f3]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;method 0x0a000035 -&amp;gt; UnityEngine.AudioSource:Play () [def_token=0x06001d12]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;method 0x0a00002d -&amp;gt; UnityEngine.Animator:SetBool (string,bool) [def_token=0x06001ed0]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;method 0x0a000022 -&amp;gt; UnityEngine.GameObject:SetActive (bool) [def_token=0x06000412]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[token-resolve-end]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[il-disasm-begin]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0000: ldarg.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0001: ldfld     0x04000024&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0006: brtrue    IL_001b&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_000b: ldarg.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_000c: callvirt  0x0a000032&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0011: callvirt  0x2b000006&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0016: callvirt  0x0a000035&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_001b: ldarg.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_001c: ldc.i4.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_001d: stfld     0x04000024&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0022: ldarg.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0023: ldfld     0x04000022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0028: ldstr     &quot;dead&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_002d: ldc.i4.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_002e: callvirt  0x0a00002d&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0033: ldarg.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0034: ldfld     0x04000021&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0039: ldc.i4.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_003a: callvirt  0x0a000022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_003f: ret&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[il-disasm-end]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[native] compiled_ptr=0xd8af6160&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[native-disasm-begin]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0000: ldarg.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0001: ldfld     0x04000024&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0006: brtrue    IL_001b&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_000b: ldarg.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_000c: callvirt  0x0a000032&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0011: callvirt  0x2b000006&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0016: callvirt  0x0a000035&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_001b: ldarg.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_001c: ldc.i4.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_001d: stfld     0x04000024&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0022: ldarg.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0023: ldfld     0x04000022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0028: ldstr     &quot;dead&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_002d: ldc.i4.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_002e: callvirt  0x0a00002d&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0033: ldarg.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0034: ldfld     0x04000021&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0039: ldc.i4.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_003a: callvirt  0x0a000022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_003f: ret&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[il-disasm-end]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[native] compiled_ptr=0xd8af6160&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[native-disasm-begin]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6160  mov ip, sp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6164  push {r6, r7, r8, fp, ip, lr}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6168  sub sp, sp, #8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af616c  mov fp, sp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6170  mov r6, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6174  mov r7, r1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6178  ldrb r0, [r6, #0x49]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af617c  cmp r0, #0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6180  bne #0xd8af61ac&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6184  mov r0, r7&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6188  ldr lr, [r7]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af618c  bl #0xd8ae75f4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6190  ldr lr, [r0]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6194  movw r8, #0x8718&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6198  movt r8, #0xb267&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af619c  bl #0xd8af6234&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61a0  mov r1, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61a4  ldr lr, [r1]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61a8  bl #0xd8af621c&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61ac  mov r0, #1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61b0  strb r0, [r6, #0x49]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61b4  ldr r3, [r6, #0x38]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61b8  mov r0, r3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61bc  movw r1, #0xc3a8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61c0  movt r1, #0xe3b1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61c4  mov r2, #1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61c8  ldr lr, [r3]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61cc  bl #0xd8af6204&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61d0  ldr r2, [r6, #0x34]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61d4  mov r0, r2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61d8  mov r1, #1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61dc  ldr lr, [r2]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61e0  bl #0xd8af61ec&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61e4  add sp, fp, #8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61e8  ldm sp, {r6, r7, r8, fp, sp, pc}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61ec  push {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, lr}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61f0  ldr r1, [pc, #8]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61f4  mov lr, pc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61f8  bx r1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af61fc  ldcge p14, c4, [r2, #0x60]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6200  ldr r7, [ip, #0]!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6204  push {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, lr}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6208  ldr r1, [pc, #8]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af620c  mov lr, pc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6210  bx r1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;lt;decode-error @ 0xd8af6214: Error: invalid instruction&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[native-disasm-end]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=== MouseController.RestartGame/0 ===&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[meta] class=0xe930ab50 method=0xe930af18 header=0xb2ecbb68&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[il] code_size=11 max_stack=8 il_ptr=0xd0223f3f&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[il-bytes] 28 3a 00 00 0a 28 3b 00 00 0a 2a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[token-resolve-begin]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;method 0x0a00003a -&amp;gt; UnityEngine.Application:get_loadedLevelName () [def_token=0x0600015b]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;method 0x0a00003b -&amp;gt; UnityEngine.Application:LoadLevel (string) [def_token=0x0600015d]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[token-resolve-end]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[il-disasm-begin]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0000: call      0x0a00003a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_0005: call      0x0a00003b&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IL_000a: ret&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[il-disasm-end]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[native] compiled_ptr=0xd8af6250&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[native-disasm-begin]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6250  mov ip, sp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6254  push {r8, fp, ip, lr}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6258  sub sp, sp, #8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af625c  mov fp, sp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6260  str r0, [fp]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6264  bl #0xd8af628c&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6268  bl #0xd8af6274&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af626c  add sp, fp, #8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6270  ldm sp, {r8, fp, sp, pc}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6274  push {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, lr}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6278  ldr r1, [pc, #8]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af627c  mov lr, pc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6280  bx r1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6284  blle #0xd984cb4c&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6288  ldr r7, [ip, #0]!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af628c  push {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, lr}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6290  ldr r1, [pc, #8]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6294  mov lr, pc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6298  bx r1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af629c  blle #0xd984ca64&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62a0  ldr r7, [ip, #0]!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62a4  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62a8  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62ac  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62b0  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62b4  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62b8  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62bc  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62c0  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62c4  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62c8  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62cc  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62d0  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62d4  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62d8  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62dc  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62e0  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62e4  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62e8  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62ec  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62f0  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62f4  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62f8  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af62fc  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6300  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6304  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af6308  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0xd8af630c  andeq r0, r0, r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[native-disasm-end]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[*] key function dump complete&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后通过 frida 动态去 patch 就可以实现无敌了。要做成打包的破解版要去看加密程序集的逻辑，先咕咕&lt;/p&gt;</content><category term="gamesec"/></entry><entry><id>https://nonmirror.icu/posts/gamesec-first-exploration/</id><title type="text">Game security first exploration</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/gamesec-first-exploration/"/><updated>2026-03-10T09:26:41.000Z</updated><published>2026-03-10T09:26:41.000Z</published><summary type="text">@source: https://learnopengl.com/Getting started/Camera 摄像机 opengl 中通过把场景往相反方向移动来模拟出摄像机 glm::lookAt x \frac{ b \pm \sqrt{b^2 4ac}}{2a} \text{LookAt} \begin{bmatrix} R x &amp; R y &amp; R z &amp; 0\\ U x &amp; U y &amp; U z &amp; 0\\ D x &amp; D y &amp; D z &amp; 0\\ 0 &amp; 0 &amp; 0 &amp; 1 \end{bmatrix} \…</summary><content type="html">&lt;p&gt;@source: &lt;a href=&quot;https://learnopengl.com/Getting-started/Camera&quot;&gt;https://learnopengl.com/Getting-started/Camera&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;摄像机&quot;&gt;摄像机&lt;/h2&gt;
&lt;p&gt;opengl 中通过把场景往相反方向移动来模拟出摄像机&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://learnopengl-cn.github.io/img/01/09/camera_axes.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;glmlookat&quot;&gt;glm::lookAt&lt;/h3&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo&gt;±&lt;/mo&gt;&lt;msqrt&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;/mrow&gt;&lt;/msqrt&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;LookAt&lt;/mtext&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mrow&gt;&lt;mo fence=&quot;true&quot;&gt;[&lt;/mo&gt;&lt;mtable rowspacing=&quot;0.16em&quot; columnalign=&quot;center center center center&quot; columnspacing=&quot;1em&quot;&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;msub&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;/msub&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;msub&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;/msub&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;msub&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;/msub&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;msub&gt;&lt;mi&gt;U&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;/msub&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;msub&gt;&lt;mi&gt;U&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;/msub&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;msub&gt;&lt;mi&gt;U&lt;/mi&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;/msub&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;msub&gt;&lt;mi&gt;D&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;/msub&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;msub&gt;&lt;mi&gt;D&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;/msub&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;msub&gt;&lt;mi&gt;D&lt;/mi&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;/msub&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;mo fence=&quot;true&quot;&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;mo&gt;⋅&lt;/mo&gt;&lt;mrow&gt;&lt;mo fence=&quot;true&quot;&gt;[&lt;/mo&gt;&lt;mtable rowspacing=&quot;0.16em&quot; columnalign=&quot;center center center center&quot; columnspacing=&quot;1em&quot;&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;P&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;P&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;P&lt;/mi&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&quot;0&quot; displaystyle=&quot;false&quot;&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;mo fence=&quot;true&quot;&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\text{LookAt}=
\begin{bmatrix}
R_x &amp;amp; R_y &amp;amp; R_z &amp;amp; 0\\
U_x &amp;amp; U_y &amp;amp; U_z &amp;amp; 0\\
D_x &amp;amp; D_y &amp;amp; D_z &amp;amp; 0\\
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1
\end{bmatrix}
\cdot
\begin{bmatrix}
1 &amp;amp; 0 &amp;amp; 0 &amp;amp; -P_x\\
0 &amp;amp; 1 &amp;amp; 0 &amp;amp; -P_y\\
0 &amp;amp; 0 &amp;amp; 1 &amp;amp; -P_z\\
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1
\end{bmatrix}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::mat4 view &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;lookAt&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    cameraPos,&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // Camera position in world space&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    cameraTarget,&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // Target point the camera is looking at&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    cameraUp&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // “Up” direction for the camera&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;lookAt 构造 &lt;code&gt;view&lt;/code&gt; 矩阵，需要三组向量，其中有这样的关系&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::vec3 cameraTarget &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;vec3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::vec3 cameraDirection &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;normalize&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(cameraPos &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; cameraTarget);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;右向量（公式中的 R）由上向量（U）和方向向量（D）正交得到&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;解释了 lookAt 的三个参数&lt;/p&gt;
&lt;p&gt;控制 cameraTarget 在 (0, 0, 0)，将 cameraPos 绕上轴（y轴；OpenGL 中 z 轴正方向从屏幕指出）旋转&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; radius &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 10.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; camX &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sin&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glfwGetTime&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; radius;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; camZ &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cos&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glfwGetTime&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; radius;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::mat4 view;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;view &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;lookAt&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;vec3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(camX, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, camZ), &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;vec3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;vec3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)); &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;video controls=&quot;&quot; playsinline=&quot;&quot; preload=&quot;metadata&quot; src=&quot;https://learnopengl-cn.github.io/img/01/09/camera_circle.mp4&quot;&gt;&lt;/video&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;cameraDirection, cameraFront 在文档里有点混淆（可能是相反的关系？），暂时不做深究&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;自由移动&quot;&gt;自由移动&lt;/h2&gt;
&lt;p&gt;为 GLFW 的键盘输入定义一个 processInput，添加检查的按键，按下按键 cameraPosition 更新，向前/向后移动把位置向量加上/减去方向向量即可，左右移动则先用叉乘创建右向量然后标准化沿着移动就可以&lt;/p&gt;
&lt;h2 id=&quot;视角移动&quot;&gt;视角移动&lt;/h2&gt;
&lt;p&gt;文档中提到的 cameraFront 被鼠标输入改变，两种欧拉角（其实总共有三种）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;俯仰角 (Pitch) 控制抬头低头&lt;/li&gt;
&lt;li&gt;偏航角 (Yaw) 控制左右转头&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;根据三角函数把两者转换成新的 front&lt;/p&gt;
&lt;h2 id=&quot;总结&quot;&gt;总结&lt;/h2&gt;
&lt;p&gt;关键值&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;view -&amp;gt; 反推玩家观察姿态
&lt;ul&gt;
&lt;li&gt;position&lt;/li&gt;
&lt;li&gt;front/direction -&amp;gt; 玩家当前视角方向&lt;/li&gt;
&lt;li&gt;up/right&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;yaw/pitch&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;为了避免将来我自己看得一头雾水，把我想到的一些记录一下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;基本认为 front 和 direction 相反&lt;/li&gt;
&lt;li&gt;由 right = normalize(cross(up, direction)) 得，right = normalize(cross(front, up))&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;渲染图元&quot;&gt;渲染图元&lt;/h2&gt;
&lt;p&gt;一个物体被画出来，涉及：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;CPU 准备顶点数据，写入 VBO
&lt;ol&gt;
&lt;li&gt;位置 position&lt;/li&gt;
&lt;li&gt;法线 normal&lt;/li&gt;
&lt;li&gt;纹理坐标 textcoord&lt;/li&gt;
&lt;li&gt;顶点颜色&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;CPU 准备索引数据，写入 EBO&lt;/li&gt;
&lt;li&gt;VAO 记录顶点属性布局&lt;/li&gt;
&lt;li&gt;CPU 激活 shader program
&lt;ol&gt;
&lt;li&gt;vertex shader：处理顶点，做坐标变换
&lt;ul&gt;
&lt;li&gt;典型计算：&lt;code&gt;gl_Position = projection * view * model * vec4(aPos, 1.0);&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;模型矩阵 &lt;code&gt;model&lt;/code&gt;，把模型局部系变换到世界系&lt;/li&gt;
&lt;li&gt;观察矩阵 &lt;code&gt;view&lt;/code&gt;，把世界系变换到相机系&lt;/li&gt;
&lt;li&gt;投影矩阵 &lt;code&gt;projection&lt;/code&gt; 做投影，准备后续光栅化流程&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;fragement shader：处理像素，决定最终颜色&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;CPU 绑定纹理&lt;/li&gt;
&lt;li&gt;CPU 计算 &lt;code&gt;model/view/projection&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;CPU 通过 uniform 把矩阵上传到 GPU
&lt;ul&gt;
&lt;li&gt;变换矩阵 &lt;code&gt;model / view / projection&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;光照参数&lt;/li&gt;
&lt;li&gt;材质参数&lt;/li&gt;
&lt;li&gt;这一步可以截获到 3D 结构&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;CPU 调用 &lt;code&gt;glDrawElements&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;GPU 按当前 &lt;code&gt;VAO/EBO/program/texture/uniform&lt;/code&gt; 执行绘制&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不难想到 glDrawElements 是绝佳的 hook 点，走到调用点时所有关键状态都已经设置好了&lt;/p&gt;
&lt;p&gt;这个接口从数组中获取数据渲染图元。&lt;/p&gt;
&lt;h2 id=&quot;游戏安全侧&quot;&gt;游戏安全侧&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;客户端游戏的图形层数据并不安全，坐标、血量、命中框、视角、骨骼矩阵，只要进入本地进程理论上都可以被攻击&lt;/li&gt;
&lt;li&gt;渲染 API 是典型的攻击面，因为它处在『业务逻辑』和『最终显示』之间&lt;/li&gt;
&lt;li&gt;一种方案是渲染层数据提取
&lt;ul&gt;
&lt;li&gt;不修改游戏逻辑&lt;/li&gt;
&lt;li&gt;不涉及网络协议&lt;/li&gt;
&lt;li&gt;只观察渲染调用现场&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;2021-腾讯游戏安全技术竞赛初赛-pc-端&quot;&gt;2021 腾讯游戏安全技术竞赛初赛 PC 端&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; __cdecl&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_4064D0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glfwInit_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glfwWindowHint_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;139266&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glfwWindowHint_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;139267&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glfwWindowHint_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;139272&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;204801&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  Window_wrapper &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glfwCreateWindow_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;600&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;XDDDDDDDDD&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Window_wrapper;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Window_wrapper )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    glfwTerminate_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glfwMakeContextCurrent_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Window_wrapper);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glfwSetFramebufferSizeCallback_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v1, framebuffer_size_callback);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glfwSetCursorPosCallback_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v1, mouse_cursor_callback);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glfwSetInputMode_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v1, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;208897&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;212995&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;load_opengl_functions&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glEnable_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2929&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  build_shader_program&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v31, v32);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455340;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_456AA0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455470;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_4554D0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455560;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455320;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_456AE0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_456A90;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455450;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455300;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455540;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_4554A0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455500;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;13&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_456A70;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_4552A0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455550;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_456A60;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;17&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_456AC0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_456A80;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;19&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455530;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_4552D0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;21&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_4554B0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;22&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455470;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;23&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455460;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;24&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455560;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;25&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455330;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;26&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_456AB0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;27&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_456A40;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;28&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455450;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;29&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_4552F0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455340;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;31&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_456AB0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_456A50;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;33&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455460;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;34&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455300;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;35&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_4552D0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;36&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_456AD0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;37&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_4554F0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_4554C0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;39&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455560;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455540;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;41&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455480;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;42&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_4554E0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;43&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_456A30;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v59[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;44&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xmmword_455520;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glGenVertexArrays_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v58);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glGenBuffers_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v54);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glBindVertexArray_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v58);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glBindBuffer_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;34962&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v54);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glBufferData_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;34962&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;720&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v59, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;35044&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glVertexAttribPointer_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;5126&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glEnableVertexAttribArray_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glVertexAttribPointer_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;5126&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glEnableVertexAttribArray_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glGenTextures_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v56);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glBindTexture_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v56);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glTexParameteri_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10242&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10497&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glTexParameteri_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10243&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10497&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glTexParameteri_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10241&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;9729&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glTexParameteri_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10240&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;9729&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  dword_465FC4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v3 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;decode_image_from_memory&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v40, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v39, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v57);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v3;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v3 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    glTexImage2D_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;6407&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;LODWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v40), v39, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;6407&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;5121&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v3);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    glGenerateMipmap_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  j___free_base&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v4);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glGenTextures_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v55);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glBindTexture_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v55);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glTexParameteri_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10242&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10497&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glTexParameteri_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10243&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10497&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glTexParameteri_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10241&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;9729&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glTexParameteri_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10240&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;9729&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v5 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;decode_image_from_memory&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v40, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v39, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v57);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v6 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v5;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v5 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    glTexImage2D_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;6407&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;LODWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v40), v39, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;6408&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;5121&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v5);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    glGenerateMipmap_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  j___free_base&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v6);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v38;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glUseProgram_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v38);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v43 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v42 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  LOBYTE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  std_string_assign_n&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;texture1&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v60 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v8 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Block;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v43 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v8 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; **&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  UniformLocation_ptr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glGetUniformLocation_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v38, v8, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glUniform1i_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(UniformLocation_ptr);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v60 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  std_string_destroy&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Block);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v43 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v42 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  LOBYTE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  std_string_assign_n&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;texture2&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v60 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v10 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Block;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v43 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v10 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; **&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v11 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glGetUniformLocation_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v38, v10, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glUniform1i_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v11);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v60 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  std_string_destroy&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Block);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glfwWindowShouldClose_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v1) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v12 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;_libm_sse2_tan_precise&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().m128_u64;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v38 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v12;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v57 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)(v12 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1.3333334&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      flt_465FBC &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glfwGetTime_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glfwGetKey_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v1, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;256&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        glfwSetWindowShouldClose_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v1, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      glClearColor_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1045220557&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1050253722&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1050253722&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1065353216&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      glClear_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;16640&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      glActiveTexture_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;33984&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      glBindTexture_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v56);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      glActiveTexture_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;33985&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      glBindTexture_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3553&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v55);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      glUseProgram_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v7);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      mat4_identity&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v38);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v44 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v57;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v45 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v40;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v47 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1082130432&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v46 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1082113638&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v48 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1102249656&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v43 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v42 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      LOBYTE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      std_string_assign_n&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;projection&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v60 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v13 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Block;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v43 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v13 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; **&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v14 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glGetUniformLocation_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v7, v13, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      glUniformMatrix4fv_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v14);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v60 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v43 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v15 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v43 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( ((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            ||&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (v16 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((_DWORD &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;), v16 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            ||&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)v16) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            ||&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)v16) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;23&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LABEL_52:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            _invalid_parameter_noinfo_noreturn&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v15 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((_DWORD &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        j_j___free_base&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v15);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v34[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;dword_464CC4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;qword_464CAC;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v34[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;dword_464CC8 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;qword_464CAC &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v34[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;dword_464CCC &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;dword_464CB4;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      build_view_matrix&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v34);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v43 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v42 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      LOBYTE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      std_string_assign_n&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;view&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v60 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v17 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Block;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v43 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v17 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; **&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v18 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glGetUniformLocation_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v7, v17, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      glUniformMatrix4fv_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v18);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v60 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v43 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v19 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v43 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( ((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            goto&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; LABEL_52&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v20 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((_DWORD &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v20 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            ||&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)v20) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            ||&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)v20) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;23&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            goto&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; LABEL_52&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v19 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((_DWORD &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        j_j___free_base&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v19);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v43 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v42 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      LOBYTE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Block[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      glBindVertexArray_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v58);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v21 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v22 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dword_46601C;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( (dword_466020 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)dword_46601C) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v33[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1065353216&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v33[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1050253722&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v33[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1056964608&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v23 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v22[v21 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v24 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v22[v21 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v53[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v22[v21];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v53[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v23;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v53[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v24;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          mat4_zero_init&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v49);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v25 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (__int128 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;build_model_translation_matrix&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v53);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v49 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v25;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v50 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v25[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v51 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v25[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v52 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v25[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v26 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (__int128 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;build_model_scale_matrix&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v33);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v37 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v36 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          LOBYTE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v35) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v49 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v50 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v26[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v51 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v26[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v52 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v26[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          std_string_assign_n&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v60 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v27 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v37 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            v27 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v35;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v28 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glGetUniformLocation_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v7, v27, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          glUniformMatrix4fv_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v28);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v60 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v37 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            v29 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v35;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v37 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;              if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( ((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; __int8)v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                goto&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; LABEL_52&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;              v30 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((_DWORD &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;              if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v30 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; v30&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &amp;lt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;v35&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; v30&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;23&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                goto&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; LABEL_52&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;              v29 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((_DWORD &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            j_j___free_base&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v29);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v37 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v36 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          LOBYTE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v35) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          glDrawArrays_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;24&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v21 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v22 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dword_46601C;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        while&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v21 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (dword_466020 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)dword_46601C) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      glfwSwapBuffers_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v1);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      glfwPollEvents_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    while&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glfwWindowShouldClose_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v1) );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glDeleteVertexArrays_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v58);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glDeleteBuffers_ptr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v54);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  glfwTerminate_wrapper&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;渲染逻辑：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;加载 shader&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;创建 VBO&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;加载两个纹理&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;设置 uniform sampler&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;texture1 -&amp;gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;texture2 -&amp;gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;每帧循环：&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	设置 projection 矩阵&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	设置 view 矩阵&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;for each object&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	设置 model 矩阵&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	glDrawElements(GL_TRIANGLES, 36)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;下面注入的 dll 劫持了摄像机，用键盘输入改 cameraPosition，并实现&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;W/S：沿 cameraFront 前后移动&lt;/li&gt;
&lt;li&gt;A/D：沿右向量 cross(cameraFront, cameraUp) 左右平移&lt;/li&gt;
&lt;li&gt;R/T：通过修改 fov，传入 projection 实现视野缩放&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;实现自由视角解锁&lt;/p&gt;
&lt;p&gt;没有 hook glDrawElements，而是 hook glUniformMatrix4fv 的参数准备点&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// @source: https://www.xuenixiang.com/thread-3160-1-1.html&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// DllMain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;stdafx.h&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 复用原程序中的 glfwGetKey_wrapper&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; RVA_glfwGetKey&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;19920&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 四个点，贴了附近的代码&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// .text:0040653D                 call    glfwCreateWindow_wrapper&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// .text:00406542                 mov     ebx, eax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; RVA_Get_p_windows_HookPoint&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;06542&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// .text:00406BD8                 sub     esp, 10h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// .text:00406BDB                 mov     [esp+474h+var_468], 3F800000h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// .text:00406BE3                 mov     [esp+474h+var_46C], 3E99999Ah&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// .text:00406BEB                 mov     [esp+474h+var_470], 3E99999Ah&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// .text:00406BF3                 mov     [esp+474h+var_474], 3E4CCCCDh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// .text:00406BFA                 call    glClearColor_ptr&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;//       if ( glfwGetKey_wrapper(v1, 256) == 1 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;//         glfwSetWindowShouldClose_wrapper(v1, 1);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;//       glClearColor_ptr(1045220557, 1050253722, 1050253722, 1065353216);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;//   ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; RVA_Key_HookPoint&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;06BDB&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 这里是接近渲染主循环每帧开头的地方，放消息钩子很合适&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// std_string_assign_n(&quot;projection&quot;, 0xAu);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// v60 = 2;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// v13 = Block;	// 覆盖这里&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// if ( v43 &amp;gt;= 0x10 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;//   v13 = (void **)Block[0];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// v14 = glGetUniformLocation_ptr(v7, v13, 1);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// glUniformMatrix4fv_ptr(v14);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; RVA_Setprojection_HookPoint&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;06CDB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 跟上面的差不多&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#define&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; RVA_SetView_HookPoint&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;06DEE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::vec3 cameraPos &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;vec3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::vec3 cameraFront &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;vec3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::vec3 cameraUp &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;vec3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; fov &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 50.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(__cdecl&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; pfnglfwGetKey)(DWORD p_windows, DWORD KeyValue);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;pfnglfwGetKey m_glfwGetKey;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;DWORD p_windows;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;HMODULE hModule_EXE;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;PVOID p_windows_HookPoint &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;PVOID p_GetKey_HookPoint &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;PVOID p_Setprojection &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;PVOID p_Setview &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::mat4 projection;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::mat4 view;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 拿到窗口句柄：目标不是找某个静态值而是主动复用原程序的输入系统，拿到窗口句柄是为了后面能够调用 glfwGetKey&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;VOID &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;NAKED&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Get_p_windows&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    STACK_FRAME_BEGIN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        __asm {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        mov&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; p_windows, eax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    STACK_FRAME_END&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        __asm {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        push p_windows_HookPoint&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ret&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 把渲染循环 hook 下来后插入对键盘的处理&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;VOID &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;NAKED&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; prcessInPut&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    STACK_FRAME_BEGIN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;m_glfwGetKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(p_windows, GLFW_KEY_W) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; GLFW_PRESS)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            cameraPos &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; cameraFront;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;m_glfwGetKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(p_windows, GLFW_KEY_S) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; GLFW_PRESS)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        cameraPos &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; cameraFront;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;m_glfwGetKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(p_windows, GLFW_KEY_A) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; GLFW_PRESS)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        cameraPos &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;normalize&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;cross&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(cameraFront, cameraUp));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;m_glfwGetKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(p_windows, GLFW_KEY_D) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; GLFW_PRESS)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        cameraPos &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;normalize&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;cross&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(cameraFront, cameraUp));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // R、V 拉视野&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;m_glfwGetKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(p_windows, GLFW_KEY_R) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; GLFW_PRESS)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        fov &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1.0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;m_glfwGetKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(p_windows, GLFW_KEY_T) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; GLFW_PRESS)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        fov &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // 用改过的 fov 计算 projection，实现视野拉近/拉远&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    view &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;lookAt&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(cameraPos, cameraFront &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; cameraPos, cameraUp);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    projection &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;perspective&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;glm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;radians&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(fov), (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;800.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;600.0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.1&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;200.0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    STACK_FRAME_END&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        __asm {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        push p_GetKey_HookPoint&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ret&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// hook uniform 的传参，修改 projection&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;VOID &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;NAKED&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Setprojection&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    __asm {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        mov&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ecx, offset projection&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        push p_Setprojection&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ret&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 同上&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;VOID &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;NAKED&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Setview&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    __asm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        mov&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ecx, offset view&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        push p_Setview&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ret&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;BOOL&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; DetourHook&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;DetourTransactionBegin&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; NO_ERROR)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        DetourAttach&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;p_windows_HookPoint, Get_p_windows);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        DetourAttach&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;p_GetKey_HookPoint, prcessInPut);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        DetourAttach&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;p_Setprojection, Setprojection);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        DetourAttach&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;p_Setview, Setview);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;DetourTransactionCommit&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; NO_ERROR)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; TRUE;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; FALSE;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;BOOL &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;APIENTRY&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; DllMain&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(HMODULE hModule,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    DWORD  ul_reason_for_call,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    LPVOID lpReserved&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    switch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (ul_reason_for_call)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    case&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; DLL_PROCESS_ATTACH:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        hModule_EXE &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; GetModuleHandle&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        m_glfwGetKey &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (pfnglfwGetKey)((DWORD)hModule_EXE &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; RVA_glfwGetKey);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        p_windows_HookPoint &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (PVOID)((DWORD)hModule_EXE &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; RVA_Get_p_windows_HookPoint);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        p_GetKey_HookPoint &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (PVOID)((DWORD)hModule_EXE &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; RVA_Key_HookPoint);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        p_Setprojection &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (PVOID)((DWORD)hModule_EXE &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; RVA_Setprojection_HookPoint);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        p_Setview &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (PVOID)((DWORD)hModule_EXE &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; RVA_SetView_HookPoint);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        DetourHook&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        break&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    case&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; DLL_THREAD_ATTACH:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        break&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    case&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; DLL_THREAD_DETACH:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        break&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    case&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; DLL_PROCESS_DETACH:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        break&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; TRUE;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;小补充&quot;&gt;小补充&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;glBindTexture(GL_TEXTURE_2D, texture1)&lt;/code&gt; 绑定第一张纹理。
纹理 ID、program ID 也常被外挂拿来辅助区分对象类别。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;glDrawArrays(GL_TRIANGLES, 0, 36)&lt;/code&gt; 实际发出绘制命令。
攻击思路也相通，都是在 draw call 边界读上下文。&lt;/li&gt;
&lt;/ol&gt;</content><category term="gamesec"/></entry><entry><id>https://nonmirror.icu/posts/alictf2026-pixelflow/</id><title type="text">Alictf2026 pixelflow</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/alictf2026-pixelflow/"/><updated>2026-02-26T05:50:26.000Z</updated><published>2026-02-26T05:50:26.000Z</published><summary type="text">c StateMachine, ezVM, Texture Render, ComputeShader kernel 工具们 Il2CppDumper ILSpy AssetRipper HlslDecompiler .NET 编译产物基本构成 编译一个项目通常得到一个可执行文件和一个 assembly .cs 源码编译成 IL 装进一个程序集（assembly），常见的形态有 .dll .exe（Windows 上的“托管 exe”） 跨平台的主体通常是 dll，运行时由 dotnet 去加载它，JIT 成本机指…</summary><content type="html">&lt;blockquote&gt;
&lt;p&gt;c# StateMachine, ezVM, Texture Render, ComputeShader kernel&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;工具们&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Perfare/Il2CppDumper/releases&quot;&gt;Il2CppDumper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/icsharpcode/ILSpy&quot;&gt;ILSpy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/AssetRipper/AssetRipper&quot;&gt;AssetRipper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/AndresTraks/HlslDecompiler&quot;&gt;HlslDecompiler&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;net-编译产物基本构成&quot;&gt;.NET 编译产物基本构成&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;编译一个项目通常得到一个可执行文件和一个 assembly&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;.cs 源码编译成 IL 装进一个程序集（assembly），常见的形态有&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.dll&lt;/li&gt;
&lt;li&gt;.exe（Windows 上的“托管 exe”）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;跨平台的主体通常是 dll，运行时由 dotnet 去加载它，JIT 成本机指令执行。元数据也会放到里面。&lt;/p&gt;
&lt;p&gt;编译得到的可执行文件通常是一个 launcher，负责：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;找到合适的 .NET runtime, *.runtimeconfig.json, *.deps.json&lt;/li&gt;
&lt;li&gt;启动并加载 assembly&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;net-逆向&quot;&gt;.NET 逆向&lt;/h2&gt;
&lt;h3 id=&quot;il元数据&quot;&gt;IL+元数据&lt;/h3&gt;
&lt;p&gt;.NET 程序通常编译成中间语言 IL，还有丰富的元数据（类型、方法签名、属性、泛型信息），分析元数据常用 dnspy、ilspy&lt;/p&gt;
&lt;h3 id=&quot;c-状态机&quot;&gt;C# 状态机&lt;/h3&gt;
&lt;p&gt;async/await 状态机本质是把一个函数切成多段，用 state 组织起来，并用回调把下一段安排在未来执行&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Task&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    var&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    await&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; SomeIO&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 伪阻塞&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    var&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; b&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; b;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;编译后形成这样的逻辑&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; FooStateMachine&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; state;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 记录状态，保证阻塞结束的运行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 需要的局部变量被提升成字段保存起来。阻塞后出现的 b 则不需要&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;	TaskAwaiter awaiter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;	TskCompletionSource&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; tcs;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 用来完成返回的 Task&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; MoveNext&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;		try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;			if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                a &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                awaiter &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; SomeIO&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;GetAwaiter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;awaiter.IsCompleted) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 若操作未完成，async 方法被挂起，调用 OnCompleted 来注册一个“续体”&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    awaiter.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;OnCompleted&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(MoveNext);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 注册回调，语义为等这个 awaiter 完成时再调用一次 MoveNext()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                awaiter.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;GetResult&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; b &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                tcs.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;SetResult&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(a &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; b);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;		} &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (Exception e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            tcs.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;SetException&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(e);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更完全的逻辑&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Task&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    A&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    await&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Bar&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    B&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 42&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Foo_d__0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; : &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;IAsyncStateMachine&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _state&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; AsyncTaskMethodBuilder&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;_builder&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    private&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; TaskAwaiter&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _awaiter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    private&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _result&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; MoveNext&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; result&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        try&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (_state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;goto&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; After&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Await0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            A&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;            // await Bar();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            var&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; awaiter&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Bar&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;GetAwaiter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;awaiter.IsCompleted)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                _state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                _awaiter &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; awaiter;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                _builder.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;AwaitUnsafeOnCompleted&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; awaiter, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        AfterAwait0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (_state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                awaiter &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _awaiter;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                _awaiter &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; default&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                _state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            awaiter.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;GetResult&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            B&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            result &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 42&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;Exception&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; ex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            _state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            _builder.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;SetException&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(ex);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        _state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        _builder.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;SetResult&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(result);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; SetStateMachine&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;IAsyncStateMachine&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _builder.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;SetStateMachine&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(sm);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;原方法 Foo() 被改写成&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;Task&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    var&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sm&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Foo_d__0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    sm._builder &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; AsyncTaskMethodBuilder&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;Create&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    sm._state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    sm._builder.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;Start&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; sm);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; sm._builder.Task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;普通 await 可能挂起 async（awaiter.IsCompleted 返回 false），也可能同步直通（awaiter.IsCompleted 返回 true，一般是缓存命中、完成态Task等），await Task.Yield() 强制在 await 处停下等待回调，制造一个必定异步的切分点&lt;/p&gt;
&lt;h3 id=&quot;反编译&quot;&gt;反编译&lt;/h3&gt;
&lt;p&gt;反编译器做语法糖重建，可能出现 async&lt;/p&gt;
&lt;h4 id=&quot;命名风格&quot;&gt;命名风格&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Controller_o&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // sizeof=0x90&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     Controller_c &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;klass;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000008&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;monitor;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000010&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     Controller_Fields fields;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000090&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Controller_c&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // sizeof=0x178&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     Il2CppClass_1 _1;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;000000B8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;static_fields;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;000000C0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     Il2CppRGCTXData &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;rgctx_data;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;000000C8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     Il2CppClass_2 _2;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000138&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     Controller_VTable vtable;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000178&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; __cppobj Controller_Fields : UnityEngine_MonoBehaviour_Fields&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // sizeof=0x80&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                                       // XREF: Controller_o/r&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000010&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; TMPro_TMP_InputField_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;InputField0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000018&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; UnityEngine_UI_Button_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Button0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000020&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; UnityEngine_ComputeShader_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Shader0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000028&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; UnityEngine_Texture2D_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Tex0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000030&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; UnityEngine_Texture2D_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Tex1;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000038&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; UnityEngine_Vector2_o tileScale;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000040&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     float&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; scrollSpeed;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000044&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     float&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; rotationDegrees;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000048&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; UnityEngine_RenderTexture_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;TexF;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000050&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; UnityEngine_Texture2D_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;TexC;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000058&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; UnityEngine_Texture2D_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;TexV;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000060&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; UnityEngine_ComputeBuffer_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Buffer0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000068&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; UnityEngine_RenderTexture_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;TexR;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000070&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     int32_t&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; K0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000074&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     int32_t&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; K1;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000078&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     int32_t&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; K2;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;0000007C&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;0000007D&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;0000007E&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;000007&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000080&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; };&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;*_o 对象实例（Object）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;*_c 类（运行时用来描述类型本身的元数据结构）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;*_Fields 实例字段区&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Controller__Check_d__18_Fields&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // sizeof=0x58&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                                       // XREF: Controller__Check_d__18_o/r&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     int32_t&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; __1__state;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000004&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000005&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000006&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000007&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000008&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; System_Runtime_CompilerServices_AsyncVoidMethodBuilder_o __t__builder;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000028&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Controller_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;__4__this;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000030&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; System_Func_byte____Task__o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_uploadFlagAsync_5__2;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000038&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; System_Func_Task__o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_runEncryptAsync_5__3;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000040&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; System_Func_Task__o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_runCheckAsync_5__4;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000048&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; System_Runtime_CompilerServices_TaskAwaiter_byte____o __u__1;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000050&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; System_Runtime_CompilerServices_TaskAwaiter_o __u__2;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000058&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; };&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Check_d__18，即 &amp;lt;Check&amp;gt;d__18，表示方法 Check 的 StateMachine type，18 为元数据序号&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Controller___Check_b__18_3_d_Fields&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // sizeof=0x30&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                                       // XREF: Controller___Check_b__18_3_d_o/r&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000000&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     int32_t&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; __1__state;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000004&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000005&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000006&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000007&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000008&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; System_Runtime_CompilerServices_AsyncTaskMethodBuilder_o __t__builder;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000020&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Controller_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;__4__this;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000028&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;     struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; System_Runtime_CompilerServices_YieldAwaitable_YieldAwaiter_o __u__1;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000029&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;0000002A&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;0000002B&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;0000002C&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;0000002D&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;0000002E&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;000002&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     // padding byte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000030&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; };&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;*&lt;em&gt;b&lt;/em&gt;_* 即 &amp;lt;Check&amp;gt;b__18_3，表示某个 lambda 被编译器提升后的一个生成方法，3 表示这是 Check 中第四个 lambda&lt;/p&gt;
&lt;h3 id=&quot;delegate&quot;&gt;Delegate&lt;/h3&gt;
&lt;p&gt;很像是一个虚调用&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;asm&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;il2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A27 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;il2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A2A &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;jz&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      short loc_7FFB93134A7F&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;il2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A2C &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     rax&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;18h&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;il2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A30 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     r8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;28h&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;il2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A34 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     rdx&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r13&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;il2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A37 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     rcx&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;40h&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;il2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A3B &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    raxil2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A27 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;il2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A2A &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;jz&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      short loc_7FFB93134A7F&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;il2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A2C &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     rax&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;18h&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;il2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A30 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     r8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;28h&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;il2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A34 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     rdx&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r13&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;il2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A37 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     rcx&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;40h&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;il2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A3B &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    rax&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;c# 中，delegate 是一种类似函数指针的类型，它指向一个静态或实例方法，当指向实例方法时还能带上一个目标对象（实例方法的 this），还能多播（multicast，&lt;code&gt;+=&lt;/code&gt; 叠加多个回调）。il2cpp 中，delegate 被写成一个堆对象（Il2CppDelegate），核心字段有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要调用的函数指针（通常不指向函数本体，而是一个wrapper，详见后文）&lt;/li&gt;
&lt;li&gt;target：实例方法需要的 this （静态委托该字段为 null）&lt;/li&gt;
&lt;li&gt;method / MethodInfo：方法元信息（反射/泛型/调试/某些调用适配需要）&lt;/li&gt;
&lt;li&gt;（多播时）invocation list：一串子 delegate&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;asm&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;	; r15 是 Il2CppDelegate*，为空就不调。相当于 if &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;jz&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      short loc_7FFB93134A7F&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     rax&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;18h&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]	&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; 从对象里取一个可执行地址&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     r8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;28h&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     rdx&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r13&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     rcx&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;40h&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    raxil2cpp:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;00007FFB93134A27 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;jz&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      short loc_7FFB93134A7F&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     rax&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;18h&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     r8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;28h&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     rdx&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r13&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     rcx&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;r15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;40h&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    rax&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;alictf-2026-pixelflow&quot;&gt;alictf 2026 pixelflow&lt;/h2&gt;
&lt;p&gt;Il2CppDumper dump 下来 Assembly-CSharp.dll 用 ilspy 看一眼&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20260223175905044&lt;/span&gt;&lt;code&gt;image-20260223175905044.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Controller 瞩目。看一眼，是 UnityEngine.MonoBehaviour 的子类。&lt;/p&gt;
&lt;h3 id=&quot;unityenginemonobehaviour&quot;&gt;UnityEngine.MonoBehaviour&lt;/h3&gt;
&lt;p&gt;挂在 GameObject 上的行为脚本的基类。有以下特点&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;必须附着在 GameObject 上&lt;/li&gt;
&lt;li&gt;不能用 new 创建（如果 new 的话不会运行生命周期函数&lt;/li&gt;
&lt;li&gt;必须通过 AddComponent&amp;lt;T&amp;gt;() 添加&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不是普通的 C# 类，而是一个由引擎托管的对象&lt;/p&gt;
&lt;h4 id=&quot;生命周期函数&quot;&gt;生命周期函数&lt;/h4&gt;
&lt;p&gt;MonoBehaviour 定义了一套由引擎自动调用的回调函数，常见的声明周期顺序是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Awake() 对象被加载时调用，用于初始化&lt;/li&gt;
&lt;li&gt;Start() 第一次启动时调用&lt;/li&gt;
&lt;li&gt;Update() 每帧调用一次&lt;/li&gt;
&lt;li&gt;LateUpdate() 在 Update 之后执行，常用于相机跟随等收尾工作&lt;/li&gt;
&lt;li&gt;FixedUpdate() 固定时间间隔调用，用于物理计算&lt;/li&gt;
&lt;li&gt;OnDestroy() 对象被销毁时调用&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;继承后&quot;&gt;继承后&lt;/h4&gt;
&lt;p&gt;继承 MonoBehaviour 后，可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;监听触发器（OnTriggerEnter）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;监听碰撞（OnCollisionEnter）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 Unity 的系统事件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;…&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此按钮绑定的逻辑和它强相关&lt;/p&gt;
&lt;h3 id=&quot;start&quot;&gt;Start()&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Controller__Start&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Controller_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MethodInfo &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;method&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  Controller_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v2;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; UnityEngine_UI_Button_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Button0;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  UnityEngine_Events_UnityEvent_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;m_OnClick;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rbx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  UnityEngine_AI_NavMesh_OnNavMeshPreUpdate_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v5;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rsi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int32_t&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Kernel;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // eax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int32_t&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v7;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // eax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int32_t&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v8;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // eax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v9;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  UnityEngine_ComputeBuffer_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v10;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rbx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  UnityEngine_ComputeBuffer_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Buffer0;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rbx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v12;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  Il2CppObject &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;object;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  Il2CppObject &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v14;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v15;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  UnityEngine_RenderTexture_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v16;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rbx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;byte_180F4C9A0 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;UnityEngine_ComputeBuffer_TypeInfo);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Method_Controller_Check__);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;int___TypeInfo);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;UnityEngine_RenderTexture_TypeInfo);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;UnityEngine_Events_UnityAction_TypeInfo);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;StringLiteral_4359);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;StringLiteral_3332);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;StringLiteral_3956);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;StringLiteral_3328);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;StringLiteral_3330);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;StringLiteral_1742);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;StringLiteral_312);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;StringLiteral_1800);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;StringLiteral_320);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;StringLiteral_1730);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    byte_180F4C9A0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // il2cpp 常见的 lazy init，把后面用到的类型信息、方法指针、字符串常量加载进来&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // 绑定回调&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  Button0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.Button0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Button0 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  m_OnClick &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Button0-&amp;gt;fields.m_OnClick;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v5 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_1800F5060&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(UnityEngine_Events_UnityAction_TypeInfo, method);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // new 一个 UnityAction 实例&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_AI_NavMesh_OnNavMeshPreUpdate___ctor&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v5, v2, Method_Controller_Check__, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 构造 UnityAction：target = this, method = Controller.Check。反编译成 navmesh 应该是类型判断错位&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;m_OnClick )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_Events_UnityEvent__AddListener&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(m_OnClick, v5, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.Shader0;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 把 UnityAction 加到按钮 onClick&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // ComputeShader: 查三个 kernel (K0, K1, K2)，分别绑定 TexR/Tex0/Tex1 三张纹理&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  Kernel &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; UnityEngine_ComputeShader__FindKernel&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, StringLiteral_3328, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // -&amp;gt; K0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.Shader0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v2-&amp;gt;fields.K0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Kernel;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; UnityEngine_ComputeShader__FindKernel&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, StringLiteral_3330, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // -&amp;gt; K1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.Shader0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v2-&amp;gt;fields.K1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v7;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v8 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; UnityEngine_ComputeShader__FindKernel&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, StringLiteral_3332, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // -&amp;gt; K2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.Shader0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v2-&amp;gt;fields.K2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v8;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_ComputeShader__SetTexture_6451781712&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, v8, StringLiteral_3956, v2-&amp;gt;fields.TexR, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // SetTextuer(Shader0, K2, &quot;OutputTex&quot;, TexR); StringLiteral_3956 = OutputTex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.Shader0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_ComputeShader__SetTexture_6451781712&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, v2-&amp;gt;fields.K2, StringLiteral_1800, v2-&amp;gt;fields.Tex0, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // SetTexture(Shader0, K2, &quot;CorrectTex&quot;, Tex0); StringLiteral_1800 = CorrectTex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.Shader0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_ComputeShader__SetTexture_6451781712&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, v2-&amp;gt;fields.K2, StringLiteral_320, v2-&amp;gt;fields.Tex1, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // SetTexture(Shader0, K2, &quot;WrongTex&quot;, Tex1); StringLiteral_320 = WrongTex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v10 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_1800F5060&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(UnityEngine_ComputeBuffer_TypeInfo, v9);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // 创建 ComputeBuffer：1 个 4 字节的 Buffer，初始值 -1，绑定到 K1/K2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_ComputeBuffer___ctor&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v10, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v2-&amp;gt;fields.Buffer0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v10;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v2-&amp;gt;fields.Buffer0, v10);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  Buffer0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.Buffer0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v12 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_180156CF0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(int___TypeInfo, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v12 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v12 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 24&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_1801579E0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v12 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 32&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Buffer0 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_ComputeBuffer__SetData&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Buffer0, v12, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.Shader0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_ComputeShader__SetBuffer_6451781152&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, v2-&amp;gt;fields.K1, StringLiteral_4359, v2-&amp;gt;fields.Buffer0, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // StringLiteral_4359 = SharedState&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.Shader0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_ComputeShader__SetBuffer_6451781152&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, v2-&amp;gt;fields.K2, StringLiteral_4359, v2-&amp;gt;fields.Buffer0, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;byte_180F4C9A3 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Method_UnityEngine_Resources_Load_Texture2D___);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;StringLiteral_1408);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;StringLiteral_1380);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    byte_180F4C9A3 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // 从 Resources 加载 Texture2D,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // object = Resources.Load&amp;lt;Texture2D&amp;gt;(ciTex); v2-&amp;gt;fields.TexC = object;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // ciTex 是路径字符串&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  object &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; UnityEngine_Resources__Load_object_&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(StringLiteral_1380, Method_UnityEngine_Resources_Load_Texture2D___);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // StringLiteral = ciTex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v2-&amp;gt;fields.TexC &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; object;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v2-&amp;gt;fields.TexC, object);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v14 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; UnityEngine_Resources__Load_object_&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(StringLiteral_1408, Method_UnityEngine_Resources_Load_Texture2D___);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // StringLiteral = coTex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v2-&amp;gt;fields.TexV &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v14;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v2-&amp;gt;fields.TexV, v14);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.Shader0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_ComputeShader__SetTexture_6451781712&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, v2-&amp;gt;fields.K0, StringLiteral_1742, v2-&amp;gt;fields.TexV, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // Shader0.SetTexture(K0, CoTex, TexV); StringLiteral = CoTex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.Shader0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_ComputeShader__SetTexture_6451781712&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, v2-&amp;gt;fields.K1, StringLiteral_1730, v2-&amp;gt;fields.TexC, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // Shader0.SetTexture(K1, CiTex); StringLiteral = CiTex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // Construct RenderTexture&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // v16 = new RenderTexture(16, 1, 0, 16, 1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // v2.fields.TexF = v16&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v16 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_1800F5060&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(UnityEngine_RenderTexture_TypeInfo, v15);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_RenderTexture___ctor_6451745168&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v16, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v2-&amp;gt;fields.TexF &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v16;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v2-&amp;gt;fields.TexF, v16);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.TexF;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_RenderTexture__set_enableRandomWrite&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.TexF;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_Texture__set_filterMode&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.TexF;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    ||&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;UnityEngine_Texture__set_wrapMode&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;), (this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.TexF) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    ||&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;UnityEngine_RenderTexture__Create&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;), (this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.Shader0) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    ||&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;UnityEngine_ComputeShader__SetTexture_6451781712&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, v2-&amp;gt;fields.K0, StringLiteral_312, v2-&amp;gt;fields.TexF, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // StringLiteral = WorkTex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        (this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2-&amp;gt;fields.Shader0) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LABEL_27:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, method);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  UnityEngine_ComputeShader__SetTexture_6451781712&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this, v2-&amp;gt;fields.K1, StringLiteral_312, v2-&amp;gt;fields.TexF, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;unity-渲染链路&quot;&gt;Unity 渲染链路&lt;/h4&gt;
&lt;p&gt;图片资源导入引擎得到 Texture2D (由 ComputeShader 读取，计算完成后输出到一个 RenderTexture)&lt;/p&gt;
&lt;p&gt;ComputeBuffer (结构化数据，optional)&lt;/p&gt;
&lt;p&gt;把 Texture / Buffer 绑定到某个 kernel 的参数槽&lt;/p&gt;
&lt;p&gt;ComputeShader(kernel) 计算 Texture2D（模糊处理等）&lt;/p&gt;
&lt;p&gt;Shader 将 RenderTexture 渲染出来&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;hlsl&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// *.compute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#pragma&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; kernel BlurH&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#pragma&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; kernel BlurV&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;Texture2D&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; _Src;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;RWTexture2D&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;float4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; _Dst;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;SamplerState&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; samplerLinear;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;numthreads&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; BlurH&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uint3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; id : &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;SV_DispatchThreadID&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) { ... }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;numthreads&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; BlurV&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;uint3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; id : &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;SV_DispatchThreadID&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) { ... }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;.compute 文件里长这样，C# 与其交互：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;FindKernel(“BlurH”) 得到一个 &lt;code&gt;kernelIndex&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;SetTexture(kernelIndex, “_Src”, tex) / SetBuffer(kernelIndex, “_Particles”, buf) 绑定资源到 kernel&lt;/li&gt;
&lt;li&gt;Dispatch(kernelIndex, groupX, groupY, groupZ) 让 GPU 跑起来&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;computeshader&quot;&gt;ComputeShader&lt;/h4&gt;
&lt;p&gt;kernel 即核函数，就是一段可以被 GPU 并行执行的函数的入口&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; kernel&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; computeShader.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;FindKernel&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;CSMain&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;computeShader.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;Dispatch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(kernel, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Dispatch 的三个参数表示线程组数量，线程总数 = numthreads * Dispatch 数量&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Texture 不只是贴图，也是一个二/三维的数据容器，常见类型有&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Texture2D // 只读&lt;/li&gt;
&lt;li&gt;RWTexture2D // 可读写&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;RWTexture2D&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Result&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;numthreads&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; CSMain&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;uint3&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: SV_DispatchThreadID)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    float2&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; uv&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; id.xy &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 512.0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    Result[id.xy] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; float4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(uv, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;controllercheck&quot;&gt;Controller.Check()&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;csharp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Controller__Check&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Controller_o *this, &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; MethodInfo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; *method)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  System_Runtime_CompilerServices_AsyncVoidMethodBuilder_o&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; v3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// [rsp+20h] [rbp-88h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  Controller__Check_d__18_o&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; v4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// [rsp+40h] [rbp-68h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;byte_180F4C9A2 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Method_System_Runtime_CompilerServices_AsyncVoidMethodBuilder_Start_Controller__Check_d__18___);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    byte_180F4C9A2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  memset&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v4, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;v4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 状态机结构体清零&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v4.fields.__t__builder &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;System_Runtime_CompilerServices_AsyncVoidMethodBuilder__Create&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v3, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 创建 async void 的 builder（负责异常传播、继续执行、调度等）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v4.fields.__t__builder, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v4.fields.__4__this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 把外层 Controller 实例捕获进去（等价于 C# 中的 this 被 state machine 持有）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v4.fields.__4__this, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v4.fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 初始化 state，-1 表示尚未进入任何 await 分支&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  System_Runtime_CompilerServices_AsyncVoidMethodBuilder__Start_Controller__Check_d__18_&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v4.fields.__t__builder, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v4);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 启动状态机，内部调用 MoveNext()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个函数是一个 async void 方法的启动器（真正的逻辑在 Controller__Check_d_&lt;em&gt;18&lt;/em&gt;__），有以下特征：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用了 System.Runtime.CompilerServices.AsyncVoidMethodBuilder&lt;/li&gt;
&lt;li&gt;调用了 AsyncVoidMethodBuilder.Create()&lt;/li&gt;
&lt;li&gt;__1__state = -1&lt;/li&gt;
&lt;li&gt;AsyncVoidMethodBuilder.Start&amp;lt;TStateMachine&amp;gt;(ref builder, ref stateMachine)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AsyncVoidMethodBuilder.Start() 里面可以找到对 MoveNext() 的调用，这就是核心逻辑&lt;/p&gt;
&lt;h3 id=&quot;movenext&quot;&gt;MoveNext()&lt;/h3&gt;
&lt;p&gt;监听 Button 绑定到 Check()，做一些 kernel 的初始化和绑定&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Controller__Check_d__18__MoveNext&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Controller__Check_d__18_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MethodInfo &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;method&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  Il2CppObject &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_4__this;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v4;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rsi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v5;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  UnityEngine_UIElements_UIElementsRuntimeUtility_CreateRuntimePanelDelegate_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v6;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v7;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  UnityEngine_UIElements_GetViewDataDictionary_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v8;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v9;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  UnityEngine_UIElements_GetViewDataDictionary_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v10;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v11;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v12;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  System_Threading_Tasks_Task_TResult__o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v13;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v14;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v15;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  Il2CppObject &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Result;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v17;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v18;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; System_Func_byte____Task__o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uploadFlagAsync_5__2;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  System_Threading_Tasks_Task_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v20;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v21;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v22;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v23;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; System_Func_Task__o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;runEncryptAsync_5__3;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  System_Threading_Tasks_Task_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v25;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v26;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v27;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v28;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; System_Func_Task__o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v29;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  System_Threading_Tasks_Task_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v30;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v31;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v32;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v33;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; System_Func_Task__o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v34;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  System_Threading_Tasks_Task_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v36;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v37;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v38;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  struct&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; System_Func_Task__o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;runCheckAsync_5__4;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  System_Threading_Tasks_Task_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v40;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v41;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v42;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  UnityEngine_ComputeBuffer_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;klass;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v44;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v45;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  __int64 v46;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // rcx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  System_Runtime_CompilerServices_ConfiguredTaskAwaitable_ConfiguredTaskAwaiter_TResult__o v47;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [rsp+80h] [rbp+18h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;byte_180F4C9B1 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Method_System_Runtime_CompilerServices_AsyncVoidMethodBuilder_AwaitUnsafeOnCompleted_TaskAwaiter_byte_____Controller__Check_d__18___);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Method_System_Runtime_CompilerServices_AsyncVoidMethodBuilder_AwaitUnsafeOnCompleted_TaskAwaiter__Controller__Check_d__18___);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Method_Controller__Check_b__18_0__);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Method_Controller__Check_b__18_1__);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Method_Controller__Check_b__18_2__);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Method_Controller__Check_b__18_3__);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;System_Func_Task__TypeInfo);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;System_Func_Task_byte_____TypeInfo);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;System_Func_byte____Task__TypeInfo);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;int___TypeInfo);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Method_System_Runtime_CompilerServices_TaskAwaiter_byte____GetResult__);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Method_System_Runtime_CompilerServices_TaskAwaiter_byte____get_IsCompleted__);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Method_System_Threading_Tasks_Task_byte____GetAwaiter__);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    byte_180F4C9B1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47.fields.m_continueOnCapturedContext &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v47.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _4__this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this-&amp;gt;fields.__4__this;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  switch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( this-&amp;gt;fields.__1__state )&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;	// 第一次进入 default 分支，之后恢复对应的 await，共 6 次&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    case&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47.fields.m_continueOnCapturedContext &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this-&amp;gt;fields.__u__1.fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields.__u__1.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_13;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    case&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v47.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this-&amp;gt;fields.__u__2.fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields.__u__2.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_17;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    case&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v47.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this-&amp;gt;fields.__u__2.fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields.__u__2.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_20;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    case&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v47.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this-&amp;gt;fields.__u__2.fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields.__u__2.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_23;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    case&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v47.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this-&amp;gt;fields.__u__2.fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields.__u__2.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    case&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v47.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this-&amp;gt;fields.__u__2.fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields.__u__2.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_29;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    default&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // 创建 4 个委托（v4, v6, v8, v10）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // v4 = new Func&amp;lt;Task&amp;lt;byte[]&amp;gt;&amp;gt;(_4__this, Check_b__18_0);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_1800F5060&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(System_Func_Task_byte_____TypeInfo, method);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      UnityEngine_UIElements_GetViewDataDictionary___ctor&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v4, _4__this, Method_Controller__Check_b__18_0__, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 编译成 UIElements 依旧是类型判断错位&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // v6 = new Func&amp;lt;byte[], Task&amp;gt;(_4__this, Check_b__18_1);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v6 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_1800F5060&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(System_Func_byte____Task__TypeInfo, v5);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      UnityEngine_UIElements_UIElementsRuntimeUtility_CreateRuntimePanelDelegate___ctor&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v6,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        _4__this,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Method_Controller__Check_b__18_1__,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields._uploadFlagAsync_5__2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v6;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;fields._uploadFlagAsync_5__2, v6);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // v8 = new Func&amp;lt;Task&amp;gt;(_4__this, Check_b__18_2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v8 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_1800F5060&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(System_Func_Task__TypeInfo, v7);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      UnityEngine_UIElements_GetViewDataDictionary___ctor&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v8, _4__this, Method_Controller__Check_b__18_2__, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields._runEncryptAsync_5__3 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v8;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;fields._runEncryptAsync_5__3, v8);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // v10 = new Func&amp;lt;Task&amp;gt;(_4__this, Check_b__18_3);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v10 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_1800F5060&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(System_Func_Task__TypeInfo, v9);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      UnityEngine_UIElements_GetViewDataDictionary___ctor&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v10, _4__this, Method_Controller__Check_b__18_3__, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      this-&amp;gt;fields._runCheckAsync_5__4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v10;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;fields._runCheckAsync_5__4, v10);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // 这段 new 了一堆 Func，相当于写了一堆 lambda：&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      	/*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        var get = new Func&amp;lt;Task&amp;lt;byte[]&amp;gt;&amp;gt;(() =&amp;gt; ... );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        Func&amp;lt;byte[], Task&amp;gt; uploadFlagAsync = (bytes) =&amp;gt; ...;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        Func&amp;lt;Task&amp;gt; runEncryptAsync = () =&amp;gt; ...;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        Func&amp;lt;Task&amp;gt; runCheckAsync   = () =&amp;gt; ...;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v4 )&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 判断有没有 get 到 byte[] Result&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v12, v11);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 没 get 到抛出 nullException&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v13 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 24&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 64&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 40&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;));&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // Task&amp;lt;byte[]&amp;gt; t = v4.Invoke();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v13 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v15, v14);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47.fields.m_continueOnCapturedContext &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; System_Threading_Tasks_Task___Il2CppFullySharedGenericType___GetAwaiter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                                                   v13,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                                                   Method_System_Threading_Tasks_Task_byte____GetAwaiter__);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // awaiter = t.GetAwaiter();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;System_Runtime_CompilerServices_ConfiguredTaskAwaitable_ConfiguredTaskAwaiter___Il2CppFullySharedGenericType___get_IsCompleted&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;             &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47.fields.m_continueOnCapturedContext,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;             Method_System_Runtime_CompilerServices_TaskAwaiter_byte____get_IsCompleted__) )&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 判断 IsCompleted&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LABEL_13:&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 第一个 await&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Result &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; System_Runtime_CompilerServices_ConfiguredTaskAwaitable_ConfiguredTaskAwaiter_object___GetResult&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                   &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47.fields.m_continueOnCapturedContext,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                   Method_System_Runtime_CompilerServices_TaskAwaiter_byte____GetResult__);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 先 getResult&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( Result )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;          // 调 uploadFlagAsync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          uploadFlagAsync_5__2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this-&amp;gt;fields._uploadFlagAsync_5__2;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;uploadFlagAsync_5__2 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v17);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v20 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (uploadFlagAsync_5__2-&amp;gt;fields.invoke_impl)(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                  uploadFlagAsync_5__2-&amp;gt;fields.method_code,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                  Result,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                  uploadFlagAsync_5__2-&amp;gt;fields.method);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v20 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v22, v21);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v47.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; System_Threading_Tasks_Task__GetAwaiter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v20, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;).fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;System_Runtime_CompilerServices_ConfiguredTaskAwaitable_ConfiguredTaskAwaiter___Il2CppFullySharedGenericType___get_IsCompleted&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                  &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;                  0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            this-&amp;gt;fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            this-&amp;gt;fields.__u__2.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v47.fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields.__u__2, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            System_Runtime_CompilerServices_AsyncVoidMethodBuilder__AwaitUnsafeOnCompleted_TaskAwaiter__Controller__Check_d__18_&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;              &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields.__t__builder,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;              &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;              this,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;              Method_System_Runtime_CompilerServices_AsyncVoidMethodBuilder_AwaitUnsafeOnCompleted_TaskAwaiter__Controller__Check_d__18___);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LABEL_17:&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 第二个 await&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          System_Runtime_CompilerServices_TaskAwaiter__GetResult&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;          // 调 runEncryptAsync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          runEncryptAsync_5__3 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this-&amp;gt;fields._runEncryptAsync_5__3;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;runEncryptAsync_5__3 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v23);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v25 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (runEncryptAsync_5__3-&amp;gt;fields.invoke_impl)(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                  runEncryptAsync_5__3-&amp;gt;fields.method_code,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                  runEncryptAsync_5__3-&amp;gt;fields.method);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v25 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v27, v26);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v47.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; System_Threading_Tasks_Task__GetAwaiter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v25, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;).fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;System_Runtime_CompilerServices_ConfiguredTaskAwaitable_ConfiguredTaskAwaiter___Il2CppFullySharedGenericType___get_IsCompleted&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                  &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;                  0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            this-&amp;gt;fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            this-&amp;gt;fields.__u__2.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v47.fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields.__u__2, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            System_Runtime_CompilerServices_AsyncVoidMethodBuilder__AwaitUnsafeOnCompleted_TaskAwaiter__Controller__Check_d__18_&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;              &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields.__t__builder,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;              &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;              this,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;              Method_System_Runtime_CompilerServices_AsyncVoidMethodBuilder_AwaitUnsafeOnCompleted_TaskAwaiter__Controller__Check_d__18___);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LABEL_20:&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 第三个 await&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          System_Runtime_CompilerServices_TaskAwaiter__GetResult&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;          // 调 runEncryptAsync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v29 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this-&amp;gt;fields._runEncryptAsync_5__3;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v29 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v28);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v30 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (v29-&amp;gt;fields.invoke_impl)(v29-&amp;gt;fields.method_code, v29-&amp;gt;fields.method);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v30 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v32, v31);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v47.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; System_Threading_Tasks_Task__GetAwaiter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v30, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;).fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;System_Runtime_CompilerServices_ConfiguredTaskAwaitable_ConfiguredTaskAwaiter___Il2CppFullySharedGenericType___get_IsCompleted&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                  &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;                  0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            this-&amp;gt;fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            this-&amp;gt;fields.__u__2.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v47.fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields.__u__2, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            System_Runtime_CompilerServices_AsyncVoidMethodBuilder__AwaitUnsafeOnCompleted_TaskAwaiter__Controller__Check_d__18_&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;              &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields.__t__builder,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;              &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;              this,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;              Method_System_Runtime_CompilerServices_AsyncVoidMethodBuilder_AwaitUnsafeOnCompleted_TaskAwaiter__Controller__Check_d__18___);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LABEL_23:&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 第四个 await&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          System_Runtime_CompilerServices_TaskAwaiter__GetResult&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;          // 调 runEncryptAsync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v34 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this-&amp;gt;fields._runEncryptAsync_5__3;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v34 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v33);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v35 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (v34-&amp;gt;fields.invoke_impl)(v34-&amp;gt;fields.method_code, v34-&amp;gt;fields.method);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v35 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v37, v36);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v47.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; System_Threading_Tasks_Task__GetAwaiter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v35, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;).fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;System_Runtime_CompilerServices_ConfiguredTaskAwaitable_ConfiguredTaskAwaiter___Il2CppFullySharedGenericType___get_IsCompleted&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                  &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;                  0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            this-&amp;gt;fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            this-&amp;gt;fields.__u__2.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v47.fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields.__u__2, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            System_Runtime_CompilerServices_AsyncVoidMethodBuilder__AwaitUnsafeOnCompleted_TaskAwaiter__Controller__Check_d__18_&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;              &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields.__t__builder,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;              &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;              this,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;              Method_System_Runtime_CompilerServices_AsyncVoidMethodBuilder_AwaitUnsafeOnCompleted_TaskAwaiter__Controller__Check_d__18___);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LABEL_26:&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 第五个 await&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          System_Runtime_CompilerServices_TaskAwaiter__GetResult&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;          // 调 runCheckAsync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          runCheckAsync_5__4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this-&amp;gt;fields._runCheckAsync_5__4;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;runCheckAsync_5__4 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v38);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (runCheckAsync_5__4-&amp;gt;fields.invoke_impl)(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                  runCheckAsync_5__4-&amp;gt;fields.method_code,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                  runCheckAsync_5__4-&amp;gt;fields.method);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v40 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v42, v41);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v47.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; System_Threading_Tasks_Task__GetAwaiter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v40, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;).fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;System_Runtime_CompilerServices_ConfiguredTaskAwaitable_ConfiguredTaskAwaiter___Il2CppFullySharedGenericType___get_IsCompleted&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                  &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;                  0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            this-&amp;gt;fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            this-&amp;gt;fields.__u__2.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v47.fields.m_task;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields.__u__2, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            System_Runtime_CompilerServices_AsyncVoidMethodBuilder__AwaitUnsafeOnCompleted_TaskAwaiter__Controller__Check_d__18_&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;              &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields.__t__builder,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;              &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;              this,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;              Method_System_Runtime_CompilerServices_AsyncVoidMethodBuilder_AwaitUnsafeOnCompleted_TaskAwaiter__Controller__Check_d__18___);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LABEL_29:&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 第六个 await&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;          // 清理字段，SetResult()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          System_Runtime_CompilerServices_TaskAwaiter__GetResult&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_4__this )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v18, v17);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          klass &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; _4__this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].klass;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          v44 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_180156CF0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(int___TypeInfo, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v44 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v46, v45);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v44 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 24&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_1801579E0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v44 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 32&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;klass )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v46, v45);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;          UnityEngine_ComputeBuffer__SetData&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(klass, v44, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        this-&amp;gt;fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        this-&amp;gt;fields._uploadFlagAsync_5__2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields._uploadFlagAsync_5__2, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        this-&amp;gt;fields._runEncryptAsync_5__3 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields._runEncryptAsync_5__3, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        this-&amp;gt;fields._runCheckAsync_5__4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields._runCheckAsync_5__4, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        System_Runtime_CompilerServices_AsyncVoidMethodBuilder__SetResult&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields.__t__builder, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        this-&amp;gt;fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        this-&amp;gt;fields.__u__1.fields.m_task &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47.fields.m_continueOnCapturedContext;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields.__u__1, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        System_Runtime_CompilerServices_AsyncVoidMethodBuilder__AwaitUnsafeOnCompleted_TaskAwaiter_object___Controller__Check_d__18_&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // OnCompleted 在这里&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;this-&amp;gt;fields.__t__builder,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;          &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v47.fields.m_continueOnCapturedContext,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          this,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          Method_System_Runtime_CompilerServices_AsyncVoidMethodBuilder_AwaitUnsafeOnCompleted_TaskAwaiter_byte_____Controller__Check_d__18___);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;async-函数启动器&quot;&gt;async 函数启动器&lt;/h3&gt;
&lt;p&gt;跟进 Controller___Check_b__18_x，很常规的 async 函数启动器。分析一个&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;System_Threading_Tasks_Task_byte____o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;Controller___Check_b__18_0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Controller_o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MethodInfo &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;method&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MethodInfo &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v2;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  UnityEngine_Bounds_o v5;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [rsp+20h] [rbp-58h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  Controller___Check_b__18_0_d_o v6;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [rsp+38h] [rbp-40h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;byte_180F4C9A5 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_180157800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    byte_180F4C9A5 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 初始化栅栏&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // v6 为 StateMachine 对象&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v6.fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v6.fields.__4__this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;System_Runtime_CompilerServices_AsyncTaskMethodBuilder_byte____TypeInfo-&amp;gt;_2.cctor_finished )&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // C# 第一次用到某个类型前，CLR 会保证静态构造（.cctor）已经执行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    il2cpp_runtime_class_init&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(System_Runtime_CompilerServices_AsyncTaskMethodBuilder_byte____TypeInfo, method);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // 这段莫名其妙，应该是反编译误判&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // v6.fields.__t__builder = AsyncTaskMethodBuiler&amp;lt;byte&amp;gt;.Create();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  TMPro_TMP_Text__GetCompoundBounds&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v5,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    Method_System_Runtime_CompilerServices_AsyncTaskMethodBuilder_byte____Create__,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v6.fields.__t__builder &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v5;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v6.fields.__t__builder, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v6.fields.__4__this &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  sub_180156C70&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v6.fields.__4__this, this);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v6.fields.__1__state &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // v6.__t__builder.Start(ref v6.builder, ref v6)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // builder 启动方法&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  System_Runtime_CompilerServices_AsyncTaskMethodBuilder_object___Start_Controller___Check_b__18_0_d_&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v6.fields.__t__builder,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v6,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    Method_System_Runtime_CompilerServices_AsyncTaskMethodBuilder_byte____Start_Controller___Check_b__18_0_d___);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; System_Runtime_CompilerServices_AsyncTaskMethodBuilder_object___get_Task&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;           &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v6.fields.__t__builder,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;           Method_System_Runtime_CompilerServices_AsyncTaskMethodBuilder_byte____get_Task__);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // return v6.builder.Task 返回 Task&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;sub_180156C70 是 GC 写屏障（避免 GC 漏记引用）&lt;/p&gt;
&lt;h3 id=&quot;check-业务逻辑&quot;&gt;Check() 业务逻辑&lt;/h3&gt;
&lt;p&gt;Check_b__18_0：没有名字，就是从文本框取花括号内的文本转成 ASCII 写到 Result&lt;/p&gt;
&lt;p&gt;Check_b__18_1：uploadFlagAsync，把输入当成宽 16，高 1 的 Texture2D 写入 TexF&lt;/p&gt;
&lt;p&gt;Check_b__18_2：runEncryptAsync，就是 UnityEngine_ComputeShader__Dispatch(Shader0, _4__this-&amp;gt;fields.K0, 1, 1, 1, 0);&lt;/p&gt;
&lt;p&gt;Check_b__18_3：runCheckAsync，就是 UnityEngine_ComputeShader__Dispatch(Shader0, _4__this-&amp;gt;fields.K1, 1, 1, 1, 0);&lt;/p&gt;
&lt;h4 id=&quot;uploadflagasync&quot;&gt;uploadFlagAsync&lt;/h4&gt;
&lt;h5 id=&quot;pixel&quot;&gt;Pixel&lt;/h5&gt;
&lt;p&gt;pixel 是 Texture 里一个格子的颜色值，Texture2D 的像素通常按行排（线性索引第 i 个像素 x = i % width, y = i / width）&lt;/p&gt;
&lt;h5 id=&quot;color32&quot;&gt;Color32&lt;/h5&gt;
&lt;p&gt;Unity 由两种常用颜色结构：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Color：float 的 RGBA（0~1），精度高，性能低&lt;/li&gt;
&lt;li&gt;Color32：byte 的 RGBA（0~255），更适合像素操作&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Color32 本质就是 4 个 byte，r, g, b, a&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v9 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_180156CF0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(UnityEngine_Color32___TypeInfo, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // new 一个 Color32[16]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 16&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this-&amp;gt;fields.bytes;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 输入&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;bytes )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; LODWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(bytes-&amp;gt;max_length) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_1801579E0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(bytes, i, v8, v9);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v12 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; bytes-&amp;gt;m_Items[i];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  LOBYTE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v17) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v12;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // R: input&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v17 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  HIBYTE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v17) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // A: 255&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v9 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v9 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 24&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_1801579E0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v12, i, v8, v9);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v9 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;LL&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 32&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v17;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 把 v17 放到 Color32[16] 里面，+32 是在跳过对象头&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_1800F5060&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(UnityEngine_Texture2D_TypeInfo, v6);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // new 一个 宽 16 高 1 的 Texture2D&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;UnityEngine_Texture2D___ctor_6451756016&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v7, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;63&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;UnityEngine_Texture2D__SetPixels32_6451755632&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v7, v9, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 把 Pixel 写入纹理&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;UnityEngine_Texture2D__Apply_6451753536&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v7, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 上传到 GPU&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;TexF &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _4__this&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;fields.TexF;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 取 TexF 字段指针&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;UnityEngine_Graphics_TypeInfo&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;_2.cctor_finished )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  il2cpp_runtime_class_init&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(UnityEngine_Graphics_TypeInfo, v13);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;UnityEngine_Graphics__CopyTexture&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v7, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, TexF, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 把输入得到的 Texture copy 到 TexF&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;runcheckasync&quot;&gt;runCheckAsync&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Buffer0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _4__this&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;fields.Buffer0;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 取 ComputeBuffer（Start 里面分配的）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_180156CF0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(int___TypeInfo, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Buffer0 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;UnityEngine_ComputeBuffer__SetData&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Buffer0, v7, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 值设成 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Shader0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _4__this&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;fields.Shader0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Shader0 )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  sub_1801579F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;UnityEngine_ComputeShader__Dispatch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Shader0, _4__this&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;fields.K1, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;信息整理&quot;&gt;信息整理&lt;/h3&gt;
&lt;p&gt;K0: TexV（CoTex），TexF&lt;/p&gt;
&lt;p&gt;K1:  TexC（CiTex），TexF&lt;/p&gt;
&lt;p&gt;K2: TexR（OutputTex），Tex0（CorrectTex），Tex1（WrongTex）&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# dump_png.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; PIL&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Image&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; dump_png&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(png_path):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    img &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Image.open(png_path).convert(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;RGBA&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    w, h &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; img.size&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    px &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; img.load()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    N &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; min&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(w, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1024&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    result &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(N):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        r,g,b,a &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; px[x,&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]         &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        result.append((r,g,b,a))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i,(op,y,z,w_) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; enumerate&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(result[:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;op&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;z&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;w_&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;),&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;dump_png(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;ExportedProject/Assets/Resources/coTex.png&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;dump_png(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;ExportedProject/Assets/Resources/ciTex.png&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(0, 1, 0, 42),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(0, 2, 0, 0),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(1, 0, 2, 0),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(2, 0, 1, 0),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(3, 0, 2, 0),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(4, 0, 0, 7),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(6, 0, 2, 0),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(7, 2, 0, 0),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(6, 1, 0, 0),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(5, 2, 2, 1),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(8, 2, 0, 16),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(9, 0, 0, 247),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(10, 0, 0, 0),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(233, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(142, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(138, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(138, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(183, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(231, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(201, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(224, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(184, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(151, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(183, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(75, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(59, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(33, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(211, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;(124, 0, 0, 255),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;computeshader-1&quot;&gt;ComputeShader&lt;/h3&gt;
&lt;p&gt;AssetRipper 把 asset 搞下来，跑一下 assets2dxbc，然后 HLSLDecompiler 拿到 kernel&lt;/p&gt;
&lt;p&gt;K0 是 vm，coTex 是 opcode；K1 做校验，结果写入 Buffer；K2 根据 Buffer 渲染贴图&lt;/p&gt;
&lt;p&gt;vm dump 下来大概是&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;MOV&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   R01, &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#42&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;001&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;MOV&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   R02, &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;002&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;LDK&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   R00, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;KEY&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[R02 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;003&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;XOR&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   R00, R01&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;004&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;ROL8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  R00, (R02 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 7&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;005&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;MUL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   R00, R00, &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#7&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;006&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;ADD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   R00, R02&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;007&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;STO&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   O[R02 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;], R00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;008&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;ADD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   R01, R00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;009&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;ADDI&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  R02, R02, &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;010&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;CMPLO&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; R02, &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#16    ; flag = (R02 &amp;lt; 16)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;011&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;JLT&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;   0&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;002&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (pc&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) ; &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; flag jump&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;012&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;DB&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     ; unknown&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;逆过来&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; vm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(r_value: List[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]) -&amp;gt; List[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 42&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    Data &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; r_value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    OutVar &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 16&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i, d &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; enumerate&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Data):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        x &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (d &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        x &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (x &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 183&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        x &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ror8(x, i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 7&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        x &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; R1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        OutVar[i] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        R1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (R1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; d) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Check:&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, OutVar)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; OutVar&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;K1 的校验加了一步 TexF[i] == (TexC[i] + i) mod 256&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; __name__&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    texc &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; [(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;233&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;142&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;138&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;138&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;183&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;231&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;201&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;224&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;184&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;151&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;183&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;75&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;59&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;33&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;211&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;124&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    texc_fixed &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; [r&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i, (r,g,b,a) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; enumerate&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(texc)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    out &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; vm(vm(vm(texc_fixed)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.join(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;chr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(_) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _ &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; out))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;Check: [165, 25, 18, 163, 62, 189, 40, 59, 248, 25, 127, 183, 91, 50, 9, 119]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;Check: [217, 219, 244, 246, 250, 159, 161, 152, 107, 203, 228, 21, 213, 6, 122, 104]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;Check: [53, 104, 97, 100, 101, 114, 86, 77, 95, 82, 101, 112, 51, 97, 116, 33]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;5haderVM_Rep3at!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;alictf{5haderVM_Rep3at!}&lt;/p&gt;</content><category term="wp"/></entry><entry><id>https://nonmirror.icu/posts/%E9%99%A4%E5%A4%95/</id><title type="text">除夕</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/%E9%99%A4%E5%A4%95/"/><updated>2026-02-16T17:52:33.000Z</updated><published>2026-02-16T17:52:33.000Z</published><summary type="text">除夕夜下了小雨，县城的街上有一些车，几乎听不到扰人的烟花声，不少人家里的灯亮着。我又失眠了。</summary><content type="html">&lt;p&gt;除夕夜下了小雨，县城的街上有一些车，几乎听不到扰人的烟花声，不少人家里的灯亮着。我又失眠了。&lt;/p&gt;</content><category term="diary"/></entry><entry><id>https://nonmirror.icu/posts/boomshakalaka-3-easy-app/</id><title type="text">boomshakalaka-3 &amp;&amp; easy-app</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/boomshakalaka-3-easy-app/"/><updated>2026-02-10T11:47:45.000Z</updated><published>2026-02-10T11:47:45.000Z</published><summary type="text">这两道题都尝试动态去看了，调试过程中遇到很多这样那样的问题，过几天回过头来看居然没遇到什么阻碍，甚至忘记当初遇到什么问题了（？）这就是人生吧（？） 0ctf boomshakalaka 3 打飞机游戏 主活动可以看出 Cocos2 的 java 层一般只做初始化，通过重写 native 的组件来调用主要逻辑。 class a 用到 SharedPreferences，玩一把游戏去 /data/data/com.example.plane/shared prefs 看一眼 解码得0ctf{C0coS2d AnDro1…</summary><content type="html">&lt;p&gt;这两道题都尝试动态去看了，调试过程中遇到很多这样那样的问题，过几天回过头来看居然没遇到什么阻碍，甚至忘记当初遇到什么问题了（？）这就是人生吧（？）&lt;/p&gt;
&lt;h2 id=&quot;0ctf-boomshakalaka-3&quot;&gt;0ctf boomshakalaka-3&lt;/h2&gt;
&lt;p&gt;打飞机游戏&lt;/p&gt;
&lt;p&gt;主活动可以看出 Cocos2 的 java 层一般只做初始化，通过重写 native 的组件来调用主要逻辑。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; FirstTest&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; extends&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Cocos2dxActivity&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // org.cocos2dx.lib.Cocos2dxActivity, android.app.Activity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    protected&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; onCreate&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Bundle &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;savedInstanceState&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        super&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(savedInstanceState);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        a haha &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;flag&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        haha.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;YmF6aW5nYWFhYQ==&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        a hehe &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Cocos2dxPrefsFile&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        hehe.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;N0&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // org.cocos2dx.lib.Cocos2dxActivity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Cocos2dxGLSurfaceView &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;onCreateView&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Cocos2dxGLSurfaceView glSurfaceView &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Cocos2dxGLSurfaceView&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        a hehe &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Cocos2dxPrefsFile&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        hehe.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;MG&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        glSurfaceView.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setEGLConfigChooser&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; glSurfaceView;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    static&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        System.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;loadLibrary&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;cocos2dcpp&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;class a&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    private&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; SharedPreferences editor;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Context &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;arg1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, String &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;arg2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.editor &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; null&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.editor &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; arg1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getSharedPreferences&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(arg2, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; b&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.editor.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;edit&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;putString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;DATA&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;commit&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; String &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.editor.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;DATA&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; d&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(String &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;arg1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.editor.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;edit&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;putString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;DATA&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, String.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;valueOf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(String.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;valueOf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;())) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; arg1).&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;commit&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用到 SharedPreferences，玩一把游戏去 /data/data/com.example.plane/shared_prefs 看一眼&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;sagit:/data/data/com.example.plane/shared_prefs&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; # cat Cocos2dxPrefsFile.xml                                                                                                       &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;xml version&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;1.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; encoding&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; standalone&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;yes&apos;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; name=&quot;DATA&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;MGN0ZntDMGNvUzJkX0FuRHJvMWRfMGN0ZntDMGNvUzJkX0FuRHJvMWdz99&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;/strin&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;boolean&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; name=&quot;isHaveSaveFileXml&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; value=&quot;true&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; name=&quot;HighestScore&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; value=&quot;500&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/map&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;解码得0ctf{C0coS2d_AnDro1d_0ctf{C0coS2d。明显不对&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;MGN0ZntDMGNvUzJkX0FuRHJvMW  Rf   MGN0ZntDMGNvUzJkX0FuRHJvMW  dz99&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;观察这个东西的结构，第一个部分和第三个部分一样一样，ida 里面搜一下 Rf 和 dz99&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; __fastcall GameOverLayer::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;init&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(GameOverLayer &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v80 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;unk_EEFBEEEB;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v81 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v83 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v82 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v82 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v1) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v80 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v1) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;AF&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    ++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v1;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  while&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v3 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cocos2d::CCUserDefault::sharedUserDefault&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  sub_E137F4D8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v78, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;byte_E13D52A0, v75);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  cocos2d::CCUserDefault::getStringForKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v77, v3, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v82, v78);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_E137DDDC&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v78);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v5 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cocos2d::CCUserDefault::sharedUserDefault&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v4);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  sub_E137EF30&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v79, v77);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  sub_E137ECB4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v79, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;dz99&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  cocos2d::CCUserDefault::setStringForKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v5, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v82, v79);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在 GameOverLayer::init() 里面找到，那就是说游戏结束会把 dz99 加到 SharedPreference 里。到这里可以猜测字符片段是随游戏进行加进来的，而且显然会有一个判断对部分字符进行拦截，这个判断不难想到跟分数有关。扫一眼 setStringForKey 的 xref，找到&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;cocos2d::CCUserDefault &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;__fastcall ControlLayer::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;updateScore&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(cocos2d::CCUserDefault &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;a2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v4;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r7&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  cocos2d::CCUserDefault &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v5;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v6;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _BYTE &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v7;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v8;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v9;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v10;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v11;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v12;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v13;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v14;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v15;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v16;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v17;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  cocos2d::CCUserDefault &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v18;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+4h] [bp-50h]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _BYTE &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;v19&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+Ch] [bp-48h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _BYTE &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;v20&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+10h] [bp-44h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _BYTE &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;v21&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+14h] [bp-40h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _BYTE &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;v22&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+18h] [bp-3Ch] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _BYTE &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;v23&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+1Ch] [bp-38h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _BYTE &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;v24&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+20h] [bp-34h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _BYTE &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;v25&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+24h] [bp-30h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _BYTE &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;v26&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+28h] [bp-2Ch] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _BYTE &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;v27&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+2Ch] [bp-28h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _BYTE &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;v28&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+30h] [bp-24h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _BYTE &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;v29&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+34h] [bp-20h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _BYTE &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;v30&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+38h] [bp-1Ch] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  _BYTE &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;v31&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+3Ch] [bp-18h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  char&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; v32&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+40h] [bp-14h] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v33;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+48h] [bp-Ch] BYREF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  char&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v34;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // [sp+4Ch] [bp-8h]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  strcpy&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v32, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;data&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v34 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v18 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v33 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v33 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v2) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; v32&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[v2] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    ++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v2;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  while&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( v2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3B9ACA00&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v4 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cocos2d::CCUserDefault::sharedUserDefault&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(this);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_E137F4D8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v21, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;byte_E13D52A0, v19);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    cocos2d::CCUserDefault::getStringForKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v20, v4, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v33, v21);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v5 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_E137DDDC&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v21);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 100&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v6 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cocos2d::CCUserDefault::sharedUserDefault&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v5);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      std::operator&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&amp;lt;char&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v22, v20, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;MW&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      cocos2d::CCUserDefault::setStringForKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v6, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v33, v22);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v22;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 600&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v8 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cocos2d::CCUserDefault::sharedUserDefault&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v5);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      std::operator&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&amp;lt;char&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v23, v20, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Rf&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      cocos2d::CCUserDefault::setStringForKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v8, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v33, v23);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v23;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 700&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v9 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cocos2d::CCUserDefault::sharedUserDefault&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v5);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      std::operator&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&amp;lt;char&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v24, v20, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Rz&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      cocos2d::CCUserDefault::setStringForKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v9, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v33, v24);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v24;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v10 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cocos2d::CCUserDefault::sharedUserDefault&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v5);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      std::operator&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&amp;lt;char&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v25, v20, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Bt&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      cocos2d::CCUserDefault::setStringForKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v10, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v33, v25);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v25;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 5600&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v11 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cocos2d::CCUserDefault::sharedUserDefault&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v5);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      std::operator&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&amp;lt;char&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v26, v20, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;RV&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      cocos2d::CCUserDefault::setStringForKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v11, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v33, v26);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 9900&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v12 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cocos2d::CCUserDefault::sharedUserDefault&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v5);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      std::operator&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&amp;lt;char&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v27, v20, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;9Z&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      cocos2d::CCUserDefault::setStringForKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v12, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v33, v27);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v27;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 18000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v13 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cocos2d::CCUserDefault::sharedUserDefault&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v5);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      std::operator&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&amp;lt;char&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v28, v20, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;b1&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      cocos2d::CCUserDefault::setStringForKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v13, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v33, v28);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v28;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 88800&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v14 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cocos2d::CCUserDefault::sharedUserDefault&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v5);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      std::operator&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&amp;lt;char&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v29, v20, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Vf&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      cocos2d::CCUserDefault::setStringForKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v14, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v33, v29);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v29;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 100000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v15 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cocos2d::CCUserDefault::sharedUserDefault&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v5);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      std::operator&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&amp;lt;char&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v30, v20, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;S2&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      cocos2d::CCUserDefault::setStringForKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v15, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v33, v30);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v30;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( a2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1000000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LABEL_25:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v17 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cocos2d::CCString::createWithFormat&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, a2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v18 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 66&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 428&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v18 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 66&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v17 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 20&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; sub_E137DDDC&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v20);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v16 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; cocos2d::CCUserDefault::sharedUserDefault&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v5);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      std::operator&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&amp;lt;char&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v31, v20, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;4w&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      cocos2d::CCUserDefault::setStringForKey&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v16, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v33, v31);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v31;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    sub_E137DDDC&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v7);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    goto&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; LABEL_25;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; this;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那就做完了&lt;/p&gt;
&lt;p&gt;0ctf{C0coS2d_AnDro1d_G0mE_YoU_Kn0w?}&lt;/p&gt;
&lt;h3 id=&quot;虚调用&quot;&gt;虚调用&lt;/h3&gt;
&lt;h4 id=&quot;虚调用溯源&quot;&gt;虚调用溯源&lt;/h4&gt;
&lt;p&gt;可以猜测到这题是通过 cocos2d 组件调用核心逻辑，xref 看不到东西说明是虚调用&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;asm&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E113BC58 &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; _DWORD GameScene::init(GameScene *__hidden this)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E113BC58 EXPORT _ZN9GameScene4initEv&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E113BC58 _ZN9GameScene4initEv                    &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; DATA XREF: .data.rel.ro:`vtable for&apos;GameScene+20↓o&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E113BC58&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E113BC58 var_1C= -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0x1C&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E113BC58 var_18= -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0x18&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E113BC58 var_14= -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0x14&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E113BC58 var_10= -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0x10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E113BC58 var_8= -&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E113BC58&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E113BC58 &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; __unwind { // sub_E1392F8C&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E113BC58 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;PUSH&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {R4-R6,LR}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E113BC5A LDR     R3, =&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0x796C797C&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以这个函数为例，在 prologue 的下一句，即 LDR 下断点，断下后 LR 的值即为 caller。也可以 Stack Trace 直接看&lt;/p&gt;
&lt;h4 id=&quot;虚调用分析&quot;&gt;虚调用分析&lt;/h4&gt;
&lt;p&gt;溯源到 GameOverScene::create() 调用 GameScene::init() 的地方（E1131B68）&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;asm&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B4C &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; GameOverScene *__fastcall GameOverScene::create(GameOverScene *this, int)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B4C EXPORT _ZN13GameOverScene6createEi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B4C _ZN13GameOverScene6createEi             &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; CODE XREF: PlaneLayer::RemovePlane(void)+14↓p&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B4C &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; __unwind { // sub_E1388F8C&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B4C &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;PUSH&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {R3-R5,LR}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B4E &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R5, R0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B50 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R0, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0xEC&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                       ; unsigned int&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B52 BLX     _Znwj                           &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; operator new(uint)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B56 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R4, R0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B58 &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      _ZN13GameOverSceneC2Ev          &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; GameOverScene::GameOverScene(void)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B5C &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R3, R4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B5E ADDS    R3, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0xE8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B60 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;STR&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     R5, [R3]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B62 LDR     R3, [R4]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B64 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R0, R4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B66 LDR     R3, [R3,#&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0x18&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B68 BLX     R3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;稍微看一眼&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;asm&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;E1131B4C &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;PUSH&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {R3-R5,LR}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;E1131B4E &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R5, R0                  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; (1) R5 = arg0（可能是某个外部指针）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;E1131B50 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R0, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0xEC&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;               ; (2) 分配 0xEC 字节&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;E1131B52 BLX     _Znwj                   &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; (3) new 一个新对象，R0 = operator new(0xEC)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;E1131B56 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R4, R0                  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; (4) R4 = this（新对象地址）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;E1131B58 &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      _ZN13GameOverSceneC2Ev  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; (5) 调用 GameOverScene 构造函数（C2）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;E1131B5C &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R3, R4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;E1131B5E ADDS    R3, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0xE8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;E1131B60 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;STR&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     R5, [R3]                &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; (6) *(this+0xE8) = R5（写一个成员）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;E1131B62 LDR     R3, [R4]                &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; (7) R3 = *(this) = vptr&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;E1131B64 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R0, R4                  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; (8) R0 = this，作为成员函数第一个参数&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;E1131B66 LDR     R3, [R3,#&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0x18&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]          &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; (9) R3 = *(vptr + 0x18) = vtable[0x18/4]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;E1131B68 BLX     R3                      &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; (10) call R3(this)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那么这段就相当于&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;GameOverScene&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; obj &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; new &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;GameOverScene&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // operator new + C2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;obj&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;someMember &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; arg0;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                    // *(this+0xE8)=R5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;obj&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;vtable&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;](obj);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                       // 虚调用第 6 个槽位&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;构造函数分析&quot;&gt;构造函数分析&lt;/h4&gt;
&lt;p&gt;看一眼构造函数&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;asm&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B28 &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; void __fastcall GameOverScene::GameOverScene(GameOverScene *this)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B28 EXPORT _ZN13GameOverSceneC2Ev&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B28 _ZN13GameOverSceneC2Ev                  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; CODE XREF: GameOverScene::create(int)+C↓p&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B28 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;PUSH&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {R4,LR}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B2A &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R4, R0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B2C &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      _ZN7cocos2d7CCSceneC2Ev         &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; cocos2d::CCScene::CCScene(void)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B30 LDR     R3, =(_ZTV13GameOverScene_ptr - &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0xE1131B3A&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B32 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R2, R4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B34 ADDS    R2, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0xE4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B36 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;ADD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     R3, PC                          &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; _ZTV13GameOverScene_ptr&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B38 LDR     R3, [R3]                        &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; `vtable for&apos;GameOverScene ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B3A &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R0, R4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B3C ADDS    R3, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B3E &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;STR&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     R3, [R4]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B40 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R3, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B42 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;STR&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     R3, [R2]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B44 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;STR&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     R3, [R2,#&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B46 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;POP&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     {R4,PC}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B46 &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; End of function GameOverScene::GameOverScene(void)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B46&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B46 &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; ---------------------------------------------------------------------------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B48 off_E1131B48 DCD _ZTV13GameOverScene_ptr - &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0xE1131B3A&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B48                                         &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; DATA XREF: GameOverScene::GameOverScene(void)+8↑r&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B48 &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; } // starts at E1131ACC&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以看出来 GameOverScene 继承自 cocos2d 的 CCScene。调用完基类构造函数之后的几步：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;asm&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B30 LDR     R3, =(_ZTV13GameOverScene_ptr - &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0xE1131B3A&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B36 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;ADD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     R3, PC                          &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; _ZTV13GameOverScene_ptr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Thumb 状态下 PC = 当前指令地址 + 4&lt;/p&gt;
&lt;p&gt;因此这段相当于&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;C = (_ZTV13GameOverScene_ptr - 0xE1131B3A)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;R3 = C&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PC = E1131B36 + 4 = 0xE1131B3A&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;R3 = C + PC = _ZTV13GameOverScene_ptr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样才能正确拿到 vtable，之后写入对象头&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;asm&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B38 LDR     R3, [R3]                        &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; `vtable for&apos;GameOverScene ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B3A &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;MOVS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    R0, R4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B3C ADDS    R3, #&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;.text&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:E1131B3E &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;STR&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     R3, [R4]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;后面就是对两个字段进行清理&lt;/p&gt;
&lt;h2 id=&quot;太湖杯-easy-app&quot;&gt;太湖杯 easy-app&lt;/h2&gt;
&lt;p&gt;adb install 报错&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;Performing&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; Streamed&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; Install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;adb:&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; failed&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; to&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; easy_app.apk:&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; Failure&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; [INSTALL_PARSE_FAILED_NO_CERTIFICATES: &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;Scanning&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; Failed.:&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; No&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; signature&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; found&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; package&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; of&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; version&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; or&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; newer&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; package&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; com.example.myapplication]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;apksigner 再签一下就行&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;apksigner&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; sign&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -ks&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; ~/Downloads/my-release.keystore&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; --out&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; signed.apk&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; easy_app.apk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;魔改点主要在 base64，对部分字节进行了一个循环位移。调试找规律很容易注意到。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; reverse_check1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(output:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    Check1:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        A = input[5:21]; B = input[21:37];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        out1[i] = (ord(A[i]) &amp;amp; 0x0F) | (ord(B[i]) &amp;amp; 0xF0);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        out2[i] = (ord(A[i]) &amp;amp; 0xF0) | (ord(B[i]) &amp;amp; 0x0F);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    A &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; output[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    B &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; output[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    in1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytearray&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(A))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    in2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytearray&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(A))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(A)):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        in1[i] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (A[i] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (B[i] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        in2[i] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (A[i] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;F0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (B[i] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; in1, in2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; reverse_tea&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v0:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;bytearray&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, v1:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;bytearray&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    key &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000042&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000037&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0000002C&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00000021&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    delta &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;9E3779B9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.from_bytes(v0, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;little&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.from_bytes(v1, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;little&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    sum&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (delta &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 32&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _round &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (v1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (((v0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; key[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (v0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; sum&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ((v0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; key[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]))) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (v0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (((v1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; key[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (v1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; sum&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ((v1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; key[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]))) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        sum&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;sum&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; delta) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;FFFFFFFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v0.to_bytes(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;little&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;), v1.to_bytes(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;little&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; base64_encode&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(input_bytes: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; base64&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    base64_chars &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;abcdefghijklmnopqrstuvwxyz!@#$%^&amp;amp;*()ABCDEFGHIJKLMNOPQRSTUVWXYZ+/&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    encoded_bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; base64.b64encode(input_bytes)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    translated_str &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; encoded_bytes.decode().translate(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.maketrans(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, base64_chars))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    result &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(translated_str)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(translated_str)):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (i&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            result[i] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; translated_str[i]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            result[i] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; translated_str[i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;             &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; result&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Base64 Encode Test: &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;hex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;ord&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(h)) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; h &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; base64_encode(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;([&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BB&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;61&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;A0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;EF&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;7F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;F1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;72&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;7F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0C&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BC&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;EA&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1C&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BC&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]))])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; base64_decode&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(input_str):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; base64&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    base64_chars &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;abcdefghijklmnopqrstuvwxyz!@#$%^&amp;amp;*()ABCDEFGHIJKLMNOPQRSTUVWXYZ+/&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    output_bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytearray&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    input_bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(input_str, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    aligned_input &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(input_bytes)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(input_bytes)):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (i&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            aligned_input[i] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; input_bytes[i]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            aligned_input[i] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; input_bytes[i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; !=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    aligned_str &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(aligned_input).decode(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    decoded_bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; base64.b64decode(aligned_str.translate(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.maketrans(base64_chars, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    output_bytes.extend(decoded_bytes)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Decoded Bytes:&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, output_bytes) &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; output_bytes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; solve&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(encoded_str):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    decoded_bytes &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; base64_decode(encoded_str)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;len(decoded_bytes): &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(decoded_bytes))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(decoded_bytes)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        v0, v1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reverse_tea(decoded_bytes[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;], decoded_bytes[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        decoded_bytes[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        decoded_bytes[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;After TEA Decryption:&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, decoded_bytes)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;decoded_bytes[0]: &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;hex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(decoded_bytes[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;decoded_bytes[16]: &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;hex&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(decoded_bytes[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    result &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; reverse_check1(decoded_bytes)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; result[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; result[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;encoded_str &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;e)n*pNe%PQy!^oS(@HtkUu+Cd$#hmmK&amp;amp;ieytiWwYkIA=&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;original_input &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; solve(encoded_str)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;flag: &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, original_input)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content><category term="android"/></entry><entry><id>https://nonmirror.icu/posts/frida-b01/</id><title type="text">Frida B01</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/frida-b01/"/><updated>2026-02-07T07:01:48.000Z</updated><published>2026-02-07T07:01:48.000Z</published><summary type="text">安卓 day4 想吃蛋挞 @source: https://github.com/r0ysue/AndroidSecurityStudy/tree/master/FRIDA/B01 获取蓝牙设备 enumerateLoadedClasses() 枚举已加载的类 加个判断可以定位目标类。蓝牙相关类属于系统框架，被 zygote 预加载进进程内存，几乎所有 app 进程都能看到。 配合 Java.choose 可以拿到目标类实例。 对原文代码做了一些修改，但是本质差不多。以上脚本在安卓12下扫不到蓝牙设备，可能和注入时…</summary><content type="html">&lt;p&gt;安卓 day4
想吃蛋挞&lt;/p&gt;
&lt;p&gt;@source: &lt;a href=&quot;https://github.com/r0ysue/AndroidSecurityStudy/tree/master/FRIDA/B01&quot;&gt;https://github.com/r0ysue/AndroidSecurityStudy/tree/master/FRIDA/B01&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;获取蓝牙设备&quot;&gt;获取蓝牙设备&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;enumerateLoadedClasses()&lt;/code&gt; 枚举已加载的类&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setTimeout&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;perform&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;[*] enumerating classes...&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;enumerateLoadedClasses&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            onMatch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;_className&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] found instance of &apos;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _className &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;&apos;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            onComplete&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] class enumeration complete&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;加个判断可以定位目标类。蓝牙相关类属于系统框架，被 zygote 预加载进进程内存，几乎所有 app 进程都能看到。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setTimeout&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;perform&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;[*] enumerating classes...&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;enumerateLoadedClasses&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            onMatch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;instance&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (instance.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;.&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;bluetooth&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[-&amp;gt;]&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; instance);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            onComplete&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] class enumeration complete&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配合 Java.choose 可以拿到目标类实例。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setTimeout&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;perform&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; BluetoothDevice&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.bluetooth.BluetoothDevice&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        function&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; bluetoothDeviceInfo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;anyObj&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                // 如果不是 BluetoothDevice，先尝试 cast&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                let&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dev &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; anyObj;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (anyObj.$className &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;android.bluetooth.BluetoothDevice&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    dev &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;cast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(anyObj, BluetoothDevice); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// cast 失败会抛异常&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;    name=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dev.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;                        &quot;, address=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dev.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getAddress&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;                        &quot;, type=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dev.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getType&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;    [!] not a BluetoothDevice / cast failed: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; anyObj.$className &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot; =&amp;gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; e);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;[*] enumerating classes...&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;enumerateLoadedClasses&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            onMatch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;instance&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (instance.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;.&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;bluetooth&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[-&amp;gt;]&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; instance);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            onComplete&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] class enumeration complete&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] finding android.bluetooth.BluetoothDevice instance...&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;choose&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.bluetooth.BluetoothDevice&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            onMatch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;instance&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] android.bluetooth,BluetoothDevice&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; idx &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot; instance found&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot; :=&amp;gt; &apos;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; instance &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;&apos;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;class=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; instance.$className);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;                bluetoothDeviceInfo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(instance);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            onComplete&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] -----&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;对原文代码做了一些修改，但是本质差不多。以上脚本在安卓12下扫不到蓝牙设备，可能和注入时机有关（实例已经被gc），那么我们可以通过调用 BluetoothAdapter.getBondedDevices() 在进程中创建 BluetoothDevice 实例后马上开始扫。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setTimeout&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; () {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;perform&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; () {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; BluetoothDevice&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.bluetooth.BluetoothDevice&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; BluetoothAdapter&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.bluetooth.BluetoothAdapter&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        function&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; jtype&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; o.$className &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;typeof&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; o); } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (_) { &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; typeof&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; o; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        function&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; bluetoothDeviceInfo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;anyObj&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                // 如果不是 BluetoothDevice，先尝试 cast&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                let&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dev &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; anyObj;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (anyObj.$className &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;android.bluetooth.BluetoothDevice&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    dev &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;cast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(anyObj, BluetoothDevice); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// cast 失败会抛异常&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;    name=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dev.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;                    &quot;, address=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dev.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getAddress&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;                    &quot;, type=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dev.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getType&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;    [!] not a BluetoothDevice / cast failed: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; anyObj.$className &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot; =&amp;gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; e);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        let&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; adapter;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            adapter &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; BluetoothAdapter.getDefaultAdapter.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;overload&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(BluetoothAdapter);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] adapter = &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; adapter &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot; type=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; jtype&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(adapter));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[!] getDefaultAdapter failed: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; e);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (adapter &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; null&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[!] No Bluetooth adapter&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        let&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; bonded;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            bonded &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; adapter.getBondedDevices.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;overload&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(adapter); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// returns java.util.Set&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;            // console.log(&quot;[*] bonded = &quot; + bonded + &quot; type=&quot; + jtype(bonded));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;            // console.log(&quot;[!] getBondedDevices failed: &quot; + e);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] finding android.bluetooth.BluetoothDevice&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; idx &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot; instance...&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;choose&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.bluetooth.BluetoothDevice&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            onMatch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;instance&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] android.bluetooth,BluetoothDevice instance found&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot; :=&amp;gt; &apos;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; instance &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;&apos;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;class=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; instance.$className);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;                bluetoothDeviceInfo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(instance);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            onComplete&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; () {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] -----&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;直接 Java.choose 扫比较暴力，其实可以直接把拿到的 bonded 迭代出来。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;perform&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; () {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; jtype&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; o.$className &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;typeof&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; o); } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (_) { &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; typeof&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; o; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; bluetoothDeviceInfo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;anyObj&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // 如果不是 BluetoothDevice，先尝试 cast&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      let&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dev &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; anyObj;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (anyObj.$className &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;android.bluetooth.BluetoothDevice&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        dev &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;cast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(anyObj, BluetoothDevice); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// cast 失败会抛异常&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;    name=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dev.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;, address=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dev.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getAddress&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;, type=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dev.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getType&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;    [!] not a BluetoothDevice / cast failed: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; anyObj.$className &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot; =&amp;gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; e);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; BluetoothAdapter&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.bluetooth.BluetoothAdapter&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; BluetoothDevice&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.bluetooth.BluetoothDevice&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // 1) getDefaultAdapter (static)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; adapter;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    adapter &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; BluetoothAdapter.getDefaultAdapter.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;overload&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(BluetoothAdapter);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] adapter = &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; adapter &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot; type=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; jtype&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(adapter));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[!] getDefaultAdapter failed: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; e);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (adapter &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; null&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[!] No Bluetooth adapter&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // 2) getBondedDevices (instance)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; bonded;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    bonded &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; adapter.getBondedDevices.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;overload&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(adapter); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// returns java.util.Set&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] bonded = &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; bonded &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot; type=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; jtype&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(bonded));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[!] getBondedDevices failed: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; e);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // 3) size()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; bonded.size.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;overload&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(bonded);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] bonded size = &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[!] bonded.size() failed: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; e);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // 4) iterator + loop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; it;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    it &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; bonded.iterator.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;overload&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(bonded);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] iterator type=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; jtype&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(it));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[!] bonded.iterator() failed: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; e);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  while&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; has;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      has &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; it.hasNext.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;overload&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(it);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[!] it.hasNext() failed: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; e);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      break&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;has) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dev;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      dev &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; it.next.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;overload&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(it);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;    dev=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dev &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot; type=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; jtype&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(dev));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[!] it.next() failed: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; e);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      break&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 5) getName/getAddress（同样强制 overload 调用）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; name&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; BluetoothDevice.getName.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(dev);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; addr&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; BluetoothDevice.getAddress.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(dev);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;    name=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; name &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;, addr=&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; addr);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;    [!] getName/getAddress failed: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; e);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] finding android.bluetooth.BluetoothDevice instance...&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;非常多代码，使我的眼睛发炎。&lt;/p&gt;
&lt;h3 id=&quot;利用反射-api-枚举类内所有方法&quot;&gt;利用反射 api 枚举类内所有方法&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;perform&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; () {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    function&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; enumMethods&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;targetClass&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        var&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; hook &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(targetClass);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        var&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ownMethods &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; hook.class.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getDeclaredMethods&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        hook.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;$dispose&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 释放 wrapper 内部引用&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ownMethods;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    var&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; enumMethods&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.bluetooth.BluetoothDevice&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    a.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;forEach&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(s);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;.class 获取 Class 对象，.getDeclaredMthods() 获取所有声明的方法。&lt;/p&gt;</content><category term="android"/></entry><entry><id>https://nonmirror.icu/posts/frida-a02/</id><title type="text">Frida A02</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/frida-a02/"/><updated>2026-02-05T08:00:27.000Z</updated><published>2026-02-05T08:00:27.000Z</published><summary type="text">安卓 day3 怎么隔了这么多天？ @source: https://github.com/r0ysue/AndroidSecurityStudy/tree/master/FRIDA/A02 %E4%B8%AD%E7%BA%A7%E8%83%BD%E5%8A%9B%E8%BF%9C%E7%A8%8B%E8%B0%83%E7%94%A8 python loader frida script Java.perform(function x) 与安卓交互 var target class Java.use(&quot;com.ex…</summary><content type="html">&lt;p&gt;安卓 day3
怎么隔了这么多天？&lt;/p&gt;
&lt;p&gt;@source: &lt;a href=&quot;https://github.com/r0ysue/AndroidSecurityStudy/tree/master/FRIDA/A02#%E4%B8%AD%E7%BA%A7%E8%83%BD%E5%8A%9B%E8%BF%9C%E7%A8%8B%E8%B0%83%E7%94%A8&quot;&gt;https://github.com/r0ysue/AndroidSecurityStudy/tree/master/FRIDA/A02#%E4%B8%AD%E7%BA%A7%E8%83%BD%E5%8A%9B%E8%BF%9C%E7%A8%8B%E8%B0%83%E7%94%A8&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;python-loader&quot;&gt;python loader&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; frida, time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; on_message&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(message, data):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  	if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; message[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;type&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;error&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    		print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[!] &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; message[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;stack&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  	elif&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; message[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;type&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;send&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    		print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; message[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;payload&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  	else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    		print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(message)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 连接设备上的 frida-server&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;device &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; frida.get_usb_device()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 启动目标 app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;pid &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; device.spawn([&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.app&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;device &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; resume(pid) &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# spawn 会把进程挂起，resume 运行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;time.sleep(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 等待 app 启动&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;session &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; device.attach(pid)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 加载 js 脚本&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(s1.js) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  	script &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; session.create_script(f.read())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;script.on(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;message&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, on_message)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;script.load()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;frida-script&quot;&gt;frida script&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Java.perform(function x)&lt;/code&gt; 与安卓交互&lt;/p&gt;
&lt;p&gt;&lt;code&gt;var target_class = Java.use(&quot;com.example.app.MainActivity&quot;)&lt;/code&gt; 定位到 Java 类&lt;/p&gt;
&lt;p&gt;定位到的类可以直接用 &lt;code&gt;target_class.fun.implementation = function() {}&lt;/code&gt; 获取（修改）参数、返回值（&lt;code&gt;var ret_value = this.fun(...)&lt;/code&gt; 调用原函数并获取返回值）。如果 fun 有重载，用 &lt;code&gt;target_class.fun.overload(&quot;int&quot;, &quot;int&quot;).implementation...&lt;/code&gt; 指定&lt;/p&gt;
&lt;p&gt;需要用到 java.lang 中的类时用 &lt;code&gt;Java.use(&quot;java.lang.String&quot;).$new(&quot;My test String&quot;)&lt;/code&gt; 实例化&lt;/p&gt;
&lt;h3 id=&quot;javachoose&quot;&gt;Java.choose&lt;/h3&gt;
&lt;p&gt;类中未调用的方法没办法直接 hook，用 &lt;code&gt;Java.choose(className, callBacks)&lt;/code&gt; 拿到对象后调用。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;perform&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  	Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;choose&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.app.MainActivity&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    		onMatch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;instance&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      			console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Found instance:&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, instance);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      			console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;secret() =&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, instance.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;secret&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;      	onComplete&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          	console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Done.&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  	});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;回调语义&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;onMatch(instance)&lt;/code&gt; 每找到一个存活实例就回调一次。onMatch 里面可以调用方法、读写字段(instance.someFiled.value = 123;)、保存引用以供后续使用(saved = instance;)、控制扫描(return “stop”; // 找到一个实例就停止扫描)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;onComplete()&lt;/code&gt; 扫描结束后回调一次&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;原理&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在内存里枚举对象引用（heap enumeration / instance enumeration）&lt;/li&gt;
&lt;li&gt;判断对象是否为目标类，命中则传给 onMatch&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;rpc-remote-procedure-call&quot;&gt;RPC (Remote Procedure Call)&lt;/h3&gt;
&lt;p&gt;可以把安卓的函数导出为 python 符号，在 python 端调用&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// s3.js&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Script loaded successfully&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; callScretFun&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() { &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 导出函数&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;perform&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;choose&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.app.MainActivity&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            onMatchL &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;instance&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            	console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Found instance: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; instance);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            	console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;secret() =&amp;gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; instance.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;secret&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            onComplete&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;rpc.expoets &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    callsecretfunction: callSecretFun &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 把 callSecretFun 导出为 callsecretfunction 符号，导出名不能有大写字母和下划线&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# loader3.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; frida, time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;command &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  	command &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; input&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Enter command:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;1: Exit&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;2: Call secret function&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;choice:&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; command &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;1&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      	break&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    elif&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; command &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;2&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 调用点&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      	script.exports.callsecretfunction()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;send-recv&quot;&gt;send() recv()&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;recv&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;head&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(message.payload);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(message.nonmirror);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    message.nonmirror &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;no&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    send&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(message)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; frida&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; on_message&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(message, data):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(message)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;session &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; frida.attach(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;send.js&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    script &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; session.create_script(f.read())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;script.on(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;message&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, on_message)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;script.load()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;script.post({&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;type&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;head&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;payload&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;123&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;nonmirror&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;yes&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;123&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;yes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;{&apos;type&apos;: &apos;send&apos;, &apos;payload&apos;: {&apos;type&apos;: &apos;head&apos;, &apos;payload&apos;: 123, &apos;nonmirror&apos;: &apos;no&apos;}}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;message 格式为 json，字段用 &lt;code&gt;.&lt;/code&gt; 读写。send 的数据放在 message 的 payload 字段&lt;/p&gt;
&lt;h3 id=&quot;动态修改绕过判断的思路&quot;&gt;动态修改绕过判断的思路&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; MainActivity&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; extends&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; AppCompatActivity&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    EditText username_et;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    EditText password_et;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    TextView message_tv;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    protected&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; onCreate&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Bundle &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;savedInstanceState&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        super&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(savedInstanceState);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        setContentView&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(R.layout.activity_main);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        password_et &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (EditText) &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;findViewById&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(R.id.editText2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        username_et &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (EditText) &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;findViewById&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(R.id.editText);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        message_tv &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ((TextView) &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;findViewById&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(R.id.textView));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;findViewById&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(R.id.button).&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setOnClickListener&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; View.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;OnClickListener&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; onClick&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(View v) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (username_et.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getText&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;compareTo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;admin&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    message_tv.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setText&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;You cannot login as admin&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                // setText 模拟向服务器发送请求，即 hook 目标&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                message_tv.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setText&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Sending to the server: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Base64.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;encodeToString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((username_et.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getText&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;:&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; password_et.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getText&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()).&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getBytes&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(), Base64.DEFAULT));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;username_et, password_et 为用户输入，message_tv 为回显字符。为绕过 admin 的判断，只需要 hook &lt;code&gt;setText()&lt;/code&gt; 获取输入的用户名密码，再把用户名改成 admin 即可。中间有一些编码解码的过程，借助 loader 完成。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// s4.js&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Script loaded successfully&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;perform&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; () {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    var&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; tv_class &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.widget.TextView&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    tv_class.setText.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;overload&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;java.lang.CharSequence&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;).implementation &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;		function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;			var&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; string_to_send &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;			var&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; string_to_recv;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;			send&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(string_to_send); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 将数据(&quot;Sending to the server: &quot; + Base64.encodeToString...)发给 python&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;			recv&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;received_json_object&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;				string_to_recv &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; received_json_object.modified_data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;				console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;string_to_recv: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; string_to_recv);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;			}).&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;wait&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 收到数据之后再执行下去&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;			&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;			return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setText&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;java.lang.String&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;$new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(string_to_recv));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# loader4.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; base64&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; frida&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; on_message&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(message, payload):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;message:&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, message)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; message[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;error&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[!] &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; message.get(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;stack&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(message)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; message[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;send&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(message)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    data &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; message[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;payload&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] payload:&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, data)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    b64_str &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; data.rsplit(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;:&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].strip()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    b64_str &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; b64_str.replace(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;).replace(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    # 解码：str -&amp;gt; bytes -&amp;gt; str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    raw &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; base64.b64decode(b64_str)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    decoded &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; raw.decode(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;errors&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;replace&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] decoded:&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, decoded)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    user, pw &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; decoded.split(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;:&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    # 改成 admin:pw 再 Base64 编码回去&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    new_plain &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;admin:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;pw&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.encode(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    new_b64 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; base64.b64encode(new_plain).decode(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] encoded data:&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, new_b64)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    script.post({&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;modified_data&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: new_b64})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] Modified data sent&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;device &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; frida.get_usb_device()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;pid &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; device.spawn([&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.myapplication2&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;device.resume(pid)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;time.sleep(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;session &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; device.attach(pid)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;s4.js&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;r&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;encoding&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    script &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; session.create_script(f.read())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;script.on(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, on_message)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;script.load()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content><category term="android"/></entry><entry><id>https://nonmirror.icu/posts/ill-intentions/</id><title type="text">Ill-intentions</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/ill-intentions/"/><updated>2026-01-26T12:55:51.000Z</updated><published>2026-01-26T12:55:51.000Z</published><summary type="text">安卓 day2 怎么隔了这么多天？ frida frida 17 之后的 java 桥 Python 内编译 手动编译（略） 攻防世界 ill intentions hook 先看 manifest 关注到主活动外有三个活动，都是解密过程，分别调用了一个不同的 native 函数，算法都不是很复杂可以直接分析，这里考虑 hook，但先按下不表。 还有一个 receiver，先看一眼 做的就是 dispatcher 的工作，看一眼主活动 发现这个 receiver 的 filter 是动态注册的，权限为 ctf.pe…</summary><content type="html">&lt;p&gt;安卓 day2
怎么隔了这么多天？&lt;/p&gt;
&lt;h2 id=&quot;frida&quot;&gt;frida&lt;/h2&gt;
&lt;p&gt;frida 17 之后的 java 桥&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; my-agent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; my-agent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;frida-craete&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; agent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; frida-java-bridge&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Java &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;frida-java-bridge&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;perform&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(() &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Python 内编译&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;PROJECT_ROOT&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; os.path.abspath(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;./my-agent&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;ENTRY&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;agent.ts&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;compiler &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; frida.Compiler()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;compiler.on(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;diagnostics&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, on_diagnostics)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;bundle &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; compiler.build(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;ENTRY&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;project_root&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;PROJECT_ROOT&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;手动编译（略）&lt;/p&gt;
&lt;h2 id=&quot;攻防世界-ill-intentions-hook&quot;&gt;攻防世界 ill-intentions hook&lt;/h2&gt;
&lt;p&gt;先看 manifest&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;xml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;xml&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; version&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;1.0&quot;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; encoding&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;manifest&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; xmlns:android&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    android:versionCode&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;1&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    android:versionName&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;1.0&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    package&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.hellojni&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    platformBuildVersionCode&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;22&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    platformBuildVersionName&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;5.1.1-1819727&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;uses-sdk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:minSdkVersion&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;22&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:targetSdkVersion&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;23&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;permission&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;ctf.permission._MSG&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:protectionLevel&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;signature&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:description&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;@string/android.permission._msg&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;permission&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;ctf.permission._SEND&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:description&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;@string/android.permission._msg&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;application&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:label&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;CTF Application&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:icon&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;@mipmap/ic_launcher&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;activity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:label&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Main Activity&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.application.MainActivity&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;intent-filter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;action&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.intent.action.MAIN&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;category&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.intent.category.LAUNCHER&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;intent-filter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;activity&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;activity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:label&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Activity: Is This The Real One&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.application.IsThisTheRealOne&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;activity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:label&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;This Is The Real One&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.application.ThisIsTheRealOne&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;activity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:label&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Definitely Not This One&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.application.DefinitelyNotThisOne&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;receiver&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.application.Send_to_Activity&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:exported&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;application&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;manifest&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;关注到主活动外有三个活动，都是解密过程，分别调用了一个不同的 native 函数，算法都不是很复杂可以直接分析，这里考虑 hook，但先按下不表。&lt;/p&gt;
&lt;p&gt;还有一个 receiver，先看一眼&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Send_to_Activity&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; extends&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; BroadcastReceiver&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // android.content.BroadcastReceiver&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; onReceive&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Context &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, Intent &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;intent&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        String msgText &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; intent.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getStringExtra&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;msg&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (msgText.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;ThisIsTheRealOne&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            Intent outIntent &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Intent&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(context, (Class&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;?&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) ThisIsTheRealOne.class);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            context.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;startActivity&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(outIntent);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (msgText.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;IsThisTheRealOne&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            Intent outIntent2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Intent&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(context, (Class&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;?&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) IsThisTheRealOne.class);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            context.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;startActivity&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(outIntent2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (msgText.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;DefinitelyNotThisOne&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            Intent outIntent3 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Intent&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(context, (Class&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;?&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) DefinitelyNotThisOne.class);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            context.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;startActivity&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(outIntent3);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            Toast.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;makeText&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(context, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Which Activity do you wish to interact with?&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;show&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;做的就是 dispatcher 的工作，看一眼主活动&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; MainActivity&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; extends&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Activity&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // android.app.Activity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; onCreate&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Bundle &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;savedInstanceState&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        super&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(savedInstanceState);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        TextView tv &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; TextView&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getApplicationContext&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        tv.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setText&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Select the activity you wish to interact with.To-Do: Add buttons to select activity, for now use Send_to_Activity&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        setContentView&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(tv);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        IntentFilter filter &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; IntentFilter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        filter.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addAction&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.ctf.INCOMING_INTENT&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        BroadcastReceiver receiver &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Send_to_Activity&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        registerReceiver&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(receiver, filter, Manifest.permission._MSG, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;发现这个 receiver 的 filter 是动态注册的，权限为 ctf.permission._MSG，manifest 里面可用看到是 signature 级别（只有同签名的app才有该权限），不考虑重打包基本没办法利用。&lt;/p&gt;
&lt;p&gt;尝试 adb 直接启动那三个活动&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;adb&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; shell&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; am&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; start&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; com.example.hellojni/com.example.application.IsThisTheRealOne&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;报错，活动的 exported 标签不为真，外部启动不了。了解到工具 objection 可以把 agent 注入到进程内部，在 app 的进程里构造 intent 可以绕过这个限制。那么可以把那三个 native 函数钩住，再用 objection 启动活动。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;perform&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        var&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; DefinitelyNotThisOneHandler &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;com.example.application.DefinitelyNotThisOne&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        DefinitelyNotThisOneHandler.definitelyNotThis.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;implementation&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;arg0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;arg1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] Entered DefinitelyNotThisOneHandler(), arg0: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; arg0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;, arg1: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; arg1);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            var&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ret &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;definitelyNotThis&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(arg0, arg1);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[*] Finished DefinitelyNotThisOneHandler(), return value: &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ret);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ret;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        var&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ThisIsTheRealOneHandler &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.application.ThisIsTheRealOne&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ThisIsTheRealOneHandler.orThat.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;overload&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;java.lang.String&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;java.lang.String&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;java.lang.String&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;implementation&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;arg0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;arg1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;arg2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;[*] Entered ThisIsTheRealOneHandler(), arg0: &apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; arg0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;, arg1: &apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; arg1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;, arg2: &apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; arg2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            var&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ret &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;orThat&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(arg0, arg1, arg2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;[*] Finished ThisIsTheRealOneHandler(), return value: &apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ret);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ret;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        var&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; IsThisTheRealOneHandler &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Java.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.application.IsThisTheRealOne&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        IsThisTheRealOneHandler.perhapsThis.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;overload&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;java.lang.String&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;java.lang.String&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;java.lang.String&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;implementation&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;arg0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;arg1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;arg2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;[*] Entered IsThisTheRealOneHandler(), arg0: &apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; arg0 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;, arg1: &apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; arg1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;, arg2: &apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; arg2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            var&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ret &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;perhapsThis&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(arg0, arg1, arg2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            console.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;[*] Finished IsThisTheRealOneHandler(), return value: &apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ret);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ret;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setImmediate&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(main)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;objection&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; --name&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; com.example.hellojni&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;android hooking list activities&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;android intent launch_activity com.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;example.application.IsThisTheRealOne&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[MI 6::com.example.hellojni ]-&amp;gt; [*] Entered IsThisTheRealOneHandler(), arg0: TRytfrgooq|F{i-JovFBungFk\VlphgQbwvj~HuDgaeTzuSt.@Lex^~, arg1: ZGFkNGIwYzIWYjEzMTUWNjVjNTVlNjZhOGJkNhYtODIyOGEaMTMWNmQaOTVjZjkhMzRjYmUzZGE?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;, arg2: MzQxZTZmZjAxMmIiMWUzNjUxMmRiYjIxNDUwYTUxMWItZGQzNWUtMzkyOWYyMmQeYjZmMzEaNDQ?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[*] Finished IsThisTheRealOneHandler(), return value: Congratulation!YouFoundTheRightActivityHereYouGo-CTF{IDontHaveABadjokeSorry}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;重打包&quot;&gt;重打包&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;apktool&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; d&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; raw.apk&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -o&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; out_dir&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;apktool&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; b&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; out_dir&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -o&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; unsigned.apk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 对齐优化&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;zipalign&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; unsigned.apk&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; aligned.apk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 生成签名文件&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;keytool&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -genkeypair&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -alias&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; myapp&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -keyalg&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; RSA&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -keysize&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2048&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -sigalg&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; SHA256withRSA&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -validity&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 10000&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -keystore&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; my-release.keystore&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -storetype&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; PKCS12&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; -v&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 签名&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;apksigner&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; sign&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; --ks&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; my-release.keystore&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; --out&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; signed.apk&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; aligned.apk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;jni-函数在-cc-侧的真实形态&quot;&gt;JNI 函数在 C/C++ 侧的真实形态&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; static&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; native&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; foo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(String str);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;通常对应：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;JNIEXPORT jint JNICALL &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;Java_com_example_test_JNI_foo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(JNIEnv&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, jclass &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;clazz&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, jstring &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;JNIEnv* env&lt;/code&gt; 是 JNI 环境指针，线程相关，里面是一堆函数表，对应 *JNINativeInterface&lt;/p&gt;
&lt;p&gt;&lt;code&gt;jclass clazz&lt;/code&gt; 是类对象（如果不是 static，则是 &lt;code&gt;jobject thiz&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;&lt;code&gt;jstring str&lt;/code&gt; Java 传进来的 String&lt;/p&gt;
&lt;p&gt;JNI 环境指针函数表中的函数通常通过 &lt;code&gt;*env + offset&lt;/code&gt; 调用，结合地址位数可以算出来是哪个函数。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; __fastcall &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;Java_com_example_test_ctf03_JNI_getResult&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; a1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; a2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; a3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v3;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v4;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v5;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v6;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;v7;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; j;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // r0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  v3 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  str &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;a1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 676&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))(a1, a3, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;strlen&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v4) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v5 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; malloc&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v6 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; malloc&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    v7 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; malloc&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    Init&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v5, v6, v7, v4, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;First&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v5) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E36209&quot;&gt;      v6&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[i] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;^=&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; v5&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[i];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;strcmp&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v6, a5) )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ( j &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; j &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;j )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E36209&quot;&gt;        v7&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[j] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;^=&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; v6&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[j];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; strcmp&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(v7, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;AFBo}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; v3;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;676/4=169，索引到 GetStringUTFChars()（查文档或者对应版本的 jni.h，也可以用参数和用途推断），这个函数把 java 的 String 转成 C 字符串。&lt;/p&gt;</content><category term="android"/></entry><entry><id>https://nonmirror.icu/posts/intent-and-sendbroadcast/</id><title type="text">Intent and sendBroadcast</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/intent-and-sendbroadcast/"/><updated>2026-01-22T10:20:00.000Z</updated><published>2026-01-22T10:20:00.000Z</published><summary type="text">安卓 day1 怎么才刚开始学？ Intent android.content.Intent 是安卓中用于组件间通信的核心类，描述一个操作的意图，例如启动一个 Activity、Service 或发送 Broadcast。 分为显式（指定确切组件类， new Intent(this, TargetActivity.class) ），隐式（不确定组件，只描述操作，如打开网页的 ACTION VIEW ） sendBroadcast(Intent intent) 向系统发送一个普通广播（Unordered Broadc…</summary><content type="html">&lt;p&gt;安卓 day1
怎么才刚开始学？&lt;/p&gt;
&lt;h1 id=&quot;intent&quot;&gt;Intent&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;android.content.Intent&lt;/code&gt; 是安卓中用于组件间通信的核心类，描述一个操作的意图，例如启动一个 Activity、Service 或发送 Broadcast。&lt;/p&gt;
&lt;p&gt;分为显式（指定确切组件类，&lt;code&gt;new Intent(this, TargetActivity.class)&lt;/code&gt;），隐式（不确定组件，只描述操作，如打开网页的 &lt;code&gt;ACTION_VIEW&lt;/code&gt;）&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 显式 Intent：启动指定 Activity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Intent intent &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Intent&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, SecondActivity.class);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;intent.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;putExtra&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Hello&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;startActivity&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(intent);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 隐式 Intent：发送邮件&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Intent intent &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Intent&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Intent.ACTION_SEND); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 此处只给行为，不指定具体目标 app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;intent.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setType&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;text/plain&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 设置携带数据的类型，便于过滤 app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;intent.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;putExtra&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Intent.EXTRA_TEXT, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Hello World&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;startActivity&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Intent.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;createChooser&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(intent, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;选择应用&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 弹出对话框，由用户选择 app&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;sendbroadcastintent-intent&quot;&gt;sendBroadcast(Intent intent)&lt;/h1&gt;
&lt;p&gt;向系统发送一个普通广播（Unordered Broadcast），异步分发 Intent 到所有注册了匹配 action 的 &lt;code&gt;BroadcastReceiver&lt;/code&gt; ，接收器并行处理。&lt;/p&gt;
&lt;p&gt;一个题&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;xml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;manifest&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; xmlns:android&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    android:versionCode&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;1&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    android:versionName&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;1.0&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    package&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.test.ctf02&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    platformBuildVersionCode&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;24&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    platformBuildVersionName&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;7&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;uses-sdk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:minSdkVersion&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;14&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:targetSdkVersion&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;24&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;application&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:theme&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;@style/AppTheme&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:label&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;@string/app_name&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:icon&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;@mipmap/ic_launcher&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:debuggable&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:allowBackup&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        android:supportsRtl&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;activity&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.test.ctf02.MainActivity&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;intent-filter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;action&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.intent.action.MAIN&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;category&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.intent.category.LAUNCHER&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;intent-filter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;activity&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;receiver&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.test.ctf02.GetAndChange&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:enabled&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:exported&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;intent-filter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;action&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.is.very.fun&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;intent-filter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;receiver&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;activity&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.test.ctf02.NextContent&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;activity&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.test.ctf02.MainActivity2&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;application&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;manifest&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;MainActivity 是一个简单的加密，过了之后进入 MainActivity2&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; MainActivity2&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; extends&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; AppCompatActivity&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    Button button;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    EditText editText;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ImageView imageView;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.support.v4.app.BaseFragmentActivityGingerbread, android.app.Activity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    protected&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; onCreate&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Bundle &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;savedInstanceState&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        super&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(savedInstanceState);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        setContentView&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(R.layout.activity_main_2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        init&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.button.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setOnClickListener&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; View.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;OnClickListener&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() { &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// from class: com.example.test.ctf02.MainActivity2.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // android.view.View.OnClickListener&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; onClick&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(View v) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                String str &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MainActivity2.this.editText.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getText&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                Intent intent &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Intent&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(str);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                MainActivity2.this.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;sendBroadcast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(intent);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; init&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.imageView &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (ImageView) &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;findViewById&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(R.id.image);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.imageView.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setImageResource&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(R.drawable.timg);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.editText &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (EditText) &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;findViewById&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(R.id.pwd);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.button &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (Button) &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;findViewById&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(R.id.button);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;onClick() 中，输入值 str 作为 action 传入 intent ，到这里可以去 AndroidManifest.xml 看一眼。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;xml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;receiver&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.test.ctf02.GetAndChange&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:enabled&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            android:exported&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;intent-filter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;action&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; android:name&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;android.is.very.fun&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;intent-filter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#22863A&quot;&gt;receiver&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注册了一个 receiver &lt;code&gt;GetAndChange&lt;/code&gt;，内容就是启动第三个 Activity &lt;code&gt;NextContent&lt;/code&gt;，intent-filter 标签代表匹配条件，这说明传入 android.is.very.fun 就能触发接收器。&lt;/p&gt;
&lt;p&gt;这里是静态注册，receiver 还能在运行时用 Context.registerReceiver() 动态注册。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 在 onCreate 或其他方法中&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;IntentFilter filter &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; IntentFilter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;com.example.CUSTOM_ACTION&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;MyReceiver receiver &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; MyReceiver&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;registerReceiver&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(receiver, filter);  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 注册&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 在 onDestroy 或 onPause 中注销&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;unregisterReceiver&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(receiver);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;MainActivity 启动 MainActivity2 当然也是用到 Intent&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Intent intent &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Intent&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(MainActivity.this, (Class&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;?&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) MainActivity2.class);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;MainActivity.this.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;startActivity&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(intent);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;MainActivity.this.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;finish&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// onClick() 返回&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这是 app 中界面导航的范式。&lt;/p&gt;
&lt;p&gt;这题的 apk 其实有很多可疑的地方，比如 assets 里面有个压缩包，export 出来又打不开，010 看一眼发现是 .jpg，直接改一下后缀名就可以看到图片里的 flag。并且直接去看 NextContent 的话也可以发现很可疑的东西&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Change&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() throws IOException {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        String strFile &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; getApplicationContext&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getDatabasePath&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;img.jpg&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getAbsolutePath&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            File f &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; File&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(strFile);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (f.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;exists&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                f.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;delete&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (Exception &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            e.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            InputStream is &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; getApplicationContext&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getResources&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getAssets&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;open&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;timg_2.zip&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            FileOutputStream fos &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; FileOutputStream&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(strFile);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            byte&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[] buffer &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; byte&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1024&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            while&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; count &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; is.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(buffer);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (count &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                    break&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                    fos.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(buffer, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, count);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            fos.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;flush&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            fos.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            is.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (Exception &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;e2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            e2.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.imageView.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;setImageBitmap&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(BitmapFactory.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;decodeFile&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(strFile));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;是一个图片覆盖的逻辑，把压缩包盖到图片上了，不难想到去看这个压缩包。&lt;/p&gt;</content><category term="binary"/><category term="android"/></entry><entry><id>https://nonmirror.icu/posts/%E6%88%91%E7%9A%84%E7%8E%AB%E7%91%B0/</id><title type="text">我的玫瑰</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/%E6%88%91%E7%9A%84%E7%8E%AB%E7%91%B0/"/><updated>2025-12-24T18:11:26.000Z</updated><published>2025-12-24T18:11:26.000Z</published><summary type="text">我的玫瑰 直到你带着安详的刺来吻我 我才看清你潮汐般的花瓣 我染上又染上了你的颜色 洗去又洗去 盐分饱满的沸腾海水把我皮肤融化 你又来吻我 我染上又染上了你的颜色</summary><content type="html">&lt;p&gt;我的玫瑰&lt;br&gt;直到你带着安详的刺来吻我&lt;br&gt;我才看清你潮汐般的花瓣&lt;/p&gt;
&lt;p&gt;我染上又染上了你的颜色&lt;br&gt;洗去又洗去&lt;br&gt;盐分饱满的沸腾海水把我皮肤融化&lt;br&gt;你又来吻我&lt;/p&gt;
&lt;p&gt;我染上又染上了你的颜色&lt;/p&gt;</content><category term="poems"/></entry><entry><id>https://nonmirror.icu/posts/cs61b-lecture/</id><title type="text">CS61B Lecture</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/cs61b-lecture/"/><updated>2025-10-29T03:11:35.000Z</updated><published>2025-10-29T03:11:35.000Z</published><summary type="text">61b 一拖再拖，课内学得稀烂。把 61b 的仓库 public 了，搬了一堆屎到博客上，希望得到存在或不存在的人的监督🙏✊ 又听到 Josh Hug 的声音，感觉好幸福。 Lists in Java date: 2025 8 20 23:35:07 更强的封装性，更面向对象。留意 .size() 的实现。 The meaning of a sentinel 统一的逻辑，严谨的结构（空表） addLast is slow 需要将倒数第二个节点的 next 置空，要遍历链表。 If we just maintain…</summary><content type="html">&lt;p&gt;61b 一拖再拖，课内学得稀烂。把 61b 的仓库 public 了，搬了一堆屎到博客上，希望得到存在或不存在的人的监督🙏✊
又听到 Josh Hug 的声音，感觉好幸福。&lt;/p&gt;
&lt;h1 id=&quot;lists-in-java&quot;&gt;Lists in Java&lt;/h1&gt;
&lt;p&gt;date: 2025-8-20 23:35:07&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; SLList&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    private&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; static&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Node {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; item;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; IntNode next;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        public&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; IntNode&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; i&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, IntNode &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            item &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            next &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    private&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; IntNode first;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; SLList&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        first &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; IntNode&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(x, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; addFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        first &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; IntNode&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(x, first);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; getFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; first.item;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // Why is it `static`?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    private&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; static&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; size&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(IntNode &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (p.next &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; null&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; size&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(p.netx);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; size&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; size&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(first);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更强的封装性，更面向对象。留意 &lt;code&gt;.size()&lt;/code&gt; 的实现。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-meaning-of-a-sentinel&quot;&gt;The meaning of a sentinel&lt;/h2&gt;
&lt;p&gt;统一的逻辑，严谨的结构（空表）&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;addlast-is-slow&quot;&gt;addLast is slow&lt;/h2&gt;
&lt;p&gt;需要将倒数第二个节点的 &lt;code&gt;next&lt;/code&gt; 置空，要遍历链表。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;if-we-just-maintain-a-lastnode-the-movelast-would-be-slow&quot;&gt;If we just maintain a lastNode, the moveLast would be slow&lt;/h2&gt;
&lt;p&gt;多维护一个 &lt;code&gt;lastNode&lt;/code&gt; 也没有用（思考）。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;so-the-solution-is-doubly-linked-list&quot;&gt;So the solution is… Doubly Linked List!&lt;/h2&gt;
&lt;p&gt;因此想到双向链表。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;two-sentinel-can-be-more-perfect-one-sentinel&quot;&gt;Two sentinel? Can be more perfect. One Sentinel!&lt;/h2&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20250820151743741&lt;/span&gt;&lt;code&gt;image-20250820151743741.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20250820231056714&lt;/span&gt;&lt;code&gt;image-20250820231056714.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; DLList&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	private&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Node&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;		public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; T item;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;		public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Node next;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Node prev;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;		&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;		public&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Node&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(T &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, Node &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, Node &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;			item &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;			next &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n;	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;			prev &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; p;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;		}	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	private&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Node sentinel;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	private&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; size;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	public&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; DLList&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;		size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;		sentinel &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Node&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);\&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        sentinel.next &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; sentinel;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        sentinel.prev &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; sentinel;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; addFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(T &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Node newNode &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Node&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(x, sentinel.next, sentinel);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        sentinel.next.prev &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; newNode;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        sentinel.next &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; newNode;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        ++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;size;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; removeFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            throw&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; IllegalStateException&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Cannot remove from an empty list&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        sentinel.next.next.prev &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; sentinel;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        sentinel.next &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; sentinel.next.next;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        --&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;size;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; T &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            throw&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; IllegalStateException&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Cannot get first element of an empty list&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; sentinel.next.item;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; addLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(T &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Node newNode &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Node&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(x, sentinel, sentinel.prev);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        sentinel.prev.next &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; newNode;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        sentinel.prev &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; newNode;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        ++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;size;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; removeLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            throw&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; IllegalStateException&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Cannot remove from an empty list&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        sentinel.prev.prev.next &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; sentinel;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        sentinel.prev &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; sentinel.prev.prev;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        --&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;size;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; T &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            throw&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; IllegalStateException&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Cannot get last element of an empty list&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; sentinel.prev.item;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; size&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() { &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; size; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id=&quot;lecture8-10&quot;&gt;Lecture8-10&lt;/h1&gt;
&lt;p&gt;date: 2025-9-26 9:40:27&lt;/p&gt;
&lt;h2 id=&quot;接口继承和实现继承&quot;&gt;接口继承和实现继承&lt;/h2&gt;
&lt;p&gt;Java 中, 继承分为接口继承 &lt;code&gt;implements&lt;/code&gt; 和实现继承 &lt;code&gt;entends&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;前者提供一个接口 &lt;code&gt;interface&lt;/code&gt; , 包含所有子类应实现的功能, 但没有具体实现, 子类用 &lt;code&gt;implements&lt;/code&gt; 关键字声明.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; interface&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; List61B&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Item&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; addFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Item &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; add &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;Last&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Item &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Item &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Item &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Item &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;removeLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Item &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; i&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; insert&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Item &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; position&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; size&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; AList&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Item&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;implements&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; List61B&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Item&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; addFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Item &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) { ... }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;后者的使用情景为子类需要重写父类的某些方法, 对于这些方法, 加入 &lt;code&gt;default&lt;/code&gt; 关键字声明, 子类用 &lt;code&gt;extends&lt;/code&gt; 关键字声明.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;default&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() { &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 需要重写的方法&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; size&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(); &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        System.out.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(i) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot; &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    System.out.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (Node p &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; sentinel.next; p &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; null&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; p &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; p.next) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        System.out.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(p.item &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot; &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;使用 &lt;code&gt;extends&lt;/code&gt; 关键字, 子类继承父类构造和析构函数外的所有成员(虽然不继承, 但在子类对象构造时也会被显示/隐式调用), 并且 &lt;code&gt;private variables&lt;/code&gt; 不能被子类直接访问.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;静态类型和动态类型&quot;&gt;静态类型和动态类型&lt;/h2&gt;
&lt;p&gt;省流: 编译检查看静态类型, 为了通过编译检查会用到强制类型转换; 虚表查找(…就是那个意思)看动态类型&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;高阶函数和子类多态性&quot;&gt;高阶函数和子类多态性&lt;/h2&gt;
&lt;p&gt;Java 中高阶函数的实现.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; interface&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; IntUnaryFunction&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; apply&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; TenX implements IntUnaryFunction {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    /* Returns ten times the argument. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; apply&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; static&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; do_twice&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(IntUnaryFunction f, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; f.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;apply&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(f.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;apply&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(x));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;比较器&quot;&gt;比较器&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Dog&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; implements&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Comparable&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Dog&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; compareTo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Dog &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;uddaDog&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uddaDog.size;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上述代码通过 &lt;code&gt;Comparable&lt;/code&gt; 实现了运算符重载.&lt;/p&gt;
&lt;p&gt;需要实现多种不同的比大小方法时, 用到另一个类 &lt;code&gt;Comparator&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; java.util.Comparator;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Dog&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; implements&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Comparable&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Dog&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; compareTo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Dog &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;uddaDog&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uddaDog.size;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    private&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; static&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; NameComparator&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; implements&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Comparator&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Dog&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; compare&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Dog &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, Dog &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a.name.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;compareTo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(b.name);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; static&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Comparator&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Dog&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;getNameComparator&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; NameComparator&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id=&quot;eceptions-and-literators&quot;&gt;Eceptions and Literators&lt;/h1&gt;
&lt;p&gt;date: 2025-9-26 11:07:16&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本节实现数据结构 ArraySet&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;exceptions&quot;&gt;Exceptions&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; ExceptionObject&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(parameter1, ...)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;/* Associates pthe specified value with the specified key in this map.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   Throws an IllegalArgumentException if the key is null. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(T x) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (x &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; null&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        throw&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; IllegalArgumentException&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;can&apos;t add null&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;contains&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(x)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    items[size] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;iterators-and-iterables&quot;&gt;Iterators and Iterables&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; interface&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Iterable&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    Iterator&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;iterator&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; interface&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Iterator&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    boolean&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; hasNext&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    T &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; java.util.Iterator:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ArraySet&amp;lt;T&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;implements&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Iterable&amp;lt;T&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;    private&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; T[] items;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    private&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; size; &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// the next item to be added will be at position `size`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; ArraySet&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        items &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[]) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; Object&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    /* Returns true if this map contains a mapping for specified key. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; boolean&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; contains&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(T x) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; size; &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (items[i].&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(x)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    /* Associates the specified value with the specified key in this map.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;       Throws an IllegalArgumentException if the key is null. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(T x) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (x &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; null&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            throw&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; IllegalArgumentException&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;can&apos;t add null&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;contains&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(x)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        items[size] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    /* Returns the number of key-value mappings in this map */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; size&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; size;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    /* Returns an iterator into ME */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Iterator&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; iterator&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; ArraySetIterator&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    private&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; ArraySetIterator&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; implements&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; Iterator&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        private&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; wizPos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        public&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; ArraySetIterator&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            wizPos &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; boolean&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; hasNext&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; wizPos &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; size;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; T &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            T returnItem &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; items[wizPos];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            wizPos &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; returnItem;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; static&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[] args) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        ArraySet&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Integer&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; aset &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ArraySet&amp;lt;&amp;gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        aset.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        aset.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;23&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        aset.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;42&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // iteration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; aset) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            System.out.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(i);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id=&quot;junit-check&quot;&gt;JUnit Check&lt;/h1&gt;
&lt;p&gt;date: 2025-9-26 14:17:05&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; MaxArrayDequeTest&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    /** Adds a few things to the list, checking isEmpty() and size() are correct,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     * finally printing the results.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; addIsEmptySizeTest&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Comparator&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; c &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Comparator&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; compare&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(String &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;o1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, String &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;o2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; o1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;compareTo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(o2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;       MaxArrayDeque&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; mad1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MaxArrayDeque&amp;lt;&amp;gt;(c);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;       assertTrue&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;A newly initialized MADeque should be empty&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;isEmpty&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;       mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;front&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;       assertEquals&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;       assertFalse&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;mad1 should now contain 1 item&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;isEmpty&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;       mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;middle&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;       assertEquals&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;       mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;back&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;       assertEquals&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;       System.out.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Printing out deque: &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;       mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;printDeque&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; addRemoveTest&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Comparator&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Integer&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; c &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Comparator&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Integer&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; compare&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Integer &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;o1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, Integer &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;o2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; o1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;compareTo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(o2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        MaxArrayDeque&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Integer&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; mad1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MaxArrayDeque&amp;lt;&amp;gt;(c);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        assertTrue&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;mad1 should be empty upon initialization&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;isEmpty&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        assertFalse&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;mad1 should contain 1 item&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;isEmpty&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;removeFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        assertTrue&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;mad1 should be empty after removal&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;isEmpty&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; removeEmptyTest&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Comparator&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Integer&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; c &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Comparator&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Integer&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; compare&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Integer &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;o1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, Integer &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;o2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; o1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;compareTo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(o2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        MaxArrayDeque&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Integer&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; mad1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MaxArrayDeque&amp;lt;&amp;gt;(c);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;removeLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;removeFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;removeLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;removeFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        String errorMsg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;  Bad size returned when removing from empty deque.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        errorMsg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;  student size() returned &quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        errorMsg &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;  actual size() returned 0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        assertEquals&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(errorMsg, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, size);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; multipleParamTest&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        MaxArrayDeque&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;  mad1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MaxArrayDeque&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        MaxArrayDeque&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Double&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;  mad2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MaxArrayDeque&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Double&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        MaxArrayDeque&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Boolean&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; mad3 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MaxArrayDeque&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Boolean&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;string&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad2.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3.14159&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad3.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        String s &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;removeFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        double&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; d &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mad2.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;removeFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        boolean&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; b &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mad3.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;removeFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; bigMADequeTest&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        MaxArrayDeque&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Integer&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; mad1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MaxArrayDeque&amp;lt;&amp;gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1000000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(i);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 500000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            assertEquals&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Should have the same value&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, i, (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;removeFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 999999&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 500000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            assertEquals&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Should have the same value&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, i, (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;removeLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; maxTest&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        Comparator&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Integer&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; c &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  Comparator&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Integer&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            @&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; compare&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Integer &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;o1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, Integer &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;o2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; o1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;compareTo&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(o2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        MaxArrayDeque&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Integer&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; mad1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; MaxArrayDeque&amp;lt;&amp;gt;(c);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;29&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2912&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addLast&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;292&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;addFirst&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2912&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        assertEquals&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((Integer) &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2912&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, mad1.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;max&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id=&quot;tostring-and-equals&quot;&gt;toString and equals&lt;/h1&gt;
&lt;p&gt;date: 2025-10-3 15:06:53&lt;/p&gt;
&lt;h2 id=&quot;tostring&quot;&gt;toString&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;publiic String &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    String returnString &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        returnString &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; items[i.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        returnString &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;, &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    returnString &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; items[size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].toString;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    returnString &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;, &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; returnString;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;利用迭代拼接字符串 &lt;code&gt;String&lt;/code&gt; 效率特别低(每次迭代会复制一个字符串), 复杂度为 O(n²), 故改用 &lt;code&gt;StringBuilder&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; String &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    StringBuilder returnSB &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; StringBuilder&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;{&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;i) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        returnSB.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(items[i].&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        returnSB.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    returnSB.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(items[size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    returnSB.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; returnSB.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Shorter toString:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; String &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    List&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; listOfItems &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ArrayList&amp;lt;&amp;gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (T x &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        listOfItems.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(x.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;{&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; String.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, listOfItems) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样的实现更简洁, 但还是效率低下, 如果不需要频繁调用 &lt;code&gt;toString&lt;/code&gt;, 这样写更好看.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;equals&quot;&gt;equals&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; boolean&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; equals&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Object o) { &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// the parameter must be Object, not ArraySet or something, because this is a overriding method&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;instanceof&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Dog uddaDog) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; uddaDog.size;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;instanceof&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;checks to see if o’s dynamic type is &lt;code&gt;Dog&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;implicitly casts o as a &lt;code&gt;Dog&lt;/code&gt; into a variable called uddaDog&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; boolean&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; equals&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Object o) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; o) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    } &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (o &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;instanceof&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ArraySet oas) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.size &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; oas.size) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (T x &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;oas.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;contains&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(x)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;of&quot;&gt;.of&lt;/h2&gt;
&lt;p&gt;var arg (variable number of arguments)&lt;/p&gt;
&lt;p&gt;new pattern of generic (&lt;code&gt;of&lt;/code&gt; is a static method which can not access generic param T)&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;java&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; static&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Glerp&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ArraySet&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;Glerp&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; of&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Glerp... stuff) { &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Glerp has nothing to do with T, it&apos;s just the declaration that this is a method which is generic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ArraySet&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Glerp&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; returnSet &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ArraySet&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Glerp&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (Glerp x &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; stuff) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        returnSet.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(x);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; returnSet;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;腰斩了，对不起我曾经成为算法高手的理想&lt;/p&gt;</content><category term="cs61b"/></entry><entry><id>https://nonmirror.icu/posts/spirits/</id><title type="text">Spirits</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/spirits/"/><updated>2025-10-17T05:13:00.000Z</updated><published>2025-10-17T05:13:00.000Z</published><summary type="text">Spirits，即蒸馏酒。 六大基酒（Six Base Spirits） 威士忌（Whisky） 伏特加（Vodka） 金酒（Gin） 朗姆酒（Rum） 龙舌兰（Tequila） 白兰地（Brandy） 威士忌 1. 起源与精神 威士忌的起源可追溯至中世纪的 爱尔兰 或 苏格兰 。最早被称为“生命之水”（Uisge Beatha）。 随着时间推移，它从修道院药剂演化为现代意义上的蒸馏酒。如今，它象征着 成熟、独立与时间的力量 。 2. 制作流程与风味 威士忌以 谷物（麦芽、大麦、玉米、黑麦等） 为原料，经过发酵、蒸…</summary><content type="html">&lt;p&gt;Spirits，即蒸馏酒。&lt;/p&gt;
&lt;h2 id=&quot;六大基酒six-base-spirits&quot;&gt;六大基酒（Six Base Spirits）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;威士忌（Whisky）&lt;/li&gt;
&lt;li&gt;伏特加（Vodka）&lt;/li&gt;
&lt;li&gt;金酒（Gin）&lt;/li&gt;
&lt;li&gt;朗姆酒（Rum）&lt;/li&gt;
&lt;li&gt;龙舌兰（Tequila）&lt;/li&gt;
&lt;li&gt;白兰地（Brandy）&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;威士忌&quot;&gt;威士忌&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. 起源与精神&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;威士忌的起源可追溯至中世纪的 &lt;strong&gt;爱尔兰&lt;/strong&gt; 或 &lt;strong&gt;苏格兰&lt;/strong&gt;。最早被称为“生命之水”（Uisge Beatha）。&lt;/p&gt;
&lt;p&gt;随着时间推移，它从修道院药剂演化为现代意义上的蒸馏酒。如今，它象征着 &lt;strong&gt;成熟、独立与时间的力量&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 制作流程与风味&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;威士忌以 &lt;strong&gt;谷物（麦芽、大麦、玉米、黑麦等）&lt;/strong&gt; 为原料，经过发酵、蒸馏后，在橡木桶中陈年。熟成时间越长，酒体越柔和、层次越复杂。&lt;/p&gt;</content></entry><entry><id>https://nonmirror.icu/posts/%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8%E6%95%B0%E5%AD%A6%E5%9F%BA%E7%A1%80-web/</id><title type="text">信息安全数学基础</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8%E6%95%B0%E5%AD%A6%E5%9F%BA%E7%A1%80-web/"/><updated>2025-10-05T02:49:41.000Z</updated><published>2025-10-05T02:49:41.000Z</published><summary type="text">对课本进行的一个摘抄，并没有学习价值。 To be done... 初等数论 整除 定理 1.2.3 设 a, b 是两个不全为 0 的整数，则 gcd(a, b) 1 当且仅当存在整数 u, v 使得 ua + vb 1 ​ 证明： ​ 暂时仅证明特例：若 gcd(p, q) 1，存在整数 s, t \in \mathbb{Z} 使得 sp + tq 1. 设 m ps + qt 为集合 A \\{ps + qt s, t \in \mathbb{Z} 中的最小正整数。那么只需证明 m \mid p, m \mi…</summary><content type="html">&lt;p&gt;对课本进行的一个摘抄，并没有学习价值。&lt;/p&gt;
&lt;p&gt;To be done…&lt;/p&gt;
&lt;h1 id=&quot;初等数论&quot;&gt;初等数论&lt;/h1&gt;
&lt;h2 id=&quot;整除&quot;&gt;整除&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;定理 1.2.3&lt;/strong&gt; 设 a, b 是两个不全为 0 的整数，则 gcd(a, b) = 1 当且仅当存在整数 u, v 使得&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;u&lt;/mi&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;ua + vb = 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;​	证明：&lt;/p&gt;
&lt;p&gt;​	暂时仅证明特例：若 gcd(p, q) = 1，存在整数 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mo&gt;∈&lt;/mo&gt;&lt;mi mathvariant=&quot;double-struck&quot;&gt;Z&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;s, t \in \mathbb{Z}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 使得 sp + tq = 1.&lt;/p&gt;
&lt;p&gt;设 m = ps + qt 为集合 &lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: Expected &apos;}&apos;, got &apos;EOF&apos; at end of input: … \in \mathbb{Z}&quot; style=&quot;color:#cc0000&quot;&gt;A = \\{ps + qt | s, t \in \mathbb{Z}&lt;/span&gt; 中的最小正整数。那么只需证明 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;∣&lt;/mo&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;∣&lt;/mo&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m \mid p, m \mid q&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，就有 m = 1（因为 p, q 互素）。下证：&lt;/p&gt;
&lt;p&gt;假设 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;∤&lt;/mo&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;∤&lt;/mo&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m \nmid p, m \nmid q&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，那么有 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p = km + r&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，即 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;⋅&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mo&gt;⋅&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;r = p - km = p - k(ps + qt) = p \cdot (1 - ks) + q \cdot kt&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;p&gt;由于 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;0 &amp;lt; r &amp;lt; m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 且 r 也能表示为 ps + qt，与 m 是集合 A 中的最小正整数矛盾，证毕。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;扩展欧几里得算法求乘法逆元&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;@source &lt;a href=&quot;https://www.bilibili.com/video/BV1234y1m7Xs/?vd_source=9c3d54ea9a8203ff582b3f8de20f3bb0&quot;&gt;https://www.bilibili.com/video/BV1234y1m7Xs/?vd_source=9c3d54ea9a8203ff582b3f8de20f3bb0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;有同余方程 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;ax \equiv 1 \pmod p&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, 其中 a, p 互素，求 x.&lt;/p&gt;
&lt;p&gt;例1 a = 5, p = 14&lt;/p&gt;
&lt;p&gt;对二者用欧几里得算法求出最大公因数：&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;14&lt;/mn&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;14 = 5 \times 2 + 4 \\\\
5 = 4 \times 1 + 1 \\\\
4 = 1 \times 4&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;有 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;gcd&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\gcd(a, p) = 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;.&lt;/p&gt;
&lt;p&gt;对 1 用欧几里得算法的逆过程展开：&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;14&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;14&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;1 = 5 - 4 \\\\
= 5 - (14 - 5 \times 2) \\\\
= 5 \times 3 - 14 \times 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;那么 x 即为 3.&lt;/p&gt;
&lt;p&gt;例2 a = 5, p = 18&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;18&lt;/mn&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;18 = 5 \times 3 + 3 \\\\
5 = 3 \times 1 + 2 \\\\
3 = 2 \times 1 + 1 \\\\
2 = 1 \times 2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;g&lt;/mi&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;gcd(a, p) = 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;18&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;[&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;18&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;]&lt;/mo&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;18&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;18&lt;/mn&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;18&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;18&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mspace linebreak=&quot;newline&quot;&gt;&lt;/mspace&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;18&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;7&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;1 = 3 - 2 \\\\
= 3 - (5 - 3) \\\\
= 18 - 5 \times 3 - [5 - (18 - 5 \times 3)] \\\\
= 18 - 5 \times 3 - (5 - 18 + 5 \times 3) \\\\
= 18 - 5 \times 3 - 5 + 18 - 5 \times 3 \\\\
= 18 \times 2 - 5 \times 7&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;因为 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;7&lt;/mn&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mn&gt;11&lt;/mn&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mn&gt;18&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;-7 \equiv 11 \pmod {18}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, x = 11.&lt;/p&gt;
&lt;p&gt;有趣的：&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20251016090419362&lt;/span&gt;&lt;code&gt;image-20251016090419362.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;定理 1.3.2 （算术基本定理）&lt;/strong&gt; 任意不为 1 的非零正整数 n 均可唯一地表示为如下递推公式：&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msubsup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;msubsup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;msubsup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;n = p_1^{\alpha_1}p_2^{\alpha_2}...p_k^{\alpha_k}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;其中，&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;P&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p_1 &amp;lt; P_2 &amp;lt; ... &amp;lt; p_k, \alpha_1, \alpha_2, ..., \alpha_k&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 是正整数。上式称为 n 的标准分解式。&lt;/p&gt;
&lt;p&gt;证明：（存在性）若 n 是素数，定理显然成立。&lt;/p&gt;
&lt;p&gt;若 n 不是素数，设 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 是 n 的最小非平凡正因数，则 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 是素数，因为 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的非平凡正因数也是 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;n&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的非平凡正因数，所以 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 没有非平凡正因数。设 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;n = p_{1}n_{1} (1 &amp;lt; n_1 &amp;lt; n)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;. 对 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;n_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 重复上述推理，可得 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;n = p_1 n_1 = p_1 p_2 n_2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;. 以此类推，得 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;&amp;gt;&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;&amp;gt;&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;&amp;gt;&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mo&gt;&amp;gt;&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;n &amp;gt; n_1 &amp;gt; n_2 &amp;gt; ... &amp;gt; 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，其步骤不超过 n，最后必有 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;l&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;n = p_1 p_2 ... p_l&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;. 将该式中相同素数合并为素数的方幂，并按定理要求排列，就得到了分解的存在性。&lt;/p&gt;
&lt;p&gt;（唯一性）设 n 可分解为 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msubsup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;msubsup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msubsup&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;msubsup&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mi&gt;l&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;mi&gt;l&lt;/mi&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;n = p_1^{\alpha_1}...p_k^{\alpha_k} = q_1^{\beta_1}...q_l^{\beta_l}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; ，其中 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mi&gt;l&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p_1 &amp;lt; p_2 &amp;lt; ... &amp;lt; p_k, q_1 &amp;lt; q_2 &amp;lt; ... &amp;lt; q_l&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 都是素数。&lt;/p&gt;
&lt;p&gt;根据定理1.3.1，存在某个 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;q_i&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，满足 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;∣&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p_1 \mid q_i&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，不妨设为 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;q_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，因为 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p_1, q_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 均为素数，所以 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p_1 = q_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;。类似地，可依次得到&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mo&gt;≤&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;≤&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p_i = q_i, 2 \leq i \leq k&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;因此有 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;l&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;k = l&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;. 又若 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;&amp;gt;&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\alpha_1 &amp;gt; \beta_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; ，则&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msubsup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/msubsup&gt;&lt;msubsup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;msubsup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msubsup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;msubsup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p_1^{\alpha_1 - \beta_1} p_2^{\alpha_2} ... p_k^{\alpha_k} = p_2^{\beta_2}...p_k^{\beta_k}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;上式左边被 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 整除，右边不能被 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 整除，矛盾，所以 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;&amp;gt;&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\alpha_1 &amp;gt; \beta_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 不成立。同理 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;&amp;gt;&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\alpha_1 &amp;gt; \beta_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 不成立。因此 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;β&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\alpha_1 = \beta_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;。以此类推，定理得证。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;同余&quot;&gt;同余&lt;/h2&gt;
&lt;h3 id=&quot;同余类与剩余系&quot;&gt;同余类与剩余系&lt;/h3&gt;
&lt;p&gt;与 m 互素的剩余类的个数为欧拉函数, 记为 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\phi(m)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;. &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\phi(m)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 等于 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;Z&lt;/mi&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;Z_m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; (最小非负完全剩余系) 当中与 m 互素的数的个数. 对于任意一个素数 p, &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\phi(p) = p - 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;.&lt;/p&gt;
&lt;p&gt;在与 m 互素的 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\phi(m)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 个模 m 的剩余类中各取一个代表元 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;/msub&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;a_1, a_2, ..., a_\phi(m)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, 它们组合成的集合称为模 m 的一个 &lt;strong&gt;既约剩余系或简化剩余系&lt;/strong&gt;. &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;Z&lt;/mi&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;Z_m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 中与 m 互素的数构成模 m 的一个既约剩余系, 称为最小非负既约剩余系.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;定理 2.2.4&lt;/strong&gt; 设 m 是正整数. 整数 a 满足 gcd(a, m) = 1. 若 x 遍历模 m 的一个既约剩余系, 则 ax 也遍历模 m 的一个既约剩余系&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;定理 2.2.5&lt;/strong&gt; 设 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m_1, m_2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 是两个互素的正整数. 如果 x 遍历模 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的一个既约剩余系, y 遍历模 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m_2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的一个既约剩余系, 则 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m_1 y + m_2 x&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 遍历模 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m_1 m_2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的一个既约剩余系.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;推论 2.2.1&lt;/strong&gt; 设 m, n 是两个互素的整数，则 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\phi(mn) = \phi(m)\phi(n)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;定理 2.2.6 (求 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\phi (n)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;)&lt;/strong&gt; 若 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msubsup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;msubsup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;msubsup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m = p_{1}^{e_1}p_{2}^{e_2}...p_k^{e_k}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;（质因数分解），则&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;munderover&gt;&lt;mo&gt;∏&lt;/mo&gt;&lt;mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;/munderover&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mfrac&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;/mfrac&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\phi(m) = m \prod_{i=1}^{k}(1 - \frac{1}{p_i})&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;​	证明: 当 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m = p^e&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 为单个素数当方幂时，在模 m 的完全剩余系 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo stretchy=&quot;false&quot;&gt;{&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;/msup&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;}&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\{0, 1, 2, ..., p^{e} - 1\}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p^e&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 个整数中，与 p 不互素的只有 p 的倍数，共 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p^{e-1}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 个，因此与 p 互素的数共有 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;/msup&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p^e - p^{e-1}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 个，即&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;/msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;/msup&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;/msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mfrac&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;/mfrac&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\phi(p^{e}) = p^e - p^{e-1} = p^e(1 - \frac{1}{p})&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;再根据 推论 2.2.1，可以证明出结论。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;定理 2.2.8(欧拉定理)&lt;/strong&gt; 设 m 是正整数, &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;mo&gt;∈&lt;/mo&gt;&lt;msub&gt;&lt;mi mathvariant=&quot;double-struck&quot;&gt;Z&lt;/mi&gt;&lt;mi mathvariant=&quot;double-struck&quot;&gt;m&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;r \in \mathbb{Z_m}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, 若 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;gcd&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\gcd(r, m) = 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, 则&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;1em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;r^{\phi(m)} \equiv 1 \pmod m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;重复平方乘算法：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;计算 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;/msup&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.6667em&quot;&gt;&lt;/mspace&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;b^N \mod m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;先考虑 欧拉定理，若不行再进行重复平方乘算法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将 N 转换为二进制数&lt;/li&gt;
&lt;li&gt;从 N 的最低位开始，将结果（result）初始化为1&lt;/li&gt;
&lt;li&gt;如果当前位为1，则 result = result * b (mod m)&lt;/li&gt;
&lt;li&gt;b = b * b (mod m), 左移到下一个二进制位&lt;/li&gt;
&lt;li&gt;重复 3, 4&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;一次同余方程&quot;&gt;一次同余方程&lt;/h4&gt;
&lt;h5 id=&quot;二元一次不定式&quot;&gt;二元一次不定式&lt;/h5&gt;
&lt;p&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;ax + by = c&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;判断有无解：&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;gcd&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;∣&lt;/mo&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mtext&gt;  &lt;/mtext&gt;&lt;mo&gt;⟹&lt;/mo&gt;&lt;mtext&gt;  &lt;/mtext&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\gcd(a, b) \mid c \implies&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 有解&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;化简：&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mtext&gt;  &lt;/mtext&gt;&lt;mo&gt;⟹&lt;/mo&gt;&lt;mtext&gt;  &lt;/mtext&gt;&lt;mfrac&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mrow&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mfrac&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mrow&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mrow&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;ax + by = c \implies \frac{a}{(a, b)}x + \frac{b}{(a, b)}y = \frac{c}{(a, b)}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，记为 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;a_1 x + b_1 y = c_1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;找特解：令 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;ax + by = 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 求出 &lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: {equation} can be used only in display mode.&quot; style=&quot;color:#cc0000&quot;&gt;\begin{equation} \\{ \begin{aligned} x_1 = m \\\\ y_1 = n \end{aligned} \end{equation}&lt;/span&gt; （观察/辗转相除法）&lt;/p&gt;
&lt;p&gt;那么对于 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;ax + by = c&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 就有特解 &lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: {equation} can be used only in display mode.&quot; style=&quot;color:#cc0000&quot;&gt;\begin{equation} \\{ \begin{aligned} x_0 = mc \\\\ y_0 = nc \end{aligned} \end{equation}&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;交叉写出特解 &lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: {equation} can be used only in display mode.&quot; style=&quot;color:#cc0000&quot;&gt;\begin{equation} \\{ \begin{aligned} x = mc + bt \\\\ y = nc - at \end{aligned} \end{equation}&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;9&lt;/mn&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;21&lt;/mn&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;144&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;9x + 21y = 144&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;144&lt;/mn&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;∣&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;9&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mn&gt;21&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;144 | (9, 21)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，有解&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;7&lt;/mn&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;48&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;3x + 7y = 48&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;令 &lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: {equation} can be used only in display mode.&quot; style=&quot;color:#cc0000&quot;&gt;3x + 7y = 1 \implies \begin{equation} \\{\begin{aligned} x_1 = -2 \\\\ y_1 = 1 \end{aligned} \end{equation} （观察得到）&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;可以得到 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;7&lt;/mn&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;48&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;3x + 7y = 48&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的特解：&lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: {equation} can be used only in display mode.&quot; style=&quot;color:#cc0000&quot;&gt;\begin{equation} \\{\begin{aligned} x_0 = -96 \\\\ y_0 = 48 \end{aligned} \end{equation}&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;通解&lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: {equation} can be used only in display mode.&quot; style=&quot;color:#cc0000&quot;&gt;\begin{equation} \\{ \begin{aligned} x = -96 + 7t \\\\ y = 48 - 3t \end{aligned} \end{equation}&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mtext&gt;  &lt;/mtext&gt;&lt;mo&gt;⟹&lt;/mo&gt;&lt;mtext&gt;  &lt;/mtext&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;ax \equiv b \pmod m \implies ax - my = b&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;定理 2.3.1&lt;/strong&gt; 一次同余方程 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;ax \equiv b \pmod m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 有解的充要条件是 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;gcd&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;∣&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\gcd(a, m) \mid b&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，而且当其有解时，其解数为 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;gcd&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\gcd(a, m)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;。&lt;/p&gt;
&lt;p&gt;证明：（必要性）令 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;gcd&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\gcd(a, m) = d&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;。设 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;x_0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 是同余方程 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;ax \equiv b \pmod {m}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的解，则存在整数&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;k&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，使得 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;ax_0 = km + b&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 即 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;b = ax_0 - km&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;。&lt;/p&gt;
&lt;p&gt;由 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mo&gt;∣&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mo&gt;∣&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;d \mid a, d\mid m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，可得 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mo&gt;∣&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;d \mid b&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;。&lt;/p&gt;
&lt;p&gt;（充分性）设 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mrow&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mrow&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mrow&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;a&apos; = \frac{a}{(a, m)}, m&apos; = \frac{m}{(a, m)}, b&apos; = \frac{b}{(a, m)}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;。首先考虑同余方程&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;1em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mtext&gt;（&lt;/mtext&gt;&lt;mn&gt;12&lt;/mn&gt;&lt;mtext&gt;）&lt;/mtext&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;a&apos;x \equiv 1 \pmod {m&apos;} （12）&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;因为 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;gcd&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\gcd(a&apos;, m&apos;) = 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，可知 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;a&apos;&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 存在模 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m&apos;&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的唯一逆元，设为 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;x_0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;。即 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;x_0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 是同余方程 (37) 的唯一解 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;x \equiv x_0 \pmod {m&apos;}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，满足 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;a&apos;x_0 \equiv 1 \pmod {m&apos;}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;。因此，同余方程&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;1em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;a&apos;x \equiv b&apos; \pmod {m&apos;}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;也存在唯一解 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;x \equiv x_0 b&apos; \pmod {m&apos;}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;。&lt;/p&gt;
&lt;p&gt;不妨设 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;a&apos;x_0 b&apos; = k_1 m&apos; + b&apos;&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，因为 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;msup&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;a x_0 b&apos; - b = d a&apos; x_0 b&apos; - b = d (k_1 m&apos; + b&apos;) - b = d k_1 m&apos; + d b&apos; - b = k_1 m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，所以 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;∣&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m \mid a(x_0 b&apos;) - b&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，即 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;a (x_0 b&apos;) \equiv b \pmod m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;。因此 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;x \equiv x_0 b&apos; \pmod m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 是同余方程 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;ax \equiv b \pmod m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的一个特解。充分性得证。&lt;/p&gt;
&lt;p&gt;下面考虑同余方程 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;ax \equiv b \pmod m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的解的个数。由 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;x \equiv x_0 b&apos; \pmod m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，可得&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;1em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mo&gt;±&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mo&gt;±&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;x \equiv x_0 b&apos; + k m&apos; \pmod {m&apos;}, k = 0, \pm 1, \pm 2, ...&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;。。。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;例 2.3.1&lt;/strong&gt; 求同余方程 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;9&lt;/mn&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mn&gt;12&lt;/mn&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mn&gt;15&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;9x \equiv 12 \pmod {15}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的解。&lt;/p&gt;
&lt;p&gt;解：&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;gcd&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;9&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mn&gt;15&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo&gt;∣&lt;/mo&gt;&lt;mn&gt;12&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\gcd(9, 15) = 3, 3 \mid 12&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，因此该方程有解。计算&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mn&gt;9&lt;/mn&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/mfrac&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mn&gt;15&lt;/mn&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/mfrac&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo mathvariant=&quot;normal&quot; lspace=&quot;0em&quot; rspace=&quot;0em&quot;&gt;′&lt;/mo&gt;&lt;/msup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mn&gt;12&lt;/mn&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/mfrac&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;a&apos; = \frac{9}{3} = 3, m&apos; = \frac{15}{3} = 5, b&apos; = \frac{12}{3} = 4&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;考虑同余方程 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;3x \equiv 1 \pmod 5&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的解。易得解为 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;x_0 = 2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;。&lt;/p&gt;
&lt;p&gt;通过 定理 2.3.1 的证明过程可知&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;1em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mn&gt;15&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;g&lt;/mi&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;9&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mn&gt;15&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;x \equiv 2 \times 4 + k \times 5 \pmod {15}, k = 0, 1, ..., gcd(9, 15) - 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;p&gt;是同余方程 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;9&lt;/mn&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mn&gt;12&lt;/mn&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mn&gt;15&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;9x \equiv 12 \pmod {15}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的全部解，即 8，13，3。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;中国剩余定理&quot;&gt;中国剩余定理&lt;/h2&gt;
&lt;p&gt;对于同余方程组&lt;/p&gt;
&lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: Got function &apos;\\&apos; with no arguments as argument to &apos;\left&apos; at position 6: \left\̲\̲{
	\begin{array…&quot; style=&quot;color:#cc0000&quot;&gt;\left\\{
	\begin{array}{lc}
		k \equiv a \pmod 3 \\\\
		k \equiv b \pmod 5 \\\\
		k \equiv c \pmod 7 \\\\
	\end{array}
\right.&lt;/span&gt;
&lt;p&gt;若能求出&lt;/p&gt;
&lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: Got function &apos;\\&apos; with no arguments as argument to &apos;\left&apos; at position 6: \left\̲\̲{
	\begin{array…&quot; style=&quot;color:#cc0000&quot;&gt;\left\\{
	\begin{array}{lc}
		x \equiv 1 \pmod 3 \\\\
		x \equiv 0 \pmod 5 \\\\
		x \equiv 0 \pmod 7
	\end{array}
\right.&lt;/span&gt;
&lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: Got function &apos;\\&apos; with no arguments as argument to &apos;\left&apos; at position 6: \left\̲\̲{
	\begin{array…&quot; style=&quot;color:#cc0000&quot;&gt;\left\\{
	\begin{array}{lc}
		y \equiv 0 \pmod 3 \\\\
		y \equiv 1 \pmod 5 \\\\
		y \equiv 0 \pmod 7
	\end{array}
\right.&lt;/span&gt;
&lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: Got function &apos;\\&apos; with no arguments as argument to &apos;\left&apos; at position 6: \left\̲\̲{
	\begin{array…&quot; style=&quot;color:#cc0000&quot;&gt;\left\\{
	\begin{array}{lc}
		z \equiv 0 \pmod 3 \\\\
		z \equiv 0 \pmod 5 \\\\
		z \equiv 1 \pmod 7
	\end{array}
\right.&lt;/span&gt;
&lt;p&gt;的解 x, y, z，那么会有 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mn&gt;105&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;k = ax + by + cz \pmod {105}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;.&lt;/p&gt;
&lt;p&gt;对于 x ，不难发现 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;∣&lt;/mo&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;∣&lt;/mo&gt;&lt;mn&gt;7&lt;/mn&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;x \mid 5, x \mid 7, x \equiv 1 \pmod 3&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; ，因此可以令 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;35&lt;/mn&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;x = 35t&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，则有 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;35&lt;/mn&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;35t - 3s = 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;p&gt;根据 &lt;strong&gt;定理 1.2.3&lt;/strong&gt; 可知，整数 t, s 必定存在。&lt;/p&gt;
&lt;p&gt;那么不难解出&lt;/p&gt;
&lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: Got function &apos;\\&apos; with no arguments as argument to &apos;\left&apos; at position 6: \left\̲\̲{
	\begin{array…&quot; style=&quot;color:#cc0000&quot;&gt;\left\\{
	\begin{array}{cl}
		x = 70 \\\\
		y = 21 \\\\
		z = 15
	\end{array}
\right.&lt;/span&gt;
&lt;p&gt;则 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;70&lt;/mn&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;21&lt;/mn&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;15&lt;/mn&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mn&gt;105&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;k = 70a + 21b + 15c \pmod {105}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;.&lt;/p&gt;
&lt;p&gt;一般地，给定 n 个互素的整数 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;p_1, p_2, ..., p_n&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，对于同余方程组&lt;/p&gt;
&lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: Got function &apos;\\&apos; with no arguments as argument to &apos;\left&apos; at position 6: \left\̲\̲{
	\begin{array…&quot; style=&quot;color:#cc0000&quot;&gt;\left\\{
	\begin{array}{cl}
k \equiv a_1 \pmod {p_1} \\\\
k \equiv a_2 \pmod {p_2} \\\\
...
k \equiv a_n \pmod {p_n}
	\end{array}
\right.&lt;/span&gt;
&lt;p&gt;有解 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/msub&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/msub&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;k = a_1 x_1 + a_2 x_2 + ... + a_n x_n \pmod {p_1 p_2 ... p_n}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，其中&lt;/p&gt;
&lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: Got function &apos;\\&apos; with no arguments as argument to &apos;\left&apos; at position 6: \left\̲\̲{
	\begin{array…&quot; style=&quot;color:#cc0000&quot;&gt;\left\\{
	\begin{array}{cl}
x_1 \equiv 1 \pmod {p_1} \\\\
x_1 \equiv 0 \pmod {p_2} \\\\
...
x_1 \equiv 0 \pmod {p_n}
	\end{array}
\right.&lt;/span&gt;
&lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: Got function &apos;\\&apos; with no arguments as argument to &apos;\left&apos; at position 6: \left\̲\̲{
	\begin{array…&quot; style=&quot;color:#cc0000&quot;&gt;\left\\{
	\begin{array}{cl}
x_2 \equiv 0 \pmod {p_1} \\\\
x_2 \equiv 1 \pmod {p_2} \\\\
...
x_2 \equiv 0 \pmod {p_n}
	\end{array}
\right.&lt;/span&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;.&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;...&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;span class=&quot;katex-error&quot; title=&quot;ParseError: KaTeX parse error: Got function &apos;\\&apos; with no arguments as argument to &apos;\left&apos; at position 6: \left\̲\̲{
	\begin{array…&quot; style=&quot;color:#cc0000&quot;&gt;\left\\{
	\begin{array}{cl}
x_n \equiv 0 \pmod {p_1} \\\\
x_n \equiv 0 \pmod {p_2} \\\\
...
x_n \equiv 1 \pmod {p_n}
	\end{array}
\right.&lt;/span&gt;
&lt;hr&gt;
&lt;h1 id=&quot;rsa&quot;&gt;RSA&lt;/h1&gt;
&lt;p&gt;密钥生成:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;选择两个大素数 p, q.&lt;/li&gt;
&lt;li&gt;计算 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;ϕ&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;q&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;n = pq, z = \phi(n) = (p - 1)(q - 1)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;.&lt;/li&gt;
&lt;li&gt;随机选取 e(e &amp;lt; n), 使得 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;gcd&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\gcd(e, z) = 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;.&lt;/li&gt;
&lt;li&gt;选取 d 使得 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;∣&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;z|(ed - 1)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, 即 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.6667em&quot;&gt;&lt;/mspace&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;ed \mod z = 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, 即 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;ed \equiv 1 \pmod {z}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;. e, d 互为乘法逆元.&lt;/li&gt;
&lt;li&gt;公钥为 (n, e). 私钥为 (n, d).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;加密: &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;/msup&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.6667em&quot;&gt;&lt;/mspace&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;c = m^e \mod n&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;p&gt;解密: &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;/msup&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.6667em&quot;&gt;&lt;/mspace&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m = c^d \mod n&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;共模攻击&quot;&gt;共模攻击&lt;/h2&gt;
&lt;p&gt;用两个及以上的公钥来加密同一条明文 m.&lt;/p&gt;
&lt;p&gt;已知:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;o&lt;/mi&gt;&lt;mi&gt;w&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;c_1 = pow(m, e_1, n)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/li&gt;
&lt;li&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mi&gt;o&lt;/mi&gt;&lt;mi&gt;w&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;c_2 = pow(m, e_2, n)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/li&gt;
&lt;li&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;gcd&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\gcd(e_1, e_2) = 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/li&gt;
&lt;li&gt;存在整数 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;s_1, s_2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, 使得 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;g&lt;/mi&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;gcd(e_1, e_2) = e_1 s_1 + e_2 s_2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;求证: &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msubsup&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;msubsup&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.6667em&quot;&gt;&lt;/mspace&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;(c_1^{s_1} \times c_2^{s_2}) \mod n = m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;p&gt;证明：易知，有 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;e_1 s_1 + e_2 s_2 = 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，则&lt;/p&gt;
&lt;p&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m \equiv m^{e_1 s_1 + e_2 s_2} \pmod{n}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;p&gt;即&lt;/p&gt;
&lt;p&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/msup&gt;&lt;msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/msup&gt;&lt;mo&gt;⋅&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/msup&gt;&lt;msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/msup&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;(m^{e_1})^{s_1} \cdot (m^{e_2})^{s_2} \equiv m \pmod{n}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;p&gt;由 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/msup&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.6667em&quot;&gt;&lt;/mspace&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;c_1 = m^{e_1} \mod n&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，显然有 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/msup&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;c_1 \equiv m^{e_1} \pmod{n}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;。&lt;/p&gt;
&lt;p&gt;那么&lt;/p&gt;
&lt;p&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msubsup&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/msup&gt;&lt;msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/msup&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;c_1^{s_1} \equiv (m^{e_1})^{s_1} \pmod{n}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;p&gt;同理，有 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msubsup&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/msup&gt;&lt;msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/msup&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;c_2^{s_2} \equiv (m^{e_2})^{s_2} \pmod{n}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;。&lt;/p&gt;
&lt;p&gt;则&lt;/p&gt;
&lt;p&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msubsup&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mo&gt;⋅&lt;/mo&gt;&lt;msubsup&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;≡&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.4444em&quot;&gt;&lt;/mspace&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mspace width=&quot;0.3333em&quot;&gt;&lt;/mspace&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;c_1^{s_1} \cdot c_2^{s_2} \equiv m^{e_1 s_1 + e_2 s_2} \equiv m \pmod{n}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;p&gt;又 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m &amp;lt; n&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，有 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.6667em&quot;&gt;&lt;/mspace&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;m \mod n = m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，则 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msubsup&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mo&gt;⋅&lt;/mo&gt;&lt;msubsup&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/msubsup&gt;&lt;mspace&gt;&lt;/mspace&gt;&lt;mspace width=&quot;0.6667em&quot;&gt;&lt;/mspace&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;m&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;c_1^{s_1} \cdot c_2^{s_2} \mod n = m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/p&gt;
&lt;p&gt;证毕！&lt;/p&gt;
&lt;p&gt;那么只要求出 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;s_1, s_2&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，就能还原明文。&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;群论&quot;&gt;群论&lt;/h1&gt;
&lt;p&gt;设G 是一个具有代数运算 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo&gt;∘&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\circ&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的非空集合，并且满足：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;结合律：&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;∀&lt;/mi&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo separator=&quot;true&quot;&gt;,&lt;/mo&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mo&gt;∈&lt;/mo&gt;&lt;mi&gt;G&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\forall a,b,c \in G&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，有&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;∘&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;∘&lt;/mo&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;∘&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo&gt;∘&lt;/mo&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;(a \circ b) \circ c = a \circ (b \circ c)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;有单位元：G 中存在一个元素 e ：&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;∀&lt;/mi&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;∈&lt;/mo&gt;&lt;mi&gt;G&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\forall a \in G&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; ，有&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mo&gt;∘&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;∘&lt;/mo&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;2.718&lt;/mn&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;e \circ a = a \circ e =2.718 a&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;有逆元：对于任意 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;∈&lt;/mo&gt;&lt;mi&gt;G&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;a \in G&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; ，存在一个元素 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;∈&lt;/mo&gt;&lt;mi&gt;G&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;a^{-1} \in G&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，使得&lt;/p&gt;
&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;∘&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msup&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;∘&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;a \circ a^{-1} = a^{-1} \circ a = e&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;则称 G 关于代数运算 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo&gt;∘&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;\circ&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt; 的构成一个群。&lt;/p&gt;
&lt;p&gt;模正整数 n 的最小非负完全剩余系，对于模 n 的加法构成一个群，这个群称为 &lt;strong&gt;整数模 n 加群&lt;/strong&gt;，起单位元为 0，a 的逆元是 n - a。&lt;/p&gt;
&lt;p&gt;元素在数域 P 中的全体 n 级可逆矩阵对于矩阵的乘法构成一个群，这个群记为 &lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;G&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;L&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/msub&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;P&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;GL_n(P)&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;，称为 n。级一般线性群。&lt;/p&gt;</content><category term="math"/></entry><entry><id>https://nonmirror.icu/posts/psychology-master/</id><title type="text">Psychology Master</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/psychology-master/"/><updated>2025-10-05T01:51:20.000Z</updated><published>2025-10-05T01:51:20.000Z</published><summary type="text">马太效应(the Matthew Effect) 资源分配与心理预期相互强化，塑造出富者愈富，贫者愈贫的循环模式。 亲密关系中，那些擅长表达情感的人往往能获得更多情感反馈，进而形成更成熟的情感处理能力，相反，内向者可能因偶尔的沟通失误被贴上冷漠的标签。 要打破马太效应的消极循环，需要建立反脆弱的心里策略，主动创造小心成功体验来积累心理资本，比如记录微小成就；在社交中采用“五分钟法则”，强迫自己在新环境中至少与人交流五分钟。学会识别并挑战那些自动产生的消极预期，用具体行动证明 自我 涉嫌的 虚假性 。 tags: 自…</summary><content type="html">&lt;h1 id=&quot;马太效应the-matthew-effect&quot;&gt;马太效应(the Matthew Effect)&lt;/h1&gt;
&lt;p&gt;资源分配与心理预期相互强化，塑造出富者愈富，贫者愈贫的循环模式。&lt;/p&gt;
&lt;p&gt;亲密关系中，那些擅长表达情感的人往往能获得更多情感反馈，进而形成更成熟的情感处理能力，相反，内向者可能因偶尔的沟通失误被贴上冷漠的标签。&lt;/p&gt;
&lt;p&gt;要打破马太效应的消极循环，需要建立反脆弱的心里策略，主动创造小心成功体验来积累心理资本，比如记录微小成就；在社交中采用“五分钟法则”，强迫自己在新环境中至少与人交流五分钟。学会识别并挑战那些自动产生的消极预期，用具体行动证明&lt;strong&gt;自我&lt;/strong&gt;涉嫌的&lt;strong&gt;虚假性&lt;/strong&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;tags: 自我实现预言&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1 id=&quot;韦伯效应the-weber-effect&quot;&gt;韦伯效应(the Weber Effect)&lt;/h1&gt;
&lt;p&gt;人们对外界变化的敏感度与原始刺激的强度成正比。&lt;/p&gt;
&lt;p&gt;长期被忽视的伴侣可能因为一句突如其来的问候而感动落泪，而终日被甜蜜包围的人却需要更浓烈的情感表达才能产生同等程度的愉悦。&lt;/p&gt;
&lt;p&gt;韦伯效应解释了人类认知的底层逻辑，它提醒我们：真正的洞察力不在于捕捉绝对数值的变化，而在于理解参照系的力量。&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;墨菲定律&quot;&gt;墨菲定律&lt;/h1&gt;
&lt;p&gt;焦虑情绪对行为模式的重塑。&lt;/p&gt;
&lt;p&gt;人们倾向于收集作证自身恐惧的信息。当注意力持续聚焦于可能发生的负面事件时，我们的认知资源会不自觉地被重新分配，行为模式也随之发生微妙偏移，最终在现实世界编织出与恐惧相呼应的证据链。&lt;/p&gt;
&lt;p&gt;打破这个循环的关键在于学会与不确定性共处。&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;习得性无助&quot;&gt;习得性无助&lt;/h1&gt;
&lt;p&gt;当个体反复经历无法控制的负面事件后，即使转机出现，也会主动放弃抵抗。&lt;/p&gt;</content><category term="psychology"/></entry><entry><id>https://nonmirror.icu/posts/fuzz/</id><title type="text">Fuzz</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/fuzz/"/><updated>2025-10-03T07:14:44.000Z</updated><published>2025-10-03T07:14:44.000Z</published><summary type="text">To be done... @source https://lidaxian121.github.io/posts/fuzz/ Example fuzzing process 迁移注记 原文图片未随仓库迁入：img 2 2.png The output can be very long (a thousand lines) or very short (3 lines). WOW The quality of a fuzzer depends on: 1. Selection of seeds: the quali…</summary><content type="html">&lt;p&gt;To be done…
@source &lt;a href=&quot;https://lidaxian121.github.io/posts/fuzz/&quot;&gt;https://lidaxian121.github.io/posts/fuzz/&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;example&quot;&gt;Example&lt;/h1&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// gcc test.c -o test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    char&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; input&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    read&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(STDIN_FILENO, input, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;A&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; input&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;B&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;deadbeef&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // crash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    write&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(STDOUT_FILENO, input, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# fuzzer.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; subprocess&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;target &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;./test&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;inps &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;AA&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;BB&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;BA&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;AB&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; inp &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; inps:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        subprocess.run([target], &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;inp.encode(), &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;capture_output&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;check&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    except&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; subprocess.CalledProcessError:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;bug found with input: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;inp&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; bug found &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; input&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;AB&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id=&quot;fuzzing-process&quot;&gt;fuzzing process&lt;/h1&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：img&lt;/span&gt;&lt;code&gt;2-2.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// gcc test.c -o test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    char&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; input&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    read&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(STDIN_FILENO, input, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;A&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        puts&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;AAA&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;B&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;            puts&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;BBB&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;C&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;deadbeef&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // crash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# fuzzer.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# python3 fuzzer.py &amp;gt;&amp;gt; output.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; subprocess&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; random&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;target &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;./test&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;inps &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;A&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;B&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# corpus&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;count &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; True&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    inp &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; inps[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# select a seed from corpus&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    inp &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; random.choice([&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;A&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;B&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;C&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# mutate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    del&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; inps[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    count &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        comp &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; subprocess.run([target], &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;inp.encode(), &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;capture_output&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;check&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; comp.stdout &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; b&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# has some output&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            inps.append(inp) &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# add to corpus&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;inp: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;inp&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;, inps: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;inps&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;flush&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    except&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; subprocess.CalledProcessError:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;inp: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;inp&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;, inps: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;inps&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;flush&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;bug found with input: &apos;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;inp&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        break&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; count &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 100&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; or&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(inps) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# periodically reset corpus&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        inps &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;A&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;B&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;inp: AB, inps: [&apos;B&apos;, &apos;AB&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;inp: BC, inps: [&apos;AB&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;inp: ABC, inps: []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;bug found with input: &apos;ABC&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The output can be very long (a thousand lines) or very short (3 lines). WOW&lt;/p&gt;
&lt;p&gt;The quality of a fuzzer depends on:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Selection of seeds:&lt;/strong&gt; the quality of &lt;code&gt;corpus&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mutation:&lt;/strong&gt; the efficiency of random variation&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Coverage:&lt;/strong&gt; the overhead of the implementation method&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h1 id=&quot;afl-american-fuzz-loop&quot;&gt;AFL (American Fuzz Loop)&lt;/h1&gt;
&lt;p&gt;Two fuzz approaches of AFL&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;For open-source software, instrument it directly during compilation&lt;/li&gt;
&lt;li&gt;For close-source software, use QEMU to fuzz the byte code&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;instrumentation-插桩&quot;&gt;Instrumentation (插桩)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;While ensuring the logical integrity of the program, make the program output some logs to collect the status during runtime&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; test_var &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// original&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; b&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() { ...; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() { ...; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// instrumented&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; b&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() { &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;printf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;test_var: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%d\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, test_var); ...; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() { &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;printf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;test_var: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%d\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, test_var); ...; }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;example-1&quot;&gt;example&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; had_exec&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E36209&quot;&gt;  had_exec&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; b&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E36209&quot;&gt;  had_exec&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; c&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E36209&quot;&gt;  had_exec&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;had_exec&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    puts&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;function `a` had been called&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;demo&quot;&gt;demo&lt;/h3&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20251004171318202&lt;/span&gt;&lt;code&gt;image-20251004171318202.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In addition to the target program, you also need to prepare the copus folder &lt;code&gt;fuzz_in&lt;/code&gt; and the folder &lt;code&gt;fuzz_out&lt;/code&gt; for storing the fuzz results. Put some random text in the former, and leave the latter empty.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// afl-gcc -g -o ./afl-test/afl-test ./afl-test/testcase.c&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; #include&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; #include&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; #include&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; #include&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &amp;lt;signal.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; vuln&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; len &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; strlen&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(str);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   // crash case 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;A&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; len &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 66&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        raise&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(SIGSEGV);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   // crash case 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;F&apos;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; len &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 6&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        raise&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(SIGSEGV);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    } &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        printf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;it is good!&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; argc&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;argv&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    char&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; buf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // crash case 3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    gets&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(buf);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // stack overflow vulnerability&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // crash case 4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    printf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(buf);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // format string vulnerability&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    vuln&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(buf);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Use command &lt;code&gt;afl-fuzz -i fuzz_in -o fuzz_out ./afl-test/afl-test&lt;/code&gt; to fuzz。&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20251004171859706&lt;/span&gt;&lt;code&gt;image-20251004171859706.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;太黑客了。&lt;/p&gt;
&lt;p&gt;Check the seed that caused the program to crash under &lt;code&gt;fuzz_out/default/crashes&lt;/code&gt;&lt;/p&gt;
&lt;ol start=&quot;0&quot;&gt;
&lt;li&gt;crash case 2&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20251004173249791&lt;/span&gt;&lt;code&gt;image-20251004173249791.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;crash case 3&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20251004173302271&lt;/span&gt;&lt;code&gt;image-20251004173302271.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;crash case 3&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20251004172127854&lt;/span&gt;&lt;code&gt;image-20251004172127854.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;crash case 1&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20251004173331488&lt;/span&gt;&lt;code&gt;image-20251004173331488.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;cool&lt;/p&gt;</content><category term="binary"/></entry><entry><id>https://nonmirror.icu/posts/trampolining/</id><title type="text">Trampolining</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/trampolining/"/><updated>2025-09-26T09:53:23.000Z</updated><published>2025-09-26T09:53:23.000Z</published><summary type="text">Trampolining is a technique that decorates recursion as iteration. For a language like Python that does not optimize tail calls, strict tail recursion can be achieved by combining Trampolining with tail calls. The basic unit of this method is a thunk, which re…</summary><content type="html">&lt;hr&gt;
&lt;p&gt;Trampolining is a technique that decorates recursion as iteration. For a language like Python that does not optimize tail calls, strict tail recursion can be achieved by combining Trampolining with tail calls.&lt;/p&gt;
&lt;p&gt;The basic unit of this method is a thunk, which represents an unevaluated operation. The simplest way to create a thunk and simulate an unevaluated operation is to wrap the operation in a parameterless function and save it for later evaluation.&lt;/p&gt;
&lt;p&gt;Thunk “unpacks” through invocation.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; my_thunk1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; lambda&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: sqrt(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;16384&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 22&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; my_thunk1()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It can also be nested, which requires multiple unpackages.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; my_nested_thunk &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; lambda&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;lambda&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;lambda&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; thunk2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; my_nested_thunk()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; thunk3 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; thunk2()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; result &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; thunk3()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; result&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;20&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The unpacking of a nested thunk can be accomplished by repeatedly calling it until a value is finally returned. This is the &lt;code&gt;trampolining&lt;/code&gt; process.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; trampolining&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(value):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    while&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; callable&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(value):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        value &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; value()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; value&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;factorial:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; thunk_factorial&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(n, so_far&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; thunk&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; so_far&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; thunk_factorial(n &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, so_far &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; thunk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; factorial&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(n):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    value &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; thunk_factorial(n)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    while&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; callable&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(value): &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# While value is still a thunk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        value &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; value()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; value&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In each iteration, only one step of the factorial is calculated, and the frame is closed immediately after the calculation is completed. Instead of creating and returning another nested call as &lt;code&gt;return tail_factorial(n - 1, so_far * n)&lt;/code&gt; is used in tail_factorial(ordinary tail recursion writing), it returns an unevaluated thunk.&lt;/p&gt;</content></entry><entry><id>https://nonmirror.icu/posts/idapython/</id><title type="text">IDAPython</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/idapython/"/><updated>2025-09-26T02:18:57.000Z</updated><published>2025-09-26T02:18:57.000Z</published><summary type="text">虚拟环境 idapyswitch 换到虚拟环境的底层版本的 dylib（虚拟环境没有dylib） vscode setting.json 配置 加入： the Legend of Zelda Ⅲ 可打印字符映射</summary><content type="html">&lt;h2 id=&quot;虚拟环境&quot;&gt;虚拟环境&lt;/h2&gt;
&lt;p&gt;idapyswitch 换到虚拟环境的底层版本的 dylib（虚拟环境没有dylib）&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# ~/.idapro/idapythonrc.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; os&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; sys&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; site&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# pyenv virtualenv 根目录&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;VENV&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; os.path.expanduser(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;~/.pyenv/versions/reverse&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 兼容 macOS / Linux&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;py_ver &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;python&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;sys.version_info.major&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;sys.version_info.minor&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;site_pkgs &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; os.path.join(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;VENV&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;lib&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, py_ver, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;site-packages&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 把 venv/bin 放进 PATH，方便 subprocess 找到该环境下的命令&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;venv_bin &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; os.path.join(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;VENV&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;bin&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;os.environ[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;PATH&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; venv_bin &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; os.pathsep &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; os.environ.get(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;PATH&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;os.environ[&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;VIRTUAL_ENV&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; VENV&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 把虚拟环境 site-packages 接入 IDA 当前解释器&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; os.path.isdir(site_pkgs):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    site.addsitedir(site_pkgs)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 把用户包目录也并入&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;user_site &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; os.path.join(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;VENV&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;lib&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, py_ver, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;site-packages&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; os.path.isdir(user_site) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; user_site &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; sys.path:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    sys.path.insert(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, user_site)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[idapythonrc] VIRTUAL_ENV =&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, os.environ.get(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;VIRTUAL_ENV&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[idapythonrc] site-packages =&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, site_pkgs)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[idapythonrc] sys.executable =&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, sys.executable)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;[idapythonrc] sys.version =&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, sys.version)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;vscode-settingjson-配置&quot;&gt;vscode setting.json 配置&lt;/h2&gt;
&lt;p&gt;加入：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    &quot;python.analysis.extraPaths&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;/Applications/IDA Professional 9.2.app/Contents/MacOS/python&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    &quot;python.autoComplete.extraPaths&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;/Applications/IDA Professional 9.2.app/Contents/MacOS/python&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;the Legend of Zelda Ⅲ&lt;/code&gt; 可打印字符映射&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;f &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ida_funcs.get_func(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;131F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; find_xor_sub&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(ea):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&quot;&quot; Return the second operand of xor and sub &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    f &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ida_funcs.get_func(ea)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ea &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Heads(f.start_ea, f.end_ea):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        insn &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; idaapi.insn_t()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        idaapi.decode_insn(insn, ea)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; idaapi.decode_insn(insn, ea):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; insn.itype &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; idaapi.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;NN_xor&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                xor_val &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; insn.ops[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; insn.itype &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; idaapi.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;NN_sub&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                sub_val &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; insn.ops[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;].value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; [xor_val, sub_val]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;==============================&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;correct_path &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;A&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;V&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;T&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;S&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;J&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;U&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;N&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;B&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;C&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;P&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;I&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;B&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;K&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;A&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;M&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;Q&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;F&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;Q&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;T&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;Z&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {node:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; node &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; correct_path}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ea &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Heads(f.start_ea, f.end_ea):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    insn &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; idaapi.insn_t()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    idaapi.decode_insn(insn, ea)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ida_idp.is_call_insn(insn):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        input_val &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; get_wide_byte(ea&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        op &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; insn.ops[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op.type &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ida_ua.o_near &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op.type &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ida_ua.o_mem:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            target_addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; op.addr&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            idc.jumpto(target_addr)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            f_in &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ida_funcs.get_func(target_addr)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            xor_val, sub_val &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; find_xor_sub(target_addr)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            returned_val &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; chr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((input_val &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; xor_val) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; sub_val)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; returned_val &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; map&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;                    map&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[returned_val] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; chr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(input_val)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; target_addr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ida_idaapi.&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;BADADDR&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ida_funcs.get_func(target_addr):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            func_name &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Here from &apos;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{chr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(input_val)&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos; to &apos;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;returned_val&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            idc.set_cmt(ea, func_name, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(ida_funcs.get_func_name(target_addr))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Call at &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%x&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ea)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;idc.jumpto(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;0x&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;131F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;==============================&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;.join([&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;[node] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; node &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; correct_path])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content><category term="binary"/></entry><entry><id>https://nonmirror.icu/posts/msvc-initialization/</id><title type="text">MSVC initialization</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/msvc-initialization/"/><updated>2025-08-29T00:42:27.000Z</updated><published>2025-08-29T00:42:27.000Z</published><summary type="text">如上代码，函数 my init function 在 main 函数之前执行。 MSVC 编译器的 CRT 入口点通常为 wmainCRTstartup / mainCRTstartup 跟进 scrt common main seh 可以看到如下代码 这部分代码有大部分冗余，重要的是以下部分 xc a 和 xc z 分别为初始化函数指针的头尾地址 可以看到, 连同语言初始化函数 pre cpp initializer , 我们自定义的 init ptr也在里面 initterm 是将函数指针压栈后调用它们的过程，…</summary><content type="html">&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 创建一个名为 .CRT$XCU 的节&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#pragma&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; section&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;.CRT$XCU&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 定义一个函数指针类型&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(__cdecl&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; FPTR)(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 定义一个函数，它将在 main 之前运行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 添加__declspec(noinline)确保函数不被优化&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;__declspec(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;noinline&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; my_init_function&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	volatile&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; PVOID&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; hVEH &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; AddVectoredExceptionHandler&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, VEH_SIGNLE_STEP);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;hVEH) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;		std&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::cerr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;Failed to add VEH handler.&quot;&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; std&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;::endl;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;		exit&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 在 .CRT$XCU 节中put my_init_function 的地址&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;__declspec(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;selectany&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; __declspec&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;allocate&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;.CRT$XCU&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;FPTR init_ptr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; my_init_function;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 使用一个引用来确保 init_ptr 不会被优化掉&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; force_init_ptr_ref &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;init_ptr;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如上代码，函数 &lt;code&gt;my_init_function&lt;/code&gt; 在 main 函数之前执行。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;MSVC 编译器的 CRT 入口点通常为 &lt;code&gt;wmainCRTstartup&lt;/code&gt; / &lt;code&gt;mainCRTstartup&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; __usercall wmainCRTStartup@&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;eax&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; Code@&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;esi&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;  __security_init_cookie&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _scrt_common_main_seh&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(Code);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;跟进 &lt;code&gt;_scrt_common_main_seh&lt;/code&gt; 可以看到如下代码&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;asm&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	call&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    __initterm_e&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	pop&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     ecx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	pop&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     ecx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	test&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;    eax&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;eax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	jz&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      short loc_401E02&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	mov&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;ebp&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;+ms_exc.registration.TryLevel], &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0FFFFFFFEh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	mov&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;     eax&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0FFh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	jmp&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     loc_401EF1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;loc_401E02:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    push&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    offset ___xc_z  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; Last&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    push&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    offset ___xc_a  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; First&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    call&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    __initterm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这部分代码有大部分冗余，重要的是以下部分&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;asm&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    __initterm_e&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    offset ___xc_z  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; Last&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    offset ___xc_a  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; First&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    __initterm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;___xc_a&lt;/code&gt; 和 &lt;code&gt;___xc_z&lt;/code&gt; 分别为初始化函数指针的头尾地址&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;asm&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;rdata:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00403138&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ___xc_a         &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;dd&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                    ; DATA XREF: __scrt_common_main_seh+75↑o&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;rdata:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;0040313C &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; void (__cdecl *pre_cpp_initializer)()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;rdata:&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;0040313C pre_cpp_initializer &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;dd&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; offset pre_cpp_initialization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;rdata:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00403140&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; ; void (__cdecl *init_ptr)()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;rdata:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00403140&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ?init_ptr@@3P6AXXZA &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;dd&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; offset ?my_init_function@@YAXXZ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;rdata:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00403140&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                                         ; DATA XREF: .data:void * force_init_ptr_ref↓o&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;rdata:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00403140&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                                         ; my_init_function(void)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;rdata:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00403144&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; ; void (__cdecl *__xc_z[])()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;rdata:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;00403144&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ___xc_z         &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;dd&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                    ; DATA XREF: __scrt_common_main_seh:loc_401E02↑o&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以看到, 连同语言初始化函数 pre_cpp_initializer , 我们自定义的 init_ptr也在里面&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;code&gt;__initterm&lt;/code&gt; 是将函数指针压栈后调用它们的过程，逻辑在ucrtbase.dll中，主要就是通过迭代将数组中的函数全都执行一遍。&lt;/p&gt;</content><category term="windows"/></entry><entry><id>https://nonmirror.icu/posts/junk-code/</id><title type="text">Junk code</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/junk-code/"/><updated>2025-08-28T08:10:14.000Z</updated><published>2025-08-28T08:10:14.000Z</published><summary type="text">GCC内联汇编 @source https://blog.csdn.net/hans774882968/article/details/127141703 https://bbs.kanxue.com/thread 279604.htm https://blog.csdn.net/abel big xu/article/details/117927674 https://forum.butian.net/share/2930 https://blog.csdn.net/m0 46296905/article/det…</summary><content type="html">&lt;h1 id=&quot;gcc内联汇编&quot;&gt;GCC内联汇编&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;@source &lt;a href=&quot;https://blog.csdn.net/hans774882968/article/details/127141703&quot;&gt;https://blog.csdn.net/hans774882968/article/details/127141703&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://bbs.kanxue.com/thread-279604.htm&quot;&gt;https://bbs.kanxue.com/thread-279604.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/abel_big_xu/article/details/117927674&quot;&gt;https://blog.csdn.net/abel_big_xu/article/details/117927674&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://forum.butian.net/share/2930&quot;&gt;https://forum.butian.net/share/2930&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/m0_46296905/article/details/117336574&quot;&gt;https://blog.csdn.net/m0_46296905/article/details/117336574&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;基本格式&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;asm&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; volatile&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;     &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;汇编语句&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     : 输出部分&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     : 输入部分&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     : 会被修改的部分(clobbered &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;register&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;汇编语句必填，其它三部分可选&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; src &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; dst;   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;	asm&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; volatile&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;movl %1, %0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;add $1, %0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;add $3, %0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        : &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;=r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (dst) &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        : &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (src)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;	printf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%d\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, dst);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;输出部分&quot;&gt;输出部分&lt;/h2&gt;
&lt;p&gt;表示当这段代码执行完后，对输出变量的约束。必要时在输出部分可以有多个约束，互相以逗号分隔。每个输出约束以&lt;code&gt;=/+&lt;/code&gt;开头，跟着一个限定符表示操作数的类型(见下表)。&lt;/p&gt;
&lt;h2 id=&quot;输入部分&quot;&gt;输入部分&lt;/h2&gt;
&lt;p&gt;当输出约束为空，若有输入约束，则必须保留分隔标记&lt;code&gt;.&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&quot;会被修改的部分&quot;&gt;会被修改的部分&lt;/h2&gt;
&lt;p&gt;顾名思义&lt;/p&gt;
&lt;h2 id=&quot;操作数&quot;&gt;操作数&lt;/h2&gt;










































































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;分类&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;限定符&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;描述&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;通用寄存器&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“a”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;将输入变量放入eax这里有一个问题：假设eax已经被使用，那怎么办？其实很简单：因为GCC 知道eax 已经被使用，它在这段汇编代码的起始处插入一条语句pushl %eax，将eax 内容保存到堆栈，然 后在这段代码结束处再增加一条语句popl %eax，恢复eax的内容&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“b”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;将输入变量放入ebx&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“c”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;将输入变量放入ecx&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“d”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;将输入变量放入edx&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“s”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;将输入变量放入esi&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“d”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;将输入变量放入edi&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“q”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;将输入变量放入eax，ebx，ecx，edx中的一个&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“r”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;将输入变量放入通用寄存器，也就是eax,ebx,ecx,edx,esi,edi中的一个&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“A”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;把eax和edx合成一个64 位的寄存器(use long longs)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;内存&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“m”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;内存变量&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“o”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;操作数为内存变量，但是其寻址方式是偏移量类型,也即是基址寻址，或者是基址加变址寻址&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“V”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;操作数为内存变量，但寻址方式不是偏移量类型&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“ ”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;操作数为内存变量，但寻址方式为自动增量&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“p”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;操作数是一个合法的内存地址（指针）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;寄存器或内存&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“g”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;将输入变量放入eax，ebx，ecx，edx中的一个,或者作为内存变量&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“X”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;操作数可以是任何类型&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;立即数&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“I”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;0-31之间的立即数（用于32位移位指令）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“J”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;0-63之间的立即数（用于64位移位指令）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“N”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;0-255之间的立即数（用于out指令）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“i”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;立即数&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“n”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;立即数，有些系统不支持除字以外的立即数， 这些系统应该使用“n”而不是“i”&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;匹配&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“0”,“1”…“9”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;表示用它限制的操作数与某个指定的操作数匹配,也即该操作数就是指定的那个操作数,例如“0”去描述“％1”操作数,那么“%1”引用的其实就是“%0”操作数,注意作为限定符字母的0-9与指令中的“％0”-“％9”的区别,前者描述操作数,后者代表操作数。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&amp;amp;&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;该输出操作数不能使用过和输入操作数相同的寄存器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;操作数类型&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“=”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;操作数在指令中是只写的（输出操作数）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“+”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;操作数在指令中是读写类型的（输入输出操作数）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;浮点数&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“f”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;浮点寄存器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“t”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;第一个浮点寄存器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“u”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;第二个浮点寄存器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;“G”&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;标准的80387浮点常数&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;%&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;该操作数可以和下一个操作数交换位置例如addl的两个操作数可以交换顺序（当然两个操作数都不能是立即数）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;#&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;部分注释，从该字符到其后的逗号之间所有字母被忽略&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;*&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;表示如果选用寄存器，则其后的字母被忽略c9ff95d8-f7d1-40e8-91a6-80c98643d2ea&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;操作数的编号从输出部分的第一个约束开始顺序记数, 在汇编语句中引用这些操作数时用 &lt;code&gt;%n&lt;/code&gt; 表示(n从0开始)&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;__asm__&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;_volatile__&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;movl %1,%0&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; : &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;=r&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (result) : &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;m&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (input));&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;参数调用&quot;&gt;参数调用&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,b&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,c&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,d&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,e&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,f&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,g&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,h&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,i&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,j&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,k&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,m&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    asm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;add %2,%0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;add %13,%1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        :&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;+r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(a),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;+r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(b),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;+r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(c)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        :&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(d),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(e),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(f),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(g),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(h),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(i),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(j),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(k),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(m)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    );&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;//此处给出的输出参数三个都是可读可写的&quot;+r&quot;而不是只可写的&quot;=r&quot;，当调用参数的数字，超过输入参数数量的就用下几个（超过数量）可读的参数&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;//如此处都为&quot;+r&quot;，则%12就是a，%13就是b，%14就是c&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    printf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;a=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;,b=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;,c=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;,d=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,a,b,c,d);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    int&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,b&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,c&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,d&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,e&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,f&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,g&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,h&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,i&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,j&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,k&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,m&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    asm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;add %2,%0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;add %13,%1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        :&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;=r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(a),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;+r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(b),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;+r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(c)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        :&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(d),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(e),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(f),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(g),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(h),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(i),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(j),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(k),&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(m)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    );&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;//此处a为只写所以不可读,%12为b，%13为c，%14就超出调用范围了&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    printf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;a=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;,b=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;,c=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;,d=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,a,b,c,d);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;/*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;a=5, b=3, c=2, d=3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;改-intel-风格&quot;&gt;改 Intel 风格&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;asm&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;.intel_syntax noprefix&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;/*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;编译选项加 -masm=intel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id=&quot;花指令&quot;&gt;花指令&lt;/h1&gt;
&lt;h2 id=&quot;jnx--jx&quot;&gt;jnx + jx&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;asm&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; volatile&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;	&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;.intel_syntax noprefix&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;jz 1f&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;jnz 1f&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;.byte 0xE8&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;1:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;永真条件跳转&quot;&gt;永真条件跳转&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;asm&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; volatile&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;.intel_syntax noprefix&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;push rbx&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;          // 64 位必须 rbx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;xor ebx, ebx&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // 32 位子寄存器清零并零扩展 rbx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;test ebx, ebx&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;jnz 1f&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;jz 2f&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;1:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;.byte 0xE8&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;2:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;pop rbx&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;.att_syntax prefix&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n\t&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    :&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    :&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    : &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;rbx&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;cc&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;memory&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ; __unwind {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; F3 &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt; 1E&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; FA                               endbr64&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 55&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                                        push    rbp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 48&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 89&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; E5                                  mov     rbp, rsp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 48&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 83&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; EC &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                               sub     rsp, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 64&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 48&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 25&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 28&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                         mov     rax, &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;fs&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;28&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 48&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 89&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 45&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; F8                               mov     [rbp&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;var_8], rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 31&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; C0                                     &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;xor&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     eax, eax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; C6 &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;45&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; F7 C3                               mov     [rbp&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;var_9], &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;C3h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 48&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 45&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; F7                               lea     rax, [rbp&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;var_9&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; FF D0                                     call    rax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; C6 45 08 96                               mov     byte ptr [rbp+8], 96h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; C6 45 09 46                               mov     byte ptr [rbp+9], 46h ; &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;F&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; C6 &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;45&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 40&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                               mov     byte ptr [rbp&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;Ah&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;], &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ; &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;@&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 90&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                                        nop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 48&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 45&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; F8                               mov     rax, [rbp&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;var_8&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; 64 48 33 04 25 28 00 00 00                xor     rax, fs:28h&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; 74 05                                     jz      short locret_425EF0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; E8 90 B1 FD FF                            call    ___stack_chk_fail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ; &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;---------------------------------------------------------------------------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;locret_425EF0:                          ; CODE &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;XREF&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;y0u_d0nt_n33d_to_r3verse_th1s&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;↑j&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; C9              						  leave&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; C3             						  retn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ; }&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // starts at 425EAA&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;重叠字节&quot;&gt;重叠字节&lt;/h2&gt;
&lt;p&gt;&lt;span class=&quot;missing-media&quot; role=&quot;note&quot; data-missing-media=&quot;&quot;&gt;&lt;strong&gt;迁移注记&lt;/strong&gt;&lt;span&gt;原文图片未随仓库迁入：image-20250828110334075&lt;/span&gt;&lt;code&gt;image-20250828110334075.png&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;asm&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; volatile&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;.intel_syntax noprefix&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 伪造指令序列：&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 1. mov ax, 05EBh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 2. xor eax, eax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 3. jz -2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 实际执行序列：&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 1. mov ax, 03EBh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 2. jmp short +5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 3. (跳转到真正的指令)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 构造字节序列：66 B8 EB 03 31 C0 74 FA E8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    .byte 0x66&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   // 66: 操作数大小前缀，表示 mov ax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    .byte 0xB8&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   // B8: mov reg, imm 的操作码&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    .byte 0xEB&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   // EB: mov ax 的立即数低位，同时是 jmp 的操作码&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    .byte 0x05&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   // 03: mov ax 的立即数高位，同时是 jmp 的偏移量&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    .byte 0x31&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   // 31: xor eax, eax 的操作码&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    .byte 0xC0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   // C0: xor eax, eax 的 ModR/M 字节&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    .byte 0x74&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   // 74: jz 的操作码&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    .byte 0xFA&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   // FA: jz 的偏移量&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    .byte 0xE8&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   // E8: junk code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;        &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;    .att_syntax&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    );&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;层面一：反汇编器看到的（静态分析）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;反汇编器会从第一个字节 &lt;code&gt;66&lt;/code&gt; 开始，顺序解析指令：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;66 B8 EB 05&lt;/code&gt;&lt;/strong&gt;：这是一条 &lt;code&gt;MOV&lt;/code&gt; 指令。
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;66&lt;/code&gt;：操作码前缀，表示操作数大小为 16 位。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;B8&lt;/code&gt;：&lt;code&gt;MOV AX, imm16&lt;/code&gt; 的操作码。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EB 05&lt;/code&gt;：16 位立即数 &lt;code&gt;05EBh&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;指令：&lt;code&gt;mov ax, 05EBh&lt;/code&gt;&lt;/strong&gt;。这条指令将 &lt;code&gt;0x05EB&lt;/code&gt; 移动到 &lt;code&gt;ax&lt;/code&gt; 寄存器。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;31 C0&lt;/code&gt;&lt;/strong&gt;：这是一条 &lt;code&gt;XOR&lt;/code&gt; 指令。
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;31&lt;/code&gt;：&lt;code&gt;XOR&lt;/code&gt; 的操作码。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C0&lt;/code&gt;：&lt;code&gt;eax, eax&lt;/code&gt; 的 ModR/M 字节。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;指令：&lt;code&gt;xor eax, eax&lt;/code&gt;&lt;/strong&gt;。这条指令将 &lt;code&gt;eax&lt;/code&gt; 寄存器清零。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;74 FA&lt;/code&gt;&lt;/strong&gt;：这是一条 &lt;code&gt;JZ&lt;/code&gt; 指令。
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;74&lt;/code&gt;：&lt;code&gt;JZ&lt;/code&gt; 的操作码。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FA&lt;/code&gt;：跳转偏移量 &lt;code&gt;-6&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;指令：&lt;code&gt;jz -6&lt;/code&gt;&lt;/strong&gt;。如果前一条指令结果为零，就向后跳转 6 个字节。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;E8&lt;/code&gt;&lt;/strong&gt;：这是一个 &lt;code&gt;CALL&lt;/code&gt; 指令的操作码，但它在这里只被看作一个字节。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;层面二：实际执行的（动态执行）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;实际的程序执行流会是完全不同的。&lt;code&gt;mov ax, 05EBh&lt;/code&gt; 的立即数部分被精心设计过，它包含了另一条指令：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EB 05&lt;/code&gt;&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;EB&lt;/code&gt;：&lt;code&gt;jmp short&lt;/code&gt; 的操作码。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;05&lt;/code&gt;：跳转偏移量 &lt;code&gt;+5&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;指令：&lt;code&gt;jmp +5&lt;/code&gt;&lt;/strong&gt;。当执行到这里时，程序会立即跳转到当前位置往后 5 个字节的地方。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此，实际执行流是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;mov ax, 05EBh&lt;/code&gt;&lt;/strong&gt; 执行时，会跳过后面的 &lt;code&gt;xor eax, eax&lt;/code&gt; 和 &lt;code&gt;jz -/3&lt;/code&gt; 指令。&lt;/li&gt;
&lt;li&gt;程序跳转到 &lt;code&gt;E8&lt;/code&gt; 所在的位置。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;E8&lt;/code&gt; 字节被解释为 &lt;strong&gt;&lt;code&gt;call&lt;/code&gt;&lt;/strong&gt; 指令的操作码。它会调用 &lt;code&gt;Real Code&lt;/code&gt;，然后 &lt;code&gt;Real Code&lt;/code&gt; 执行完毕后返回，程序继续正常执行。&lt;/li&gt;
&lt;/ol&gt;</content><category term="obfuscation"/></entry><entry><id>https://nonmirror.icu/posts/windows-exception-handling/</id><title type="text">Windows exception handling</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/windows-exception-handling/"/><updated>2025-08-15T02:13:58.000Z</updated><published>2025-08-15T02:13:58.000Z</published><summary type="text">VEH 1. 优先级最高 2. 进程级别，跨线程有效 3. 可以注册多个，形成处理链 4. 储存在堆内存中 不依赖栈帧，即使栈损坏也能工作 适合处理栈溢出等严重异常 SEH 1. 基于栈帧，线程布局 2. 嵌套结构，就近原则 3. 编译器集成，语法简洁 UEF (Unhandled Exception Filter) 1. 全局唯一，最后防线 2. 返回值直接决定程序生死 3. 不受调试器影响 即使在调试器下运行，UEF 仍然会被调用 适合实现产品级的崩溃报告系统 VCH (Vectored Continue Ha…</summary><content type="html">&lt;h2 id=&quot;veh&quot;&gt;VEH&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;优先级最高&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;进程级别，跨线程有效&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c++&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 在主线程注册VEH&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;AddVectoredExceptionHandler&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, GlobalHandler);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 在工作线程中发生的异常也会被处理&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;Create&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, WorkerThread, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;可以注册多个，形成处理链&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c++&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;PVOID handler1 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; AddVectoredExceptionHandler&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, Handler1);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;PVOID handler2 &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; AddVectoredExceptionHandler&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, Handler2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 执行顺序： Handler1 -&amp;gt; Handler2 (如果 Handler1 返回 CONTINUE_SEARCH)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;储存在堆内存中&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不依赖栈帧，即使栈损坏也能工作&lt;/li&gt;
&lt;li&gt;适合处理栈溢出等严重异常&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;seh&quot;&gt;SEH&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;基于栈帧，线程布局&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c++&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;__try&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 42&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;__except&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(EXCEPTION_EXECUTE_HANDLER)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    printf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Access violation caught&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;嵌套结构，就近原则&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c++&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; OuterFunction&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    __try&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        InnerFunction&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    __except&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (EXCEPTION_EXECUTE_HANDLER)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        printf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Outer handler&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;	// executes second&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; InnerFunction&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    __try&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 42&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    __except&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (EXCEPTION_EXECUTE_HANDLER)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        printf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Inner handler&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;	// executes first&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编译器集成，语法简洁&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;uef-unhandled-exception-filter&quot;&gt;UEF (Unhandled Exception Filter)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;全局唯一，最后防线&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c++&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LPTOP_LEVEL_EXCEPTION_FILTER oldFilter &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; SetUnhandledExceptionFilter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(MyUEF);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 新的 UEF 会覆盖旧的UEF&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;返回值直接决定程序生死&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c++&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LONG &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;NTAPI&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; UEFHandler&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (struct _EXCEPTION_POINTERS&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ExceptionInfo)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;CanRecover&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (ExceptionInfo))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        FixTheException&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (ExceptionInfo);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; EXCEPTION_CONTINUE_EXECUTION;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 程序继续运行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        GenerateCrashDump&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (ExceptionInfo);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; EXCEPTION_EXECUTE_HANDLER;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;	// 程序终止&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;不受调试器影响&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;即使在调试器下运行，UEF 仍然会被调用&lt;/li&gt;
&lt;li&gt;适合实现产品级的崩溃报告系统&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;vch-vectored-continue-handler&quot;&gt;VCH (Vectored Continue Handler)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;它的名字比较有迷惑性。VCH 的执行在所有其它异常处理程序之后，不管前面的异常处理结果如何都不影响它的执行，即使程序崩溃，它也会发出最后的波纹。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;无条件调用&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c++&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 无论异常是否被处理，VCH 都会被调用&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LONG &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;NTAPI&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; AlwaysCalledHandler&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (struct _EXCEPTION_POINTERS&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ExceptionInfo)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    printf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;This ALWAYS executes&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; EXCEPTION_CONTINUE_SEARCH;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;主要用于监控和清理&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;c++&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LONG &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;NTAPI&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; MonitoringContinueHandler&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (struct _EXCEPTION_POINTERS&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ExceptionInfo)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 记录所有异常，包括已被处理的&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    LogExceptionToFile&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (ExceptionInfo);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 更新性能计数器&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    IncrementExceptionCounter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 不影响程序执行&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; EXCEPTION_CONTINUE_SEARCH;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;可以注册多个，形成处理链&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;VCH 不是为了“挽救”失败的异常处理而设计的，而是为了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;监控和日志记录
&lt;ul&gt;
&lt;li&gt;记录所有异常，包括致命的、已被处理的&lt;/li&gt;
&lt;li&gt;统计异常发生频率和类型&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;资源清理和数据保存
&lt;ul&gt;
&lt;li&gt;在程序崩溃前保存重要数据&lt;/li&gt;
&lt;li&gt;清理可能导致资源泄露的对象&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;调试和诊断
&lt;ul&gt;
&lt;li&gt;在异常处理完成后执行额外的调试逻辑&lt;/li&gt;
&lt;li&gt;收集诊断信息&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;SEH Function Definition:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;EXCEPTION_DISPOSITION&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; __cdecl&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _except_handler&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;	_In_&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _EXCEPTION_RECORD&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;_ExceptionRecord&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 异常记录结构 指针&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    _In_&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; _EstablisherFrame&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; 					 // 指向 SEH 链(EXCEPTION_REGISTRATION)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    _Inout_&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _CONTEXT&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;_ContextRecord&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; 		 // Context 结构指针，即线程上下文(寄存器)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    _Inout_&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; _DispatherContext&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;				 // 调度器上下文，无意义&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;UEF, VEH, VCH 函数的参数只有一个，即指向结构体 &lt;code&gt;_EXCEPTION_POINTERS&lt;/code&gt; 的指针。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _EXCEPTION_POINTERS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    PEXCEPTION_RECORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ExceptionRecord;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;			// pointer of EXCEPTION_RECORD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    PCONTEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ContextRecord;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;						// pointer of CONTEXT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;EXCEPTION_POINTERS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;PEXCEPTION_POINTERS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _EXCEPTION_RECORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ExceptionCode;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; 						// 异常号&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ExceptionFlags;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; 						// 异常标志&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    struct&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _EXCEPTION_RECORD&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;ExceptionReccord;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 指向 **下一个** 节点，即下一个异常记录&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    PVOID&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ExceptionAddress;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; 					// 发生异常的地址&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; NumberParameters;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;						// 异常信息的个数(数组ExceptionInformation的长度)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    ULONG_PTR&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 异常信息数组&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;EXCEPTION_RECORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;PECEPTION_RECORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;线程上下文，没有细看&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;/* 浮点寄存器 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _FLOATING_SAVE_AREA&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   ControlWord;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   StatusWord;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   TagWord;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   ErrorOffset;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   ErrorSelector;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   DataOffset;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   DataSelector;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    BYTE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    RegisterArea[SIZE_OF_80387_REGISTERS];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Spare0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;FLOATING_SAVE_AREA&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; FLOATING_SAVE_AREA &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;PFLOATING_SAVE_AREA;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _CONTEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // The flags values within this flag control the contents of&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // a CONTEXT record.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // If the context record is used as an input parameter, then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // for each portion of the context record controlled by a flag&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // whose value is set, it is assumed that that portion of the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // context record contains valid context. If the context record&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // is being used to modify a threads context, then only that&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // portion of the threads context will be modified.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // If the context record is used as an IN OUT parameter to capture&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // the context of a thread, then only those portions of the thread&apos;s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // context corresponding to set flags will be returned.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // The context record is never used as an OUT only parameter.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ContextFlags;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // This section is specified/returned if CONTEXT_DEBUG_REGISTERS is&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // set in ContextFlags.  Note that CONTEXT_DEBUG_REGISTERS is NOT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // included in CONTEXT_FULL.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Dr0;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Dr1;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Dr2;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Dr3;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Dr6;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Dr7;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // This section is specified/returned if the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // ContextFlags word contians the flag CONTEXT_FLOATING_POINT.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    FLOATING_SAVE_AREA&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; FloatSave;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // This section is specified/returned if the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // ContextFlags word contians the flag CONTEXT_SEGMENTS.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   SegGs;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   SegFs;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   SegEs;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   SegDs;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // This section is specified/returned if the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // ContextFlags word contians the flag CONTEXT_INTEGER.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Edi;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Esi;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Ebx;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Edx;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Ecx;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Eax;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // This section is specified/returned if the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // ContextFlags word contians the flag CONTEXT_CONTROL.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Ebp;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Eip;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   SegCs;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;              // MUST BE SANITIZED&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   EFlags;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;             // MUST BE SANITIZED&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   Esp;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   SegSs;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // This section is specified/returned if the ContextFlags word&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // contains the flag CONTEXT_EXTENDED_REGISTERS.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // The format and contexts are processor specific&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    BYTE&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;CONTEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; CONTEXT &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;PCONTEXT;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id=&quot;一些使用方法api&quot;&gt;一些使用方法/API&lt;/h1&gt;
&lt;h2 id=&quot;seh-1&quot;&gt;SEH&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;__asm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    push&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; HandlerAddr;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    mov&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; eax, fs:[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    push&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; eax;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    mov &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;fs&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;:[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;], esp;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者 &lt;code&gt;__try/__except&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&quot;others&quot;&gt;Others&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;SetUnhandledExceptionFilter&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;AddVectoredEcceptionHandler&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(ULONG first,&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 1 表示添加到链表头部，0 表示添加到链表i尾部&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                           PVECTORED_EXCEPTION_HANDLER handler&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;	// 异常处理器的地址&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                           );&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;RemoveVectoredExceptionHandler&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AddVectoredContinueHandler&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;RemoveVectoredContinueHandler&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;LONG&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; PvectoredExceptionHandler&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    _EXCEPTION_POINTERS&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;ExceptionInfo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;异常处理程序的参数&quot;&gt;异常处理程序的参数&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _EXCEPTION_POINTERS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    PEXCEPTION_RECORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ExceptionRecord;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 记录异常的信息&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    PCONTEXT&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ContextRecord;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; // 表示寄存器的内容&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;EXCEPTION_POINTERS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;PEXCEPTION_POINTERS&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;返回值&quot;&gt;返回值&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;EXCEPTION_CONTINUE_EXECUTION&lt;/code&gt; 表示继续执行；&lt;/p&gt;
&lt;p&gt;&lt;code&gt;EXCEPTION_CONTINUE_SEARCH&lt;/code&gt; 表示继续查找&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;seh-的返回值-veh-vch-只有前两种&quot;&gt;SEH 的返回值 (VEH, VCH 只有前两种)&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;typedef&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt; enum&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; _EXCEPTION_DISPOSITION {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ExceptionContinueExecution, &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ExceptionContinueSearch, 	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ExceptionNestedException,  	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ExceptionCollidedUnwind 	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;} EXCEPTION_DISPOSITION;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;__except--seh&quot;&gt;__except &amp;amp; SEH&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;__except&lt;/code&gt; 是对 &lt;code&gt;_except_handler&lt;/code&gt; 函数的封装&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;eh-调用顺序&quot;&gt;EH 调用顺序&lt;/h2&gt;
&lt;p&gt;调试器 &amp;gt; VEH &amp;gt; SEH &amp;gt; UEF &amp;gt; VCH &amp;gt; 调试器 &amp;gt; 调用异常端口通知 csrss.exe (弹出一个对话框, 但在Win11没有见到, 可能和系统版本有关)&lt;/p&gt;
&lt;hr&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&amp;lt;Windows.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;EXCEPTION_DISPOSITION&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; myExceptHandler&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    struct&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; _EXCEPTION_RECORD&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; ExceptionRecord&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    PVOID&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; EstablisherFrame&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    PCONTEXT&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; pcontext&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    PVOID&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt; DispatcherContext&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    MessageBoxA&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;SEH处理了异常&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;异常报错&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, MB_OK);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    pcontext-&amp;gt;Eip &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; pcontext-&amp;gt;Eip&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ExceptionContinueExecution;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;LONG &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;WINAPI&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; PvectoredExceptionHandler&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    _EXCEPTION_POINTERS&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; ExceptionInfo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    MessageBoxA&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;VEH处理了异常&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;异常处理&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, MB_OK);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    ExceptionInfo-&amp;gt;ContextRecord-&amp;gt;Eip &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; EXCEPTION_CONTINUE_EXECUTION;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    AddVectoredExceptionHandler&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;, PvectoredExceptionHandler);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    DWORD&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; execptionFuncAddr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (DWORD)myExceptHandler;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;//异常处理的函数地址&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    __asm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        push&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; execptionFuncAddr;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        mov&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; eax, fs: [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] ;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;        push&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; eax;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        mov &lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;fs&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; : [&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] , esp;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        //添加异常，并且把异常放到异常链里面，并且把异常的头指针指向新的头结点&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    char*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; str &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; NULL&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    str[&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;a&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    printf&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Sna1lGo&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;    system&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;pause&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content><category term="windows"/></entry><entry><id>https://nonmirror.icu/posts/scheme/</id><title type="text">Scheme</title><link rel="alternate" type="text/html" href="https://nonmirror.icu/posts/scheme/"/><updated>2025-07-22T04:16:01.000Z</updated><published>2025-07-22T04:16:01.000Z</published><summary type="text">1 Notice how easy it is to pass a function (as a parameter) to a function in Scheme, it is kind of like MACRO . One of the meaning of brackets is function call. Quotation is kind of like MACRO . define syntax is totally MACRO Pairs Lists Pair is basically a li…</summary><content type="html">&lt;h2 id=&quot;1&quot;&gt;1&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Notice how easy it is to pass a function (as a parameter) to a function in Scheme, it is kind of like &lt;strong&gt;MACRO&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;One of the meaning of brackets is function call.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Quotation is kind of like &lt;strong&gt;MACRO&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;define-syntax&lt;/code&gt; is totally &lt;strong&gt;MACRO&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;pairs&quot;&gt;Pairs&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; . &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; . &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) . &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; foo (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;foo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; . &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;car&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; foo)		&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; car gets the first element in a pair.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cdr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; foo)		&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; while cdr gets the second&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;lists&quot;&gt;Lists&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Pair is basically a little list.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The definition of a list is a set of pairs and the last pair in that has null on the right hand side. If you don’t believe that, check out the code below.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; null)		&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; it&apos;s indeed a pair of 1 and null but the way the interpreter writes it is a list containing only 1.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; . &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)		&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; it&apos;s a pair.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; null))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)		&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; it&apos;s a list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; null)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;equal?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; null)) (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;#t&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;List is a bunch of pairs cascading down and ending in &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;car--cdr&quot;&gt;car &amp;amp; cdr&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mylist (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; null))))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; mylist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;car&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mylist)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;1		&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; the first element 1 in the pair mylist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cdr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mylist)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)		&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; the second element (cons 2 (cons 3 null)) in the pair mylist, which is precisely the rest of the list mylist.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cadr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mylist)		&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; d, then a.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;2	&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;caddr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; mylist)		&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; double d, then a.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;3	&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;list-ref&quot;&gt;list-ref&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list-ref&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;a&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;b&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;c&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list-ref&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;a&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;b&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;c&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;c&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;loops&quot;&gt;“Loops”&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Loops are actually recursion.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A bad implementation of &lt;code&gt;list-ref&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;my-list-ref&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; lst n)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;zero?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;car&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; lst)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          (my-list-ref (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cdr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; lst) (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (my-list-ref (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;a&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;b&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;c&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;map&quot;&gt;Map&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Map applies the function you give it to every element in the list you give it. Difference between it and Python’s map is the latter one returns a map object which is a kind of iterator, but Scheme’s map directly give you a list.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; baz (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x) (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; double baz)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 6&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; baz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A bad implementation of &lt;code&gt;map&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;1 &lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;my-map&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; fn lst)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;equal?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; () lst)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                ()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;                (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (fn (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;car&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; lst)) (my-map fn (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cdr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; lst)))))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;1 &lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;=&amp;gt; (my-map double baz)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;Value: (2 4 6)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;fold&quot;&gt;Fold&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; qux (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (foldr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; qux)	&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; 4 + 3 + 2 + 1 + 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (foldr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; qux)	&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; 1 + (2 + (3 + (4 + 2000)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;2010&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (foldr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; -100 qux)	&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; 1 + (2 + (3 + (4 + -100)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;-90&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (foldr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; qux)	&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; 1 - (2 - (3 - (4 - 0)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;-2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (foldr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2000&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; qux)	&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; 1 - (2 - (3 - (4 - 2000)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;1998&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (foldr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; qux)	&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; 1 * (2 * (3 * (4 * 1)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;24&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (foldr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; qux)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt;&amp;gt; (my-foldr &lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; qux)	&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; 1 / (2 / (3 / (4 / 1)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;3/8&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A bad implementation of &lt;code&gt;foldr&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;my-foldr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; fn start lst)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;null?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; lst)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        start&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        (fn (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;car&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; lst) (my-foldr fn start (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cdr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; lst)))))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;using-outer-symbols&quot;&gt;Using outer symbols&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;assert-equal&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a b)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;print-error&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot; is not equal to &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; b)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (newline))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;equal?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a b))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        (print-error) null))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (assert-equal &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (assert-equal &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;3 is &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; equal to 4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;circle-details&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; r)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; pi 3.1415926)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;area&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;round&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; pi r r)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;circum&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;round&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; pi r)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (area) (circum)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (circle-details &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;28.0&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 19.0&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The inner function can access the symbols of the outer function unless you override them within the inner function.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;returning-functions&quot;&gt;Returning functions&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;make-add-one&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;inc&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x) (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   inc)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; make-add-one&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;#&amp;lt;procedure:make-add-one&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; add-one make-add-one)		&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; no bracket, no function call&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; add-one(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;#&amp;lt;procedure:make-add-one&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;. . application: &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a procedure&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;expected a procedure that can be applied to arguments&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; given: 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; arguments...: &lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;none&lt;/span&gt;&lt;span style=&quot;color:#B31D28;font-style:italic&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; add-one (make-add-one))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (add-one &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;make-add-x&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;add-x&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; y) (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x y))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;   add-x)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; add-ten (make-add-x &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (add-ten &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;19&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;29&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;holding-state&quot;&gt;Holding state&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;make-counter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; value 0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;counter&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;set!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; value (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; value &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))	&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; basically is value += 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      value)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    counter)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; counter (make-counter))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (counter)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (counter)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (counter)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (counter)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In this case, &lt;code&gt;value&lt;/code&gt; is &lt;strong&gt;nonlocal&lt;/strong&gt; in inner procedure &lt;code&gt;counter&lt;/code&gt;, but you don’t need to claim it explicitly.&lt;/p&gt;
&lt;p&gt;So we can see function call is not simply Macro, it can remember the state of the system (group).&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;uses-testing&quot;&gt;Uses-Testing&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;shout&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; display-fn txt)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (display-fn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;     (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list-&amp;gt;string&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;map&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;       char-upcase&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;       (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;string-&amp;gt;list&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; txt)))))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (shout &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &quot;what the fuck&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;WHAT THE FUCK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (shout print &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;what the fuck&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;WHAT THE FUCK&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now I’m gonna test it.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;test-shout-displays-upper-case&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; displayed &quot;&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;fake-display&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; txt)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;set!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; displayed txt))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (shout fake-display &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;Hello Andy&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (assert-equal displayed &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;HELLO ANDY&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; assert-equal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;#&amp;lt;procedure:assert-equal&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (test-shout-displays-upper-case)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;&apos;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;uses-classes&quot;&gt;Uses-Classes&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;make-balance&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; value 0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;bal&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; method)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;add-method&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;set!&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; value (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; value x)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;get-method&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) value)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;equal?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; method &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;add&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          add-method&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          get-method))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    bal)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; balance (make-balance))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; get (balance &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;&apos;get&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; add (balance &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;add&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (get)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (add &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (get)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; get2 (balance &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;&apos;get&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; add2 (balance &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;add&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (get2)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (add2 &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (get)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;110&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see, it’s a simulation of a class &lt;code&gt;balance&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&quot;tail-recursion-version-fibonacci&quot;&gt;Tail-Recursion Version Fibonacci&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;fib-it&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;	(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;impl&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; acc1 acc2 countg)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; count &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          acc1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          (impl (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; acc1 acc2) acc1 (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; count &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (impl &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;data-made-from-code&quot;&gt;Data made from code&lt;/h2&gt;
&lt;p&gt;If we want to make a list of three symbols, we get an error.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a b c)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;. . a: undefined&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; cannot reference an identifier before its definition&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We don’t have there definition, but if we define them, we get a list of what they refer to.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a 1)(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; b 2)(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; c 3)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a b c)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;How to make a list of the symbols themselves instead of what they refer to? The answer is by &lt;em&gt;quoting&lt;/em&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; &apos;a&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; &apos;b&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; &apos;c&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(a b c)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quoting can apply to anything you like. Because of that quote symbol there, it’s not threated as a piece of code we’re going to run.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(a (b1 b2) c)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(a (b1 b2) c)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;equal?&lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(a (b1 b2) c) (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; &apos;a&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; &apos;b1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; &apos;b2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;&apos;c&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;#t&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When you execute a bracketed list you always have to have at least one thing in that list which is the name of the procedure you want to execute. But how to create a list with no element?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; ()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;. #%app: missing procedure expression&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; probably originally (), which is an illegal empty application in: (#%app)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (list)	&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; it&apos;s a way.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;&apos;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;&apos;()&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;	; with the power of quotation, this is another way.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;&apos;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; null&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;&apos;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;&apos;null&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;&apos;null&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;asking-about-data&quot;&gt;Asking about data&lt;/h2&gt;
&lt;p&gt;Before a procedure get executed, all the arguments get evaluated.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;symbol?&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; &apos;z&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;#t&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;symbol?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; z)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;. . z: undefined&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt; cannot reference an identifier before its definition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; z 1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;symbol?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; z)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;#f&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;generic-type-safety&quot;&gt;Generic type safety&lt;/h2&gt;
&lt;p&gt;Quote this stuff looks like code.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; generic-safe-sum&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    &apos;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;safe-sum&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x y)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;       (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (TEST x) (TEST y))	&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;; we don&apos;t know what TEST is so far but we will.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;           (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x y)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;           &quot;INCORRECT TYPES&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Another procedure that replace &lt;code&gt;find&lt;/code&gt; with &lt;code&gt;repl&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; lst find repl)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;pair?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; lst)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cons&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;         (replace (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;car&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; lst) find repl)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;         (replace (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;cdr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; lst) find repl))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;equal?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; lst find)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            repl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;            lst)))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So here is what we can do.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; safe-sum-int&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (replace generic-safe-sum &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;&apos;TEST&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; &apos;integer?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (eval safe-sum-int)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (safe-sum &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (safe-sum &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2.1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2.2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;INCORRECT TYPES&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;nonint?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;real?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x) (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;integer?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x))))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (eval (replace generic-safe-sum &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;&apos;TEST&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; &apos;nonint?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (safe-sum &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 21&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;INCORRECT TYPES&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (safe-sum &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;2.4&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2.2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;4.6&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;mcons&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; a b)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;lambda&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E36209&quot;&gt;cmd&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;equal?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; cmd &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;car&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;          b)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; ((mcons &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;car&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;mcar&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; pair) (pair &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;car&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;mcdr&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; pair) (pair &lt;/span&gt;&lt;span style=&quot;color:#032F62&quot;&gt;&quot;cdr&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (mcar (mcons &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (mcdr (mcons &lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;m&lt;/code&gt; in mcons/mcar/mcdr means &lt;strong&gt;meta.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;numbers-magic&quot;&gt;Numbers magic&lt;/h2&gt;
&lt;p&gt;用高阶函数模拟数字，函数的阶数代表数字的值。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n0 (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;lambda&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; () null))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;minc&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x) (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;lambda&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; () x))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;mdec&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x) (x))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (n0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;&apos;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n1 (minc n0))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;equal?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (n1) n0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;#t&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;equal?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (mdec n1) n0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;#t&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;n1 是 n0 的高一阶的函数，即 n0() = null, n1() = n0.&lt;/p&gt;
&lt;p&gt;那么我们用 &lt;code&gt;meual?&lt;/code&gt; 检查两个函数是否同阶，用 &lt;code&gt;mzero?&lt;/code&gt; 检查函数是否是元函数（最低阶，即返回 null 的 n0）。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;mzero?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x) (&lt;/span&gt;&lt;span style=&quot;color:#005CC5&quot;&gt;null?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (x)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;mequal?&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x y)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;cond&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      ((mzero? x) (mzero? y))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      ((mzero? y) (mzero? x))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (mequal? (mdec x) (mdec y)))))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (mequal? n0 n1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;#f&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (mequal? n0 (mdec n1))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;#t&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;还可以定义函数阶数的加法 &lt;code&gt;m+&lt;/code&gt;， (m+ n1 n2) =&amp;gt; n3&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot; style=&quot;background-color:#fff;color:#24292e; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;scheme&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#6F42C1&quot;&gt;m+&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; x y)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; (mzero? y)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        x&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;        (m+ (minc x) (mdec y))))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n2 (minc n1))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n3 (minc n2))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n4 (minc n3))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (&lt;/span&gt;&lt;span style=&quot;color:#D73A49&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color:#24292E&quot;&gt; n5 (minc n4))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;&amp;gt; (mequal? n3 (m+ n1 n2))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E&quot;&gt;#t&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上行为都可以自定义，我们可以自定义元函数（0）的行为，以及函数增阶的规则，做到一些看起来很酷的事情。&lt;/p&gt;
&lt;p&gt;You can define numbers in Scheme without any concept of numbers.&lt;/p&gt;</content><category term="languages"/><category term="functional programming"/></entry></feed>