<?xml version="1.0"?>
<rss version="2.0">
    <channel>
        <title>we1c0me_t0 my odyssey domain</title>
        <subtitle>Ordinary persons fill the void with excitement, yet these excellent ones accomplish themselves by solitude...I have unconsciously been an ordinary person for a long time...</subtitle>
        <icon>https://0d0-1yp0.github.io/assets/favicon.ico</icon>
        <link>https://0d0-1yp0.github.io</link>
        <author>
          <name>D1tru3yo1</name>
        </author>
        <description>ps:当前站版本v1.12。右上角可以切换日夜主题。手机端左上角是功能栏。遇到长时间加载是bug需要刷新。目前文章只往csdn搬https://blog.csdn.net/2201_75506722?type=blog</description>
        <language>zh-CN</language>
        <pubDate>Fri, 10 Apr 2026 00:00:00 +0800</pubDate>
        <lastBuildDate>Fri, 10 Apr 2026 00:00:00 +0800</lastBuildDate>
        <category term="D1yp" />
        <category term="D_1yp" />
        <category term="D1tru3yo1" />
        <item>
            <guid isPermalink="true">https://0d0-1yp0.github.io/2026/04/10/some/%E6%8A%98%E8%BF%94/</guid>
            <title>折返</title>
            <link>https://0d0-1yp0.github.io/2026/04/10/some/%E6%8A%98%E8%BF%94/</link>
            <category term="日常" scheme="https://0d0-1yp0.github.io/categories/some/" />
            <category term="日常" scheme="https://0d0-1yp0.github.io/tags/%E6%97%A5%E5%B8%B8/" />
            <pubDate>Fri, 10 Apr 2026 00:00:00 +0800</pubDate>
            <description><![CDATA[ &lt;p&gt;我觉得，因为爱好或者冲动想做一件对自己或者他人都非常好的事，无论发生什么，都能把这件好事坚持下去的人，才能叫作高手&lt;/p&gt;
&lt;p&gt;何况是在技术记录与分享这件事上，现在看看自己前年的帖子往往会惊叹于自己原来当时技术还算不错，25 年发生了很多事情，自己也开始变得追求短平快的节奏，最终也导致了某些坚持了几年的梦想无疾而终，或者说叫惨败收场，而落得如今这种地步&lt;/p&gt;
&lt;p&gt;今天也不知道是怎么了，可能是过于无聊，也可能是睡了很久，起来就做了一个抽象视频，然后翻阅着以前留下的手稿，感觉好像是另一个人写的&lt;/p&gt;
&lt;p&gt;也许我迷茫了 20 个月只是迷路了，我需要尝试迷途知返&lt;/p&gt;
&lt;p&gt;这几天开始会写 web 的帖子&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://0d0-1yp0.github.io/2025/01/22/CTF/binary/%E5%AF%84%E5%AD%98%E5%99%A8%E5%AF%BB%E5%9D%80%E7%9A%84%E5%87%A0%E7%A7%8D%E6%96%B9%E5%BC%8F/</guid>
            <title>寄存器部分寻址方式</title>
            <link>https://0d0-1yp0.github.io/2025/01/22/CTF/binary/%E5%AF%84%E5%AD%98%E5%99%A8%E5%AF%BB%E5%9D%80%E7%9A%84%E5%87%A0%E7%A7%8D%E6%96%B9%E5%BC%8F/</link>
            <category term="CTF" scheme="https://0d0-1yp0.github.io/categories/CTF/" />
            <category term="二进制安全" scheme="https://0d0-1yp0.github.io/categories/CTF/binary/" />
            <category term="基础" scheme="https://0d0-1yp0.github.io/tags/%E5%9F%BA%E7%A1%80/" />
            <category term="二进制" scheme="https://0d0-1yp0.github.io/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6/" />
            <category term="CTF" scheme="https://0d0-1yp0.github.io/tags/CTF/" />
            <pubDate>Wed, 22 Jan 2025 00:00:00 +0800</pubDate>
            <description><![CDATA[ &lt;p&gt;到底日更变成拖更变成月更了，水一篇吧，实在太忙了，&lt;s&gt;或者你们想看的话我更新高等数学也行&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;借鉴来源：&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id=&#34;asm源码&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#asm源码&#34;&gt;#&lt;/a&gt; ASM 源码：&lt;/h1&gt;
&lt;pre&gt;&lt;code class=&#34;language-assembly&#34;&gt;section .data
    msg db &amp;quot;Welcome_to_CTFshow_PWN&amp;quot;, 0

section .text
    global _start

_start:

; 立即寻址方式
    mov eax, 11         ; 将11赋值给eax
    add eax, 114504     ; eax加上114504
    sub eax, 1          ; eax减去1

; 寄存器寻址方式
    mov ebx, 0x36d      ; 将0x36d赋值给ebx
    mov edx, ebx        ; 将ebx的值赋值给edx

; 直接寻址方式
    mov ecx, msg      ; 将msg的地址赋值给ecx

; 寄存器间接寻址方式
    mov esi, msg        ; 将msg的地址赋值给esi
    mov eax, [esi]      ; 将esi所指向的地址的值赋值给eax

; 寄存器相对寻址方式
    mov ecx, msg        ; 将msg的地址赋值给ecx
    add ecx, 4          ; 将ecx加上4
    mov eax, [ecx]      ; 将ecx所指向的地址的值赋值给eax

; 基址变址寻址方式
    mov ecx, msg        ; 将msg的地址赋值给ecx
    mov edx, 2          ; 将2赋值给edx
    mov eax, [ecx + edx*2]  ; 将ecx+edx*2所指向的地址的值赋值给eax

; 相对基址变址寻址方式
    mov ecx, msg        ; 将msg的地址赋值给ecx
    mov edx, 1          ; 将1赋值给edx
    add ecx, 8          ; 将ecx加上8
    mov eax, [ecx + edx*2 - 6]  ; 将ecx+edx*2-6所指向的地址的值赋值给eax

; 输出字符串
    mov eax, 4          ; 系统调用号4代表输出字符串
    mov ebx, 1          ; 文件描述符1代表标准输出
    mov ecx, msg        ; 要输出的字符串的地址
    mov edx, 22         ; 要输出的字符串的长度
    int 0x80            ; 调用系统调用

; 退出程序
    mov eax, 1          ; 系统调用号1代表退出程序
    xor ebx, ebx        ; 返回值为0
    int 0x80            ; 调用系统调用

&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;详解&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#详解&#34;&gt;#&lt;/a&gt; 详解：&lt;/h1&gt;
&lt;h3 id=&#34;1-data-段&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#1-data-段&#34;&gt;#&lt;/a&gt; 1. &lt;strong&gt;.data 段&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-asm&#34;&gt;section .data
    msg db &amp;quot;Welcome_to_CTFshow_PWN&amp;quot;, 0
&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;strong&gt; &lt;code&gt;.data&lt;/code&gt;  段&lt;/strong&gt;：用来存放程序中的&lt;strong&gt;已初始化数据&lt;/strong&gt;，这些数据在程序运行时会被加载到内存中。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt; &lt;code&gt;msg db&lt;/code&gt; &lt;/strong&gt;：声明一个字符串  &lt;code&gt;&amp;quot;Welcome_to_CTFshow_PWN&amp;quot;&lt;/code&gt; ，以字节（ &lt;code&gt;db&lt;/code&gt;  = Define Byte）存储，并以  &lt;code&gt;0&lt;/code&gt;  结尾，表示字符串结束符（类似 C 语言的 &lt;code&gt;\0&lt;/code&gt; ）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;地址&lt;/strong&gt;： &lt;code&gt;msg&lt;/code&gt;  是一个&lt;strong&gt;标签&lt;/strong&gt;，代表该字符串的内存地址，供后续使用。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;2-text-段&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#2-text-段&#34;&gt;#&lt;/a&gt; 2. &lt;strong&gt;.text 段&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-asm&#34;&gt;section .text
global _start

_start:
&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;strong&gt; &lt;code&gt;.text&lt;/code&gt;  段&lt;/strong&gt;：存放程序的代码（指令）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt; &lt;code&gt;_start&lt;/code&gt; &lt;/strong&gt;：程序的入口，系统从这里开始执行程序（对应 Linux 的 ELF 文件格式的起点）。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;3-立即寻址方式&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#3-立即寻址方式&#34;&gt;#&lt;/a&gt; 3. &lt;strong&gt;立即寻址方式&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-asm&#34;&gt;mov eax, 11         ; 将11赋值给eax
add eax, 114504     ; eax加上114504
sub eax, 1          ; eax减去1
&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;p&gt;&lt;strong&gt;立即寻址方式&lt;/strong&gt;：操作数是一个&lt;strong&gt;立即数&lt;/strong&gt;，直接嵌入在指令中。例如  &lt;code&gt;11&lt;/code&gt;  和  &lt;code&gt;114504&lt;/code&gt; 。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;过程&lt;/p&gt;
&lt;p&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;mov eax, 11&lt;/code&gt; ：将立即数  &lt;code&gt;11&lt;/code&gt;  加载到寄存器  &lt;code&gt;eax&lt;/code&gt;  中。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;add eax, 114504&lt;/code&gt; ：将立即数  &lt;code&gt;114504&lt;/code&gt;  加到  &lt;code&gt;eax&lt;/code&gt;  的当前值上。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sub eax, 1&lt;/code&gt; ：将  &lt;code&gt;eax&lt;/code&gt;  的值减去立即数  &lt;code&gt;1&lt;/code&gt; 。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;硬件实现&lt;/strong&gt;：立即数直接写入指令的操作数字段，CPU 解码指令后直接将值加载到指定寄存器中。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;4-寄存器寻址方式&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#4-寄存器寻址方式&#34;&gt;#&lt;/a&gt; 4. &lt;strong&gt;寄存器寻址方式&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-asm&#34;&gt;mov ebx, 0x36d      ; 将0x36d赋值给ebx
mov edx, ebx        ; 将ebx的值赋值给edx
&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;p&gt;&lt;strong&gt;寄存器寻址方式&lt;/strong&gt;：操作数在寄存器中，CPU 直接对寄存器进行操作。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;过程&lt;/p&gt;
&lt;p&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;mov ebx, 0x36d&lt;/code&gt; ：将立即数  &lt;code&gt;0x36d&lt;/code&gt;  加载到寄存器  &lt;code&gt;ebx&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mov edx, ebx&lt;/code&gt; ：将寄存器  &lt;code&gt;ebx&lt;/code&gt;  的值复制到寄存器  &lt;code&gt;edx&lt;/code&gt; 。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;硬件实现&lt;/strong&gt;：寄存器之间的数据传递不需要访问内存，速度非常快。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;5-直接寻址方式&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#5-直接寻址方式&#34;&gt;#&lt;/a&gt; 5. &lt;strong&gt;直接寻址方式&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-asm&#34;&gt;mov ecx, msg      ; 将msg的地址赋值给ecx
&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;p&gt;&lt;strong&gt;直接寻址方式&lt;/strong&gt;：操作数的地址直接给出，即指令中明确指出操作数所在的内存地址。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;过程&lt;/p&gt;
&lt;p&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mov ecx, msg&lt;/code&gt; ：将标签  &lt;code&gt;msg&lt;/code&gt;  所指向的内存地址加载到寄存器  &lt;code&gt;ecx&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;硬件实现&lt;/strong&gt;：CPU 将指令中的地址字段直接解析为内存地址，然后取出对应地址的内容。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;6-寄存器间接寻址方式&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#6-寄存器间接寻址方式&#34;&gt;#&lt;/a&gt; 6. &lt;strong&gt;寄存器间接寻址方式&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-asm&#34;&gt;mov esi, msg        ; 将msg的地址赋值给esi
mov eax, [esi]      ; 将esi所指向的地址的值赋值给eax
&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;p&gt;&lt;strong&gt;寄存器间接寻址方式&lt;/strong&gt;：寄存器中存储的是操作数的内存地址，操作数存储在该地址中。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;过程&lt;/p&gt;
&lt;p&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;mov esi, msg&lt;/code&gt; ：将  &lt;code&gt;msg&lt;/code&gt;  的地址加载到寄存器  &lt;code&gt;esi&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mov eax, [esi]&lt;/code&gt; ：从  &lt;code&gt;esi&lt;/code&gt;  指向的内存地址中读取数据，并存储到寄存器  &lt;code&gt;eax&lt;/code&gt; 。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;硬件实现&lt;/p&gt;
&lt;p&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU 读取寄存器  &lt;code&gt;esi&lt;/code&gt;  的值（作为内存地址）。&lt;/li&gt;
&lt;li&gt;然后去内存中访问该地址，取出存储的值加载到寄存器  &lt;code&gt;eax&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;7-寄存器相对寻址方式&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#7-寄存器相对寻址方式&#34;&gt;#&lt;/a&gt; 7. &lt;strong&gt;寄存器相对寻址方式&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-asm&#34;&gt;mov ecx, msg        ; 将msg的地址赋值给ecx
add ecx, 4          ; 将ecx加上4
mov eax, [ecx]      ; 将ecx所指向的地址的值赋值给eax
&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;p&gt;&lt;strong&gt;寄存器相对寻址方式&lt;/strong&gt;：寄存器中存储基地址，操作数的地址是基地址加上一个偏移量。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;过程&lt;/p&gt;
&lt;p&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;mov ecx, msg&lt;/code&gt; ：将  &lt;code&gt;msg&lt;/code&gt;  的地址加载到寄存器  &lt;code&gt;ecx&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;add ecx, 4&lt;/code&gt; ：将  &lt;code&gt;ecx&lt;/code&gt;  加上偏移量  &lt;code&gt;4&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mov eax, [ecx]&lt;/code&gt; ：从  &lt;code&gt;ecx&lt;/code&gt;  指向的地址读取数据到寄存器  &lt;code&gt;eax&lt;/code&gt; 。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;硬件实现&lt;/p&gt;
&lt;p&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;计算内存地址： &lt;code&gt;ecx + 4&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;访问该地址并读取数据。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;8-基址变址寻址方式&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#8-基址变址寻址方式&#34;&gt;#&lt;/a&gt; 8. &lt;strong&gt;基址变址寻址方式&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-asm&#34;&gt;mov ecx, msg        ; 将msg的地址赋值给ecx
mov edx, 2          ; 将2赋值给edx
mov eax, [ecx + edx*2]  ; 将ecx+edx*2所指向的地址的值赋值给eax
&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;p&gt;&lt;strong&gt;基址变址寻址方式&lt;/strong&gt;：地址是基地址加上索引值（ &lt;code&gt;edx&lt;/code&gt; ），并根据一个比例因子（如  &lt;code&gt;*2&lt;/code&gt; ）计算得到。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;过程&lt;/p&gt;
&lt;p&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;mov ecx, msg&lt;/code&gt; ：加载基地址到寄存器  &lt;code&gt;ecx&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mov edx, 2&lt;/code&gt; ：加载索引值  &lt;code&gt;2&lt;/code&gt;  到寄存器  &lt;code&gt;edx&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mov eax, [ecx + edx*2]&lt;/code&gt; ：计算地址为  &lt;code&gt;ecx + edx*2&lt;/code&gt; ，然后读取该地址的数据到  &lt;code&gt;eax&lt;/code&gt; 。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;硬件实现&lt;/p&gt;
&lt;p&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;地址计算： &lt;code&gt;ecx + edx*2&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;访问该内存地址并读取数据。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;9-相对基址变址寻址方式&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#9-相对基址变址寻址方式&#34;&gt;#&lt;/a&gt; 9. &lt;strong&gt;相对基址变址寻址方式&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-asm&#34;&gt;mov ecx, msg        ; 将msg的地址赋值给ecx
mov edx, 1          ; 将1赋值给edx
add ecx, 8          ; 将ecx加上8
mov eax, [ecx + edx*2 - 6]  ; 将ecx+edx*2-6所指向的地址的值赋值给eax
&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;p&gt;&lt;strong&gt;相对基址变址寻址方式&lt;/strong&gt;：地址是基地址加索引值乘比例因子再加偏移量。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;过程&lt;/p&gt;
&lt;p&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;mov ecx, msg&lt;/code&gt; ：加载基地址到  &lt;code&gt;ecx&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mov edx, 1&lt;/code&gt; ：加载索引值  &lt;code&gt;1&lt;/code&gt;  到  &lt;code&gt;edx&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;add ecx, 8&lt;/code&gt; ：将偏移量  &lt;code&gt;8&lt;/code&gt;  加到  &lt;code&gt;ecx&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mov eax, [ecx + edx*2 - 6]&lt;/code&gt; ：计算地址为  &lt;code&gt;ecx + edx*2 - 6&lt;/code&gt; ，然后读取数据到  &lt;code&gt;eax&lt;/code&gt; 。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;硬件实现&lt;/p&gt;
&lt;p&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;地址计算： &lt;code&gt;ecx + edx*2 - 6&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;访问该地址并读取数据。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;10-系统调用输出字符串&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#10-系统调用输出字符串&#34;&gt;#&lt;/a&gt; 10. &lt;strong&gt;系统调用（输出字符串）&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-asm&#34;&gt;mov eax, 4          ; 系统调用号4代表输出字符串
mov ebx, 1          ; 文件描述符1代表标准输出
mov ecx, msg        ; 要输出的字符串的地址
mov edx, 22         ; 要输出的字符串的长度
int 0x80            ; 调用系统调用
&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;p&gt;过程&lt;/p&gt;
&lt;p&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;mov eax, 4&lt;/code&gt; ：设置系统调用号为  &lt;code&gt;4&lt;/code&gt; （ &lt;code&gt;sys_write&lt;/code&gt; ）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mov ebx, 1&lt;/code&gt; ：文件描述符为  &lt;code&gt;1&lt;/code&gt; （标准输出）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mov ecx, msg&lt;/code&gt; ：输出字符串的地址。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mov edx, 22&lt;/code&gt; ：字符串的长度。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;int 0x80&lt;/code&gt; ：触发软中断，调用 Linux 内核的系统调用。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;硬件实现&lt;/p&gt;
&lt;p&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将参数放入寄存器（ &lt;code&gt;eax&lt;/code&gt; ,  &lt;code&gt;ebx&lt;/code&gt; ,  &lt;code&gt;ecx&lt;/code&gt; ,  &lt;code&gt;edx&lt;/code&gt; ）。&lt;/li&gt;
&lt;li&gt;调用  &lt;code&gt;int 0x80&lt;/code&gt; ，切换到内核模式执行  &lt;code&gt;sys_write&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;11-退出程序&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#11-退出程序&#34;&gt;#&lt;/a&gt; 11. &lt;strong&gt;退出程序&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-asm&#34;&gt;mov eax, 1          ; 系统调用号1代表退出程序
xor ebx, ebx        ; 返回值为0
int 0x80            ; 调用系统调用
&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;p&gt;过程&lt;/p&gt;
&lt;p&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;mov eax, 1&lt;/code&gt; ：设置系统调用号为  &lt;code&gt;1&lt;/code&gt; （ &lt;code&gt;sys_exit&lt;/code&gt; ）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;xor ebx, ebx&lt;/code&gt; ：返回值为  &lt;code&gt;0&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;int 0x80&lt;/code&gt; ：触发软中断，调用内核终止程序。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;总结&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#总结&#34;&gt;#&lt;/a&gt; 总结&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;寻址方式&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;立即寻址&lt;/strong&gt;：直接在指令中给出操作数。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;寄存器寻址&lt;/strong&gt;：操作数在寄存器中。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;直接寻址&lt;/strong&gt;：操作数的地址直接给出。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;间接寻址&lt;/strong&gt;：通过寄存器指向的地址访问数据。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;相对寻址&lt;/strong&gt;：基址 + 偏移量。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;基址变址寻址&lt;/strong&gt;：基址 + 索引 * 比例因子。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;相对基址变址寻址&lt;/strong&gt;：基址 + 索引 * 比例因子 + 偏移量。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;系统调用&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用  &lt;code&gt;int 0x80&lt;/code&gt;  切换到内核模式执行特定操作。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;这个 int 0x80 有点小关键的，有时候打 shellcode 会用&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://0d0-1yp0.github.io/2025/01/07/some/%E6%89%98%E6%9B%B4qwq/</guid>
            <title>为啥拖更qwq</title>
            <link>https://0d0-1yp0.github.io/2025/01/07/some/%E6%89%98%E6%9B%B4qwq/</link>
            <category term="日常" scheme="https://0d0-1yp0.github.io/categories/some/" />
            <category term="日常" scheme="https://0d0-1yp0.github.io/tags/%E6%97%A5%E5%B8%B8/" />
            <pubDate>Tue, 07 Jan 2025 00:00:00 +0800</pubDate>
            <description><![CDATA[ &lt;p&gt;期末这几周过的实在是过于炸裂了，又臭又长，寒假大约的确虽然但是也许可能可以保证起码周更&lt;/p&gt;
&lt;p&gt;寒假给大家来电 heap exp 和 C 语言笑传啥的干货&lt;/p&gt;
&lt;p&gt;让我静静的学网络安全不行吗&lt;/p&gt;
&lt;p&gt;为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学为什么我要学法学&lt;/p&gt;
&lt;p&gt;我布药挂科啊啊啊啊啊啊啊啊呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://0d0-1yp0.github.io/2024/12/24/basic-C/C%E8%AF%AD%E8%A8%80%E5%85%A5%E9%97%A8%E5%9B%9E%E5%BD%92(%E4%B8%89)/</guid>
            <title>C语言入门知识点&amp;基础思路（三）</title>
            <link>https://0d0-1yp0.github.io/2024/12/24/basic-C/C%E8%AF%AD%E8%A8%80%E5%85%A5%E9%97%A8%E5%9B%9E%E5%BD%92(%E4%B8%89)/</link>
            <category term="C语言基础" scheme="https://0d0-1yp0.github.io/categories/basic-C/" />
            <category term="C语言" scheme="https://0d0-1yp0.github.io/tags/C%E8%AF%AD%E8%A8%80/" />
            <category term="基础" scheme="https://0d0-1yp0.github.io/tags/%E5%9F%BA%E7%A1%80/" />
            <category term="算法" scheme="https://0d0-1yp0.github.io/tags/%E7%AE%97%E6%B3%95/" />
            <pubDate>Tue, 24 Dec 2024 00:00:00 +0800</pubDate>
            <description><![CDATA[ &lt;blockquote&gt;
&lt;p&gt;All the moves like Jagger&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;c语言哭传三&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#c语言哭传三&#34;&gt;#&lt;/a&gt; C 语言哭传（三）&lt;/h1&gt;
&lt;p&gt;本期开始涉及的知识点，所含知识尽量补多一点，尽量能从一题的角度理解一个点&lt;/p&gt;
&lt;p&gt;本期含递归 (tips: 挑战题)，函数指针，今天来点大家想看的东西奥（otto 音&lt;/p&gt;
&lt;p&gt;本文或者以后也是，涉及到大模型的回答，均使用 o1/o1-mini 模型或者 claude3.5 模型，我也会重审，基本不会误导大家&lt;/p&gt;
&lt;p&gt;来几个填选。题不在多，在精。一道题可能自己做 1 分钟就过了，要求我给别人讲可能就是半小时，但是去研究底层的这半小时远比自己做的一分钟收获的多，收获的深&lt;/p&gt;
&lt;h2 id=&#34;815指针&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#815指针&#34;&gt;#&lt;/a&gt; 8.15 指针&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241224085232574.png&#34; alt=&#34;image-20241224085232574&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这个程序就是倒序输出，没什么好说的，主要是拓展的一些东西&lt;/p&gt;
&lt;p&gt;答案:&lt;/p&gt;
&lt;p&gt;Java&lt;/p&gt;
&lt;p&gt;dBase&lt;/p&gt;
&lt;p&gt;CLanguage&lt;/p&gt;
&lt;p&gt;Pascal&lt;/p&gt;
&lt;h3 id=&#34;思路知识点&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#思路知识点&#34;&gt;#&lt;/a&gt; 思路知识点：&lt;/h3&gt;
&lt;p&gt;有同学不太熟悉 &amp;amp; 和 * 这两个指针相关基本操作，大概 talk 一下&lt;/p&gt;
&lt;h4 id=&#34;运算符和-运算符&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#运算符和-运算符&#34;&gt;#&lt;/a&gt;  &lt;code&gt;&amp;amp;&lt;/code&gt;  运算符和  &lt;code&gt;*&lt;/code&gt;  运算符&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;&amp;amp;&lt;/code&gt;  运算符（取地址符）&lt;/strong&gt;：用于获取变量的内存地址。&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; x &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;ptr &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;&amp;amp;&lt;/span&gt;x&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;//ptr 指向变量 x 的地址&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;*&lt;/code&gt;  运算符（解引用符）&lt;/strong&gt;：用于访问指针所指向的内存地址上的值。&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; y &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;ptr&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;//y 的值为 x，即 10&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;&amp;amp;&lt;/code&gt;  运算符&lt;/strong&gt;用于获取变量的地址。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;\*&lt;/code&gt;  运算符&lt;/strong&gt;用于解引用指针，访问其指向的值。&lt;/p&gt;
&lt;h3 id=&#34;拓展&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#拓展&#34;&gt;#&lt;/a&gt; 拓展：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;数组名本身不是指针&lt;/strong&gt;：虽然数组名在某些情况下表现得像指针，但它们在内存中是一个固定的地址，不能像指针变量那样改变指向&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不能进行指针运算&lt;/strong&gt;：你不能对数组名进行指针运算，例如  &lt;code&gt;a + 1&lt;/code&gt;  在某些情况下是合法的，但不能改变  &lt;code&gt;a&lt;/code&gt;  本身的地址&lt;/li&gt;
&lt;li&gt;使用  &lt;code&gt;sizeof(a)&lt;/code&gt;  时，得到的是整个数组的大小，而不是指针的大小&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sizeof(ptrA)&lt;/code&gt;  返回指针的大小（通常是 4 或 8 个字节，取决于系统架构）。&lt;/li&gt;
&lt;li&gt;将数组作为函数参数传递时，实际上传递的是指向数组第一个元素的指针&lt;/li&gt;
&lt;li&gt;在 C 语言中，&lt;strong&gt;数组名&lt;/strong&gt;（例如整型数组  &lt;code&gt;a[]&lt;/code&gt;  或是字符型数组  &lt;code&gt;b[]&lt;/code&gt; ）在大多数表达式中会&lt;strong&gt;退化为指向数组第一个元素的指针&lt;/strong&gt;。这意味着在这些上下文中，你可以将数组名当作指针来使用。例如：&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; b&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;ptrA &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; a&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;    &lt;span class=&#34;token comment&#34;&gt;//a 退化为 int*，指向 a [0]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;ptrB &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; b&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;   &lt;span class=&#34;token comment&#34;&gt;//b 退化为 char*，指向 b [0]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;防止大家把字符数组初始化，字符串数组们的初始化，也提一下：&lt;/p&gt;
&lt;h3 id=&#34;char-achar-a与char-a-含大模型o1的回答&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#char-achar-a与char-a-含大模型o1的回答&#34;&gt;#&lt;/a&gt; char *a []，char a [] 与 char a [][] (含大模型 o1 的回答)：&lt;/h3&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;声明一：&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Pascal&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;C Language&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;dBase&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Java&#34;&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;声明二：&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Pascal&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;C Language&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;dBase&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Java&#34;&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;分析与解释&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#分析与解释&#34;&gt;#&lt;/a&gt; 分析与解释&lt;/h4&gt;
&lt;h5 id=&#34;1-声明一char-a&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#1-声明一char-a&#34;&gt;#&lt;/a&gt; 1. &lt;strong&gt;声明一： &lt;code&gt;char *a[]&lt;/code&gt; &lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;类型说明：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这是一个&lt;strong&gt;指针数组&lt;/strong&gt;，即数组中的每个元素都是一个指向 &lt;code&gt;char&lt;/code&gt;  类型的指针。&lt;/li&gt;
&lt;li&gt;每个指针指向一个字符串字面量（字符串常量）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;内存分配：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数组 &lt;code&gt;a&lt;/code&gt;  本身在内存中分配了一组指针（通常在栈上）。&lt;/li&gt;
&lt;li&gt;每个字符串字面量（如  &lt;code&gt;&amp;quot;Pascal&amp;quot;&lt;/code&gt; ）存储在&lt;strong&gt;只读存储区&lt;/strong&gt;（例如，常量区）中，多个指针指向这些字符串。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;可修改性：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;指针本身&lt;/strong&gt;可以修改，即可以让指针指向不同的字符串。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;字符串内容&lt;/strong&gt;通常是&lt;strong&gt;只读的&lt;/strong&gt;，尝试修改会导致未定义行为（通常是程序崩溃）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;示例：&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token macro property&#34;&gt;&lt;span class=&#34;token directive-hash&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;token directive keyword&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Pascal&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;C Language&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;dBase&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Java&#34;&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;// 访问第一个字符串&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;%s\n&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// 输出: Pascal&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;// 修改指针，指向另一个字符串&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Python&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;%s\n&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// 输出: Python&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;// 尝试修改字符串内容（不推荐，可能导致崩溃）&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;//a [0][0] = &#39;p&#39;; // 未定义行为&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;2-声明二char-a&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#2-声明二char-a&#34;&gt;#&lt;/a&gt; 2. &lt;strong&gt;声明二： &lt;code&gt;char a[]&lt;/code&gt; &lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;类型说明：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这是一个&lt;strong&gt;字符数组&lt;/strong&gt;，即数组中的每个元素都是一个 &lt;code&gt;char&lt;/code&gt;  类型的字符。&lt;/li&gt;
&lt;li&gt;然而，您的声明尝试用多个字符串字面量初始化一个字符数组，这是不合法的。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;问题说明：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 C 语言中， &lt;code&gt;char a[] = &amp;#123; &amp;quot;Pascal&amp;quot;, &amp;quot;C Language&amp;quot;, &amp;quot;dBase&amp;quot;, &amp;quot;Java&amp;quot; &amp;#125;;&lt;/code&gt;  是&lt;strong&gt;非法的&lt;/strong&gt;，因为 &lt;code&gt;char a[]&lt;/code&gt;  只能初始化为单个字符串或单个字符数组。&lt;/li&gt;
&lt;li&gt;如果您想存储多个字符串，应使用&lt;strong&gt;二维字符数组&lt;/strong&gt;或&lt;strong&gt;指针数组&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;可能的正确声明：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方式一：二维字符数组&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Pascal&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;C Language&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;dBase&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Java&#34;&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;这里， &lt;code&gt;a&lt;/code&gt;  是一个二维字符数组，每个子数组最多可以存储 19 个字符（第 20 个字符留给字符串结束符 &lt;code&gt;\0&lt;/code&gt; ）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;方式二：指针数组（与声明一相同）&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Pascal&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;C Language&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;dBase&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Java&#34;&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;内存分配：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;二维字符数组&lt;/strong&gt;在内存中分配了一个连续的字符块，用于存储所有字符串的字符。&lt;/li&gt;
&lt;li&gt;每个字符串的长度需要在声明时指定（如上例中的 &lt;code&gt;20&lt;/code&gt; ），以确保有足够的空间存储字符串和结束符。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;可修改性：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;字符数组中的字符&lt;/strong&gt;是&lt;strong&gt;可修改的&lt;/strong&gt;，可以直接更改数组中的字符。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;字符串字面量&lt;/strong&gt;（如果使用指针数组）通常是只读的，无法修改。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;示例：二维字符数组&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token macro property&#34;&gt;&lt;span class=&#34;token directive-hash&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;token directive keyword&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Pascal&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;C Language&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;dBase&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Java&#34;&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;// 访问第一个字符串&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;%s\n&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// 输出: Pascal&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;// 修改字符内容&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token char&#34;&gt;&#39;p&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;%s\n&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// 输出: pascal&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;主要异同点总结&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#主要异同点总结&#34;&gt;#&lt;/a&gt; &lt;strong&gt;主要异同点总结&lt;/strong&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;方面&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt; &lt;code&gt;char *a[]&lt;/code&gt; （指针数组）&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt; &lt;code&gt;char a[][]&lt;/code&gt; （二维字符数组）&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;类型&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;数组中的每个元素是 &lt;code&gt;char&lt;/code&gt;  指针（指向字符串）&lt;/td&gt;
&lt;td&gt;数组中的每个元素是 &lt;code&gt;char&lt;/code&gt; ，整体形成二维数组&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;内存分配&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;指针存储在数组中，字符串存储在只读存储区（或堆 / 静态区）&lt;/td&gt;
&lt;td&gt;所有字符串字符存储在连续的数组内存中&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;可修改性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;指针可修改指向，但字符串内容通常不可修改&lt;/td&gt;
&lt;td&gt;字符数组中的字符可修改&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;内存大小&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;仅存储指针，内存占用较少，但字符串分散存储&lt;/td&gt;
&lt;td&gt;分配足够的空间存储所有字符，内存占用较大但连续&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;灵活性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;更灵活，可以指向不同长度的字符串&lt;/td&gt;
&lt;td&gt;需要预先定义每个字符串的最大长度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;访问方式&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;通过指针访问，每个字符串独立&lt;/td&gt;
&lt;td&gt;通过二维数组下标访问，每个字符串按数组索引排列&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;字符串长度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;每个字符串长度可以不同&lt;/td&gt;
&lt;td&gt;每个字符串的最大长度固定（由数组声明时指定，如 &lt;code&gt;20&lt;/code&gt; ）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;选择使用哪种方式&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#选择使用哪种方式&#34;&gt;#&lt;/a&gt; &lt;strong&gt;选择使用哪种方式&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;使用指针数组（ &lt;code&gt;char \*a[]&lt;/code&gt; ）的情况：&lt;/strong&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;li&gt;&lt;strong&gt;使用二维字符数组（ &lt;code&gt;char a[][]&lt;/code&gt; ）的情况：&lt;/strong&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;h3 id=&#34;总结&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#总结&#34;&gt;#&lt;/a&gt; &lt;strong&gt;总结&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt; &lt;code&gt;char \*a[]&lt;/code&gt; &lt;/strong&gt; 是一个指针数组，每个元素指向一个字符串字面量，适用于字符串长度不固定且不需要修改内容的场景。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt; &lt;code&gt;char a[][]&lt;/code&gt; &lt;/strong&gt; 是一个二维字符数组，所有字符串的字符存储在连续的内存中，适用于字符串长度相对固定且需要修改内容的场景。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;希望以上解释能帮助您更好地理解这两种声明的异同。如果您有更多问题，欢迎继续提问！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;816指针&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#816指针&#34;&gt;#&lt;/a&gt; 8.16 指针&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241224094616758.png&#34; alt=&#34;image-20241224094616758&#34; /&gt;&lt;/p&gt;
&lt;p&gt;就是&lt;/p&gt;
&lt;p&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34; display=&#34;block&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/msup&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;2^3-2^2
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.9474em;vertical-align:-0.0833em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.8641em;&#34;&gt;&lt;span style=&#34;top:-3.113em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;−&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.8641em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.8641em;&#34;&gt;&lt;span style=&#34;top:-3.113em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;慢慢来，主函数传参后，f1 指向 fa，f2 指向 fb，也就是 f 调用的 fa 和 fb，fa 就是乘方 fb 就是立方。用的是函数指针而已&lt;/p&gt;
&lt;h3 id=&#34;函数指针&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#函数指针&#34;&gt;#&lt;/a&gt; 函数指针&lt;/h3&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token macro property&#34;&gt;&lt;span class=&#34;token directive-hash&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;token directive keyword&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;// 定义函数 fa，计算 x 的平方&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;fa&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; x&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;x &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt; x&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;// 定义函数 fb，计算 x 的立方&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;fb&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; x&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;x &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt; x &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt; x&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;// 定义函数 f，接受两个函数指针 f1 和 f2，以及一个整数 x&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;// 它调用 f2 (x) 减去 f1 (x) 的结果&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;f1&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;f2&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; x&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;f2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;x&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;f1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;x&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;17&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;18&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;19&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;20&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; i&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;21&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token comment&#34;&gt;// 调用函数 f，将 fa 和 fb 作为参数传递，并传入 x=2&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;22&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    i &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;fa&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; fb&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;23&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;%d&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// 输出结果&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;24&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;25&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h4 id=&#34;主要概念&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#主要概念&#34;&gt;#&lt;/a&gt; 主要概念&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;函数指针的声明&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;f1&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;解释&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;int&lt;/code&gt; ：表示函数返回类型为 &lt;code&gt;int&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;(*f1)&lt;/code&gt; ： &lt;code&gt;f1&lt;/code&gt;  是一个指针，指向一个函数。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;(int)&lt;/code&gt; ：表示这个函数接受一个 &lt;code&gt;int&lt;/code&gt;  类型的参数。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;整体含义&lt;/strong&gt;： &lt;code&gt;f1&lt;/code&gt;  是一个指向接受一个 &lt;code&gt;int&lt;/code&gt;  参数并返回 &lt;code&gt;int&lt;/code&gt;  的函数的指针。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;函数指针的使用&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在函数 &lt;code&gt;f&lt;/code&gt;  中， &lt;code&gt;f1&lt;/code&gt;  和 &lt;code&gt;f2&lt;/code&gt;  都是函数指针，分别指向不同的函数（ &lt;code&gt;fa&lt;/code&gt;  和 &lt;code&gt;fb&lt;/code&gt; ）。通过这些指针， &lt;code&gt;f&lt;/code&gt;  函数可以调用传入的函数并执行相应的操作。&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;f2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;x&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;f1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;x&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;这里， &lt;code&gt;f2(x)&lt;/code&gt;  调用了指针 &lt;code&gt;f2&lt;/code&gt;  所指向的函数（即 &lt;code&gt;fb(x)&lt;/code&gt; ），&lt;/li&gt;
&lt;li&gt;&lt;code&gt;f1(x)&lt;/code&gt;  调用了指针 &lt;code&gt;f1&lt;/code&gt;  所指向的函数（即 &lt;code&gt;fa(x)&lt;/code&gt; ）。&lt;/li&gt;
&lt;li&gt;最终返回 &lt;code&gt;fb(x) - fa(x)&lt;/code&gt;  的结果。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;在 &lt;code&gt;main&lt;/code&gt;  函数中传递函数指针&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;i &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;fa&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; fb&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;这里， &lt;code&gt;fa&lt;/code&gt;  和 &lt;code&gt;fb&lt;/code&gt;  作为参数传递给函数 &lt;code&gt;f&lt;/code&gt; 。由于 &lt;code&gt;fa&lt;/code&gt;  和 &lt;code&gt;fb&lt;/code&gt;  本身就是函数的名称，在这种上下文中，它们会自动转换为指向这些函数的指针。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;拓展函数指针的优势含o1模型回答&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#拓展函数指针的优势含o1模型回答&#34;&gt;#&lt;/a&gt; 拓展：函数指针的优势（含 o1 模型回答）&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;回调函数&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;函数指针允许将函数作为参数传递，从而实现回调机制。这在实现事件驱动编程或需要在不同情况下执行不同操作时非常有用。&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;execute&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;func&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; x&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;Result: %d\n&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;x&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;execute&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;fa&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// 对于被调函数来说，传入了 fa 给指针 func，func 指向了 fa，所以就是调用 fa (5)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;execute&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;fb&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// 调用 fb (3)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;动态函数调用&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;根据程序的运行状态，可以动态选择要调用的函数。&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;operation&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;token comment&#34;&gt;// 注意，现在是在主函数里，直接定义一个指针，函数指针&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;condition&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    operation &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; fa&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    operation &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; fb&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; result &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;operation&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;token comment&#34;&gt;// 已经有了指向的对象，加个参数即可调用&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;构建函数表&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;可以将多个函数指针存储在数组中，方便管理和调用。&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;functions&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;fa&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; fb&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; i &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; i &lt;span class=&#34;token operator&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; i&lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;Result: %d\n&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; functions&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;token comment&#34;&gt;// 你看懂了吗？~&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;再补两句&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#再补两句&#34;&gt;#&lt;/a&gt; 再补两句&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;函数指针的类型必须匹配&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;声明函数指针时，返回类型和参数类型必须与所指向的函数完全一致，否则会导致未定义行为。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;函数指针的声明语法可能有些复杂，尤其是在函数指针作为参数或返回值时。&lt;/p&gt;
&lt;p&gt;可以使用 &lt;code&gt;typedef&lt;/code&gt;  简化声明。&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;func_ptr&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;func_ptr f1&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; func_ptr f2&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; x&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;f2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;x&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;f1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;x&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;817指针&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#817指针&#34;&gt;#&lt;/a&gt; 8.17 指针&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241224102739999.png&#34; alt=&#34;image-20241224102739999&#34; /&gt;&lt;/p&gt;
&lt;p&gt;fun 函数典型的互换操作，同时初具递归雏形（大约的确不算递归）&lt;/p&gt;
&lt;p&gt;整体函数所做的事情非常简单，单纯的逆序对调罢了&lt;/p&gt;
&lt;p&gt;答案是 8162&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;做个递归吧&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;挑战813递归&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#挑战813递归&#34;&gt;#&lt;/a&gt; 挑战：8.13 递归&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241224103409289.png&#34; alt=&#34;image-20241224103409289&#34; /&gt;&lt;/p&gt;
&lt;p&gt;涉及了第一章讲过的取位操作，可以去复习一下&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;此外， &lt;code&gt;+&#39;0&#39;&lt;/code&gt; ：将数字转换为对应的字符。例如， &lt;code&gt;3 + &#39;0&#39;&lt;/code&gt;  结果是字符  &lt;code&gt;&#39;3&#39;&lt;/code&gt; 。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;递归在计算机里算是一个比较经典的玩法了，比较考验人类的思维。&lt;/p&gt;
&lt;h4 id=&#34;递归函数解析&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#递归函数解析&#34;&gt;#&lt;/a&gt; 递归函数解析&lt;/h4&gt;
&lt;p&gt;递归函数通常包括两个主要部分：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;基准情况（Base Case）：&lt;/strong&gt; 确定递归何时停止。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;递归情况（Recursive Case）：&lt;/strong&gt; 函数调用自身，以逐步逼近基准情况。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在本题中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;基准情况：&lt;/strong&gt; 当  &lt;code&gt;n / 10&lt;/code&gt;  等于  &lt;code&gt;0&lt;/code&gt;  时，表示已经处理到最低位的数字，不再需要递归。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;递归情况：&lt;/strong&gt; 当  &lt;code&gt;n / 10&lt;/code&gt;  不等于  &lt;code&gt;0&lt;/code&gt;  时，继续处理更高位的数字。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;先说一下答案:a+1 、n%10+&#39;0&#39;&lt;/strong&gt; , 也就是还没到最后一位的时候指针向前就是空 1, 再加一个基本的取位操作就是空 2&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;难点在于理解递归&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;其实对我本人来说，递归的难点在于递归完成之后的事情和递归的编写，就比如这道题，递归结束后的回溯花了我一定时间去理解。我也很久没摸递归了&lt;/p&gt;
&lt;p&gt;以下的话可能有点抽象需要去理解&lt;/p&gt;
&lt;h4 id=&#34;递归&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#递归&#34;&gt;#&lt;/a&gt; 递归&lt;/h4&gt;
&lt;p&gt;​	&lt;strong&gt;if 触发之后，调用自身，但是本次主调函数还是没执行完的，又不是循环的 break, 也就是不管被调函数递归了多少轮，主调函数终究会执行最后一句 * a = ___  当出现了第一个执行完毕，不会调用函数的被调函数后，触发了基准情况&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;现在，通过 (o1), 让我们一步一步地看这个递归函数是如何工作的。&lt;/p&gt;
&lt;h5 id=&#34;初始调用converta-483&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#初始调用converta-483&#34;&gt;#&lt;/a&gt; 初始调用： &lt;code&gt;convert(a, 483)&lt;/code&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;参数：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;a&lt;/code&gt;  指向字符数组的起始位置（即  &lt;code&gt;a[0]&lt;/code&gt; ）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;n = 483&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;执行步骤：&lt;/strong&gt;
&lt;ol&gt;
&lt;li&gt;计算  &lt;code&gt;i = 483 / 10 = 48&lt;/code&gt; （整除）。&lt;/li&gt;
&lt;li&gt;因为  &lt;code&gt;48 != 0&lt;/code&gt; ，所以递归调用  &lt;code&gt;convert(a + 1, 48)&lt;/code&gt; 。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;第一次递归调用converta-1-48&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#第一次递归调用converta-1-48&#34;&gt;#&lt;/a&gt; 第一次递归调用： &lt;code&gt;convert(a + 1, 48)&lt;/code&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;参数：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;a + 1&lt;/code&gt;  指向数组的下一个位置（即  &lt;code&gt;a[1]&lt;/code&gt; ）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;n = 48&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;执行步骤：&lt;/strong&gt;
&lt;ol&gt;
&lt;li&gt;计算  &lt;code&gt;i = 48 / 10 = 4&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;因为  &lt;code&gt;4 != 0&lt;/code&gt; ，所以递归调用  &lt;code&gt;convert(a + 2, 4)&lt;/code&gt; 。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;第二次递归调用converta-2-4&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#第二次递归调用converta-2-4&#34;&gt;#&lt;/a&gt; 第二次递归调用： &lt;code&gt;convert(a + 2, 4)&lt;/code&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;参数：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;a + 2&lt;/code&gt;  指向数组的下一个位置（即  &lt;code&gt;a[2]&lt;/code&gt; ）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;n = 4&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;执行步骤：&lt;/strong&gt;
&lt;ol&gt;
&lt;li&gt;计算  &lt;code&gt;i = 4 / 10 = 0&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;因为  &lt;code&gt;0 == 0&lt;/code&gt; ，不再递归，直接执行  &lt;code&gt;*a = (4 % 10) + &#39;0&#39; = &#39;4&#39;&lt;/code&gt; ，即  &lt;code&gt;a[2] = &#39;4&#39;&lt;/code&gt; 。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;注意，&lt;strong&gt; 此处将开始回溯&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&#34;回到第一次递归调用converta-1-48&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#回到第一次递归调用converta-1-48&#34;&gt;#&lt;/a&gt; 回到第一次递归调用： &lt;code&gt;convert(a + 1, 48)&lt;/code&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;现在继续执行之前的调用
&lt;ul&gt;
&lt;li&gt;执行  &lt;code&gt;*a = (48 % 10) + &#39;0&#39; = &#39;8&#39;&lt;/code&gt; ，即  &lt;code&gt;a[1] = &#39;8&#39;&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;此处的理解就是，对于第二次那次 convert 的执行，a 相对于最后一次还是 a+1, 被传入的 n 是上一次的 i 也就是最开始的那个 n/10, 即 48, 直接执行取末尾的操作即可&lt;/strong&gt;&lt;/p&gt;
&lt;h5 id=&#34;回到初始调用converta-483&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#回到初始调用converta-483&#34;&gt;#&lt;/a&gt; 回到初始调用： &lt;code&gt;convert(a, 483)&lt;/code&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;继续执行之前的调用
&lt;ul&gt;
&lt;li&gt;执行  &lt;code&gt;*a = (483 % 10) + &#39;0&#39; = &#39;3&#39;&lt;/code&gt; ，即  &lt;code&gt;a[0] = &#39;3&#39;&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;此处的理解就是，对于本次 convert 的执行，a 就是字符数组的开始，直接执行取末位的操作即可&lt;/strong&gt;&lt;/p&gt;
&lt;h5 id=&#34;总结-2&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#总结-2&#34;&gt;#&lt;/a&gt; 总结:&lt;/h5&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;调用层级&lt;/th&gt;
&lt;th&gt;参数  &lt;code&gt;a&lt;/code&gt;  指向的位置&lt;/th&gt;
&lt;th&gt;参数  &lt;code&gt;n&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;执行操作&lt;/th&gt;
&lt;th&gt;赋值结果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;初始调用&lt;/td&gt;
&lt;td&gt;&lt;code&gt;a[0]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;483&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;递归调用  &lt;code&gt;convert(a+1, 48)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;第一次递归调用&lt;/td&gt;
&lt;td&gt;&lt;code&gt;a[1]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;48&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;递归调用  &lt;code&gt;convert(a+2, 4)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;第二次递归调用&lt;/td&gt;
&lt;td&gt;&lt;code&gt;a[2]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;赋值  &lt;code&gt;a[2] = &#39;4&#39;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;a[2] = &#39;4&#39;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;回到第一次递归&lt;/td&gt;
&lt;td&gt;&lt;code&gt;a[1]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;48&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;赋值  &lt;code&gt;a[1] = &#39;8&#39;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;a[1] = &#39;8&#39;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;回到初始调用&lt;/td&gt;
&lt;td&gt;&lt;code&gt;a[0]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;483&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;赋值  &lt;code&gt;a[0] = &#39;3&#39;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;a[0] = &#39;3&#39;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;figure class=&#34;highlight scss&#34;&gt;&lt;figcaption data-lang=&#34;Sass (Scss)&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; 483&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;│&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;└── &lt;span class=&#34;token function&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a+1&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; 48&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;     │&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;     └── &lt;span class=&#34;token function&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a+2&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; 4&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;          ├── 赋值 a[2] = &lt;span class=&#34;token string&#34;&gt;&#39;4&#39;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;          └── 返回到 &lt;span class=&#34;token function&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a+1&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; 48&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;     ├── 赋值 a[1] = &lt;span class=&#34;token string&#34;&gt;&#39;8&#39;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;     └── 返回到 &lt;span class=&#34;token function&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; 483&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;├── 赋值 a[0] = &lt;span class=&#34;token string&#34;&gt;&#39;3&#39;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;└── 返回到 &lt;span class=&#34;token function&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;此题没有&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h4 id=&#34;拓展递归调用栈入门者选择性阅读此段&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#拓展递归调用栈入门者选择性阅读此段&#34;&gt;#&lt;/a&gt; 拓展：递归调用栈 (入门者选择性阅读此段)&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;递归函数通过&lt;strong&gt;函数调用栈&lt;/strong&gt;（Call Stack）来管理函数调用和返回。每一次递归调用都会在调用栈上创建一个新的&lt;strong&gt;栈帧&lt;/strong&gt;，用于保存该调用的局部变量和返回地址。&lt;/p&gt;
&lt;h5 id=&#34;示例将-483-转换为-384&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#示例将-483-转换为-384&#34;&gt;#&lt;/a&gt; 示例：将  &lt;code&gt;483&lt;/code&gt;  转换为  &lt;code&gt;&amp;quot;384&amp;quot;&lt;/code&gt;&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;初始调用&lt;/strong&gt;： &lt;code&gt;convert(a, 483)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;第一次递归&lt;/strong&gt;： &lt;code&gt;convert(a + 1, 48)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;第二次递归&lt;/strong&gt;： &lt;code&gt;convert(a + 2, 4)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;递归终止&lt;/strong&gt;：不再递归，赋值  &lt;code&gt;&#39;4&#39;&lt;/code&gt;  到  &lt;code&gt;a[2]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;返回到第二次调用&lt;/strong&gt;：赋值  &lt;code&gt;&#39;8&#39;&lt;/code&gt;  到  &lt;code&gt;a[1]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;返回到初始调用&lt;/strong&gt;：赋值  &lt;code&gt;&#39;3&#39;&lt;/code&gt;  到  &lt;code&gt;a[0]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主函数&lt;/strong&gt;：添加  &lt;code&gt;&#39;\0&#39;&lt;/code&gt; ，完成字符串&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#&#34;&gt;#&lt;/a&gt; &lt;/h3&gt;
&lt;h5 id=&#34;1-初始调用converta-483&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#1-初始调用converta-483&#34;&gt;#&lt;/a&gt; 1. 初始调用： &lt;code&gt;convert(a, 483)&lt;/code&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;参数&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;a&lt;/code&gt;  指向字符数组的起始位置（ &lt;code&gt;a[0]&lt;/code&gt; ）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;n = 483&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;执行步骤&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;计算  &lt;code&gt;i = 483 / 10 = 48&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;因为  &lt;code&gt;48 != 0&lt;/code&gt; ，所以递归调用  &lt;code&gt;convert(a + 1, 48)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;调用栈&lt;/strong&gt;：&lt;/p&gt;
&lt;figure class=&#34;highlight csharp&#34;&gt;&lt;figcaption data-lang=&#34;C#&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token attribute&#34;&gt;&lt;span class=&#34;token class-name&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token attribute-arguments&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;483&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;2-第一次递归调用converta-1-48&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#2-第一次递归调用converta-1-48&#34;&gt;#&lt;/a&gt; 2. 第一次递归调用： &lt;code&gt;convert(a + 1, 48)&lt;/code&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;参数&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;a + 1&lt;/code&gt;  指向数组的第二个位置（ &lt;code&gt;a[1]&lt;/code&gt; ）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;n = 48&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;执行步骤&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;计算  &lt;code&gt;i = 48 / 10 = 4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;因为  &lt;code&gt;4 != 0&lt;/code&gt; ，所以递归调用  &lt;code&gt;convert(a + 2, 4)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;调用栈&lt;/strong&gt;：&lt;/p&gt;
&lt;figure class=&#34;highlight csharp&#34;&gt;&lt;figcaption data-lang=&#34;C#&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token attribute&#34;&gt;&lt;span class=&#34;token class-name&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token attribute-arguments&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;483&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token attribute&#34;&gt;&lt;span class=&#34;token class-name&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token attribute-arguments&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;48&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;3-第二次递归调用converta-2-4&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#3-第二次递归调用converta-2-4&#34;&gt;#&lt;/a&gt; 3. 第二次递归调用： &lt;code&gt;convert(a + 2, 4)&lt;/code&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;参数&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;a + 2&lt;/code&gt;  指向数组的第三个位置（ &lt;code&gt;a[2]&lt;/code&gt; ）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;n = 4&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;执行步骤&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;计算  &lt;code&gt;i = 4 / 10 = 0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;因为  &lt;code&gt;0 == 0&lt;/code&gt; ，不再递归，直接赋值  &lt;code&gt;*a = &#39;4&#39;&lt;/code&gt; （ &lt;code&gt;a[2] = &#39;4&#39;&lt;/code&gt; ）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;调用栈&lt;/strong&gt;：&lt;/p&gt;
&lt;figure class=&#34;highlight csharp&#34;&gt;&lt;figcaption data-lang=&#34;C#&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token attribute&#34;&gt;&lt;span class=&#34;token class-name&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token attribute-arguments&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;483&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token attribute&#34;&gt;&lt;span class=&#34;token class-name&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token attribute-arguments&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;48&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token attribute&#34;&gt;&lt;span class=&#34;token class-name&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token attribute-arguments&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;赋值结果&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;a[2] = &#39;4&#39;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;4-递归返回返回到第一次递归调用&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#4-递归返回返回到第一次递归调用&#34;&gt;#&lt;/a&gt; 4. 递归返回：返回到第一次递归调用&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;完成  &lt;code&gt;convert(a + 2, 4)&lt;/code&gt;  后&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;执行  &lt;code&gt;*a = (48 % 10) + &#39;0&#39; = &#39;8&#39;&lt;/code&gt; （ &lt;code&gt;a[1] = &#39;8&#39;&lt;/code&gt; ）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;调用栈&lt;/strong&gt;：&lt;/p&gt;
&lt;figure class=&#34;highlight csharp&#34;&gt;&lt;figcaption data-lang=&#34;C#&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token attribute&#34;&gt;&lt;span class=&#34;token class-name&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token attribute-arguments&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;483&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token attribute&#34;&gt;&lt;span class=&#34;token class-name&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token attribute-arguments&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;48&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;赋值结果&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;a[1] = &#39;8&#39;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;5-递归返回返回到初始调用&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#5-递归返回返回到初始调用&#34;&gt;#&lt;/a&gt; 5. 递归返回：返回到初始调用&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;完成  &lt;code&gt;convert(a + 1, 48)&lt;/code&gt;  后&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;执行  &lt;code&gt;*a = (483 % 10) + &#39;0&#39; = &#39;3&#39;&lt;/code&gt; （ &lt;code&gt;a[0] = &#39;3&#39;&lt;/code&gt; ）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;调用栈&lt;/strong&gt;：&lt;/p&gt;
&lt;figure class=&#34;highlight csharp&#34;&gt;&lt;figcaption data-lang=&#34;C#&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token attribute&#34;&gt;&lt;span class=&#34;token class-name&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token attribute-arguments&#34;&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;483&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;赋值结果&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;a[0] = &#39;3&#39;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;可视化调用栈&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#可视化调用栈&#34;&gt;#&lt;/a&gt; 可视化调用栈&lt;/h3&gt;
&lt;p&gt;为了更直观地理解，让我们用图示表示递归调用和返回过程。&lt;/p&gt;
&lt;figure class=&#34;highlight css&#34;&gt;&lt;figcaption data-lang=&#34;CSS&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;调用栈顶部&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;┌────────────────────┐&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;│ &lt;span class=&#34;token function&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a + 2&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; 4&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;  │&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;│ 执行 *a = &lt;span class=&#34;token string&#34;&gt;&#39;4&#39;&lt;/span&gt;      │&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;└────────────────────┘&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      返回&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;┌────────────────────┐&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;│ &lt;span class=&#34;token function&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a + 1&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; 48&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; │&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;│ 执行 *a = &lt;span class=&#34;token string&#34;&gt;&#39;8&#39;&lt;/span&gt;      │&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;└────────────────────┘&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      返回&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;┌────────────────────┐&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;│ &lt;span class=&#34;token function&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; 483&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;     │&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;│ 执行 *a = &lt;span class=&#34;token string&#34;&gt;&#39;3&#39;&lt;/span&gt;      │&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;└────────────────────┘&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      返回&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;每一次递归调用都会在栈上新增一个栈帧（函数调用的上下文），当一个调用完成后，控制权自动返回到上一个栈帧的位置，继续执行后续的代码。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;有时间细说这个递归&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241224140100206.png&#34; alt=&#34;image-20241224140100206&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;先到这吧，4 道题花一上午，效率越来越低了，来两道数学去了。递归有点说法的，下个坑考虑开递归&lt;/strong&gt;&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://0d0-1yp0.github.io/2024/12/24/some/%E5%88%86%E4%BA%AB/</guid>
            <title>安装一个‘小’工具有点想跟powershell爆了</title>
            <link>https://0d0-1yp0.github.io/2024/12/24/some/%E5%88%86%E4%BA%AB/</link>
            <category term="日常" scheme="https://0d0-1yp0.github.io/categories/some/" />
            <category term="日常" scheme="https://0d0-1yp0.github.io/tags/%E6%97%A5%E5%B8%B8/" />
            <pubDate>Tue, 24 Dec 2024 00:00:00 +0800</pubDate>
            <description><![CDATA[ &lt;p&gt;昨天戴✌分享了一个非常好玩的终端命令修补工具&lt;/p&gt;
&lt;p&gt;安装的时候我真的是 fuck 了有点麻烦，尤其是最后用在 powershell 的时候&lt;/p&gt;
&lt;p&gt;由此引入一下修改  &lt;code&gt;$PROFILE&lt;/code&gt;  文件和 PowerShell 中的配置吧&lt;/p&gt;
&lt;h1 id=&#34;修改-profile-文件&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#修改-profile-文件&#34;&gt;#&lt;/a&gt; 修改  &lt;code&gt;$PROFILE&lt;/code&gt;  文件&lt;/h1&gt;
&lt;p&gt;是 PowerShell 中的一种配置方法，用于在启动 PowerShell 会话时自动执行某些命令或定义函数。这个文件相当于一个 PowerShell 会话的启动脚本，可以用来设置环境变量、定义函数、别名、导入模块等。&lt;/p&gt;
&lt;h3 id=&#34;profile-文件的原理&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#profile-文件的原理&#34;&gt;#&lt;/a&gt;  &lt;code&gt;$PROFILE&lt;/code&gt;  文件的原理&lt;/h3&gt;
&lt;p&gt;在 PowerShell 中， &lt;code&gt;$PROFILE&lt;/code&gt;  是一个特殊的自动变量，指向 PowerShell 配置文件的路径。该文件在每次启动 PowerShell 会话时被自动执行，通常用于配置用户偏好和初始化一些常用的设置。&lt;/p&gt;
&lt;h3 id=&#34;具体解释&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#具体解释&#34;&gt;#&lt;/a&gt; 具体解释&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;路径&lt;/strong&gt;： &lt;code&gt;$PROFILE&lt;/code&gt;  变量指向的是当前用户的 PowerShell 配置文件路径。你可以通过以下命令查看  &lt;code&gt;$PROFILE&lt;/code&gt;  的内容：&lt;/p&gt;
&lt;figure class=&#34;highlight powershell&#34;&gt;&lt;figcaption data-lang=&#34;PowerShell&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token variable&#34;&gt;$PROFILE&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;对于大多数用户，默认路径通常是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt;:  &lt;code&gt;C:\Users\&amp;lt;YourUsername&amp;gt;\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linux/macOS&lt;/strong&gt;:  &lt;code&gt;~/.config/powershell/profile.ps1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：在  &lt;code&gt;$PROFILE&lt;/code&gt;  文件中，PowerShell 会加载其中定义的命令和配置。例如，你可以在文件中加入以下内容：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;定义函数&lt;/strong&gt;：在  &lt;code&gt;$PROFILE&lt;/code&gt;  文件中，你可以定义你常用的 PowerShell 函数，这些函数会在每次启动 PowerShell 会话时自动可用。例如：&lt;/p&gt;
&lt;figure class=&#34;highlight powershell&#34;&gt;&lt;figcaption data-lang=&#34;PowerShell&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;function&lt;/span&gt; greet &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;Write-Host&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;Hello, &lt;span class=&#34;token variable&#34;&gt;$args&lt;/span&gt;&#34;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;每次启动 PowerShell 后， &lt;code&gt;greet&lt;/code&gt;  函数就可以立即使用。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;设置别名&lt;/strong&gt;：你还可以在  &lt;code&gt;$PROFILE&lt;/code&gt;  中定义别名，使得长命令可以简化。例如：&lt;/p&gt;
&lt;figure class=&#34;highlight powershell&#34;&gt;&lt;figcaption data-lang=&#34;PowerShell&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;Set-Alias&lt;/span&gt; ll &lt;span class=&#34;token function&#34;&gt;Get-ChildItem&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;这样，在 PowerShell 中使用  &lt;code&gt;ll&lt;/code&gt;  就等同于使用  &lt;code&gt;Get-ChildItem&lt;/code&gt;  命令。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;自动加载模块&lt;/strong&gt;：在  &lt;code&gt;$PROFILE&lt;/code&gt;  中定义常用模块的导入命令。比如：&lt;/p&gt;
&lt;figure class=&#34;highlight powershell&#34;&gt;&lt;figcaption data-lang=&#34;PowerShell&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;Import-Module&lt;/span&gt; posh-git&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置环境变量&lt;/strong&gt;：可以在  &lt;code&gt;$PROFILE&lt;/code&gt;  文件中配置特定的环境变量或调整系统设置。例如：&lt;/p&gt;
&lt;figure class=&#34;highlight powershell&#34;&gt;&lt;figcaption data-lang=&#34;PowerShell&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token variable&#34;&gt;$env&lt;/span&gt;:PATH &lt;span class=&#34;token operator&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;&#34;;C:\Program Files\MyTools&#34;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;如何被加载&lt;/strong&gt;：每次启动一个新的 PowerShell 会话时，系统会自动加载  &lt;code&gt;$PROFILE&lt;/code&gt;  文件中的所有内容，执行其中的命令。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;profile-文件的种类&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#profile-文件的种类&#34;&gt;#&lt;/a&gt;  &lt;code&gt;$PROFILE&lt;/code&gt;  文件的种类&lt;/h3&gt;
&lt;p&gt;PowerShell 有多种类型的  &lt;code&gt;$PROFILE&lt;/code&gt;  文件，取决于你是在全局范围还是仅在当前用户会话中进行配置。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;当前用户的 PowerShell 配置文件&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;这个文件只影响当前用户的 PowerShell 会话。通常路径是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt;:  &lt;code&gt;C:\Users\&amp;lt;YourUsername&amp;gt;\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linux/macOS&lt;/strong&gt;:  &lt;code&gt;~/.config/powershell/profile.ps1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;你可以通过以下命令查看当前用户配置文件的路径：&lt;/p&gt;
&lt;figure class=&#34;highlight powershell&#34;&gt;&lt;figcaption data-lang=&#34;PowerShell&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token variable&#34;&gt;$PROFILE&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;全局 PowerShell 配置文件&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;如果你希望影响所有用户（管理员级别），可以编辑系统范围内的  &lt;code&gt;$PROFILE&lt;/code&gt;  文件。路径通常是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt;:  &lt;code&gt;C:\Program Files\WindowsPowerShell\Microsoft.PowerShell_profile.ps1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linux/macOS&lt;/strong&gt;:  &lt;code&gt;/etc/powershell/profile.ps1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;你可以通过以下命令查看系统范围内配置文件的路径：&lt;/p&gt;
&lt;figure class=&#34;highlight powershell&#34;&gt;&lt;figcaption data-lang=&#34;PowerShell&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token variable&#34;&gt;$PROFILE&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;AllUsersCurrentHost&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;特定主机的 PowerShell 配置文件&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;除了全局和用户配置文件，还有针对特定主机的配置文件。例如，你可以为 &lt;strong&gt;PowerShell ISE&lt;/strong&gt; 定义一个单独的配置文件。不同主机的路径如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows PowerShell&lt;/strong&gt;： &lt;code&gt;$PROFILE.AllUsersCurrentHost&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PowerShell ISE&lt;/strong&gt;： &lt;code&gt;$PROFILE.AllUsersISEHost&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些配置文件允许你根据不同的使用场景配置 PowerShell 环境。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;修改-profile-文件的目的&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#修改-profile-文件的目的&#34;&gt;#&lt;/a&gt; 修改  &lt;code&gt;$PROFILE&lt;/code&gt;  文件的目的&lt;/h3&gt;
&lt;p&gt;此情况，修改  &lt;code&gt;$PROFILE&lt;/code&gt;  文件的目的是让 PowerShell 会话在启动时自动定义  &lt;code&gt;fuck&lt;/code&gt;  函数。&lt;/p&gt;
&lt;p&gt;因为 fuck 函数是 pip 安装的，得手动配&lt;/p&gt;
&lt;p&gt;这样，就可以在 PowerShell 中通过输入  &lt;code&gt;fuck&lt;/code&gt;  来调用  &lt;code&gt;thefuck&lt;/code&gt; ，而不需要每次都手动配置。&lt;/p&gt;
&lt;p&gt;当把  &lt;code&gt;Invoke-Expression (&amp;amp; thefuck --alias)&lt;/code&gt;  这样的命令添加到  &lt;code&gt;$PROFILE&lt;/code&gt;  中时，PowerShell 在启动时会自动执行该命令，创建  &lt;code&gt;fuck&lt;/code&gt;  函数，从而使你可以在会话中使用该命令。&lt;/p&gt;
&lt;p&gt;但是，由于在我的环境下，直接在  &lt;code&gt;$PROFILE&lt;/code&gt;  文件中运行  &lt;code&gt;thefuck --alias&lt;/code&gt;  可能会导致问题（如  &lt;code&gt;Invoke-Expression&lt;/code&gt;  错误），所以我们通常建议手动将输出的函数定义复制到  &lt;code&gt;$PROFILE&lt;/code&gt;  中，而不是直接执行  &lt;code&gt;thefuck --alias&lt;/code&gt;  命令。这种方法更加稳定，避免了潜在的错误。&lt;/p&gt;
&lt;h3 id=&#34;总结&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#总结&#34;&gt;#&lt;/a&gt; 总结&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;$PROFILE 文件&lt;/strong&gt; 是一个 PowerShell 配置文件，用于在启动 PowerShell 会话时自动执行一些命令或配置，通常用于定义函数、别名、模块加载等。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;修改  &lt;code&gt;$PROFILE&lt;/code&gt;  文件&lt;/strong&gt; 可以使一些常用功能在每次启动 PowerShell 时自动生效，避免每次手动配置。&lt;/li&gt;
&lt;li&gt;敲一个 fuck 就能让你的 bash 或者 shell 麻溜改命令，好玩捏&lt;/li&gt;
&lt;/ul&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://0d0-1yp0.github.io/2024/12/23/some/%E5%85%AC%E5%91%8A/</guid>
            <title>公告栏</title>
            <link>https://0d0-1yp0.github.io/2024/12/23/some/%E5%85%AC%E5%91%8A/</link>
            <category term="日常" scheme="https://0d0-1yp0.github.io/categories/some/" />
            <category term="日常" scheme="https://0d0-1yp0.github.io/tags/%E6%97%A5%E5%B8%B8/" />
            <pubDate>Mon, 23 Dec 2024 00:00:00 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;welcome-to-my-cyber-world&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#welcome-to-my-cyber-world&#34;&gt;#&lt;/a&gt; welcome to my cyber world！&lt;/h1&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/cover.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;公告栏&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#公告栏&#34;&gt;#&lt;/a&gt; 公告栏&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;当前版本：v1.20&lt;/strong&gt;    &lt;em&gt;2026-04-10&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;2026-04-10 v1.20 新增功能&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;近期恢复更新，同时搞了一个腾讯云服务器，现在可以从下面两个 url 访问本 blog：&lt;br /&gt;
&lt;a href=&#34;http://152.136.170.39/&#34;&gt;http://152.136.170.39/&lt;/a&gt;   腾讯云服务器，国内访问较快，请不要进行攻击因为腾讯会给我发短信 qwq&lt;/p&gt;
&lt;p&gt;或&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://0d0-1yp0.github.io/&#34;&gt;https://0d0-1yp0.github.io/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;已修复问题&lt;/strong&gt;&lt;/em&gt;：&lt;/p&gt;
&lt;p&gt;修复了网页偶现不显示中文而是英文的 bug，现在绝大多数情况下正常显示中文。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;已知问题:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;网页更新在推送后，有缓存的用户不刷新无法获取最新网页，或者需要多次刷新，同时，正常来讲文章封面是随机可刷新的，但由于网页缓存一般在体验上是固定的，正在想办法&lt;/li&gt;
&lt;li&gt;支付宝的魂灵经常飘荡在微信赞赏上方，我服了马跌&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;版本预告：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;即将加入音乐播放器。&lt;/li&gt;
&lt;li&gt;暂时不会开放评论区，某师傅说要给我打 xss 我害怕&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;往期版本，问题修复见公告最下方，有需要建站的可以参考可能出现的问题然后修一修&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;欢迎各位，希望大家都能坚持下去。。。！&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;本 blog 仅用于技术分享，暂不开放评论区。转载请遵守相关法律法规 ==&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;！！！任何文章涉及侵权请联系本人，本人将在 24 小时内立刻删除！！！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;可以反馈体验或 bug&lt;/p&gt;
&lt;p&gt;转载请标出处，目前只在 CSDN 搬自己的文章&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.csdn.net/2201_75506722?type=blog&#34;&gt;https://blog.csdn.net/2201_75506722?type=blog&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;其他地方见到均为盗版，帮点举报，感谢您的帮助&lt;/p&gt;
&lt;p&gt;欢迎分享与收藏&lt;/p&gt;
&lt;p&gt;20241222：另，冬至日快乐，两年没在今天吃饺子啦，希望明年大任务完成能更好点吧&lt;/p&gt;
&lt;p&gt;建这个站很累但是真的很值得&lt;/p&gt;
&lt;p&gt;20260410：大任务大失败，我完蛋啦&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;​																		&lt;em&gt;&lt;strong&gt;D&#39;s   odyssey			 															   26/04/10&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2 id=&#34;往期问题修复版本优化&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#往期问题修复版本优化&#34;&gt;#&lt;/a&gt; 往期问题修复 &amp;amp; 版本优化&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;2024-12-24 v1.12 热补丁修复&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;现已修复长文章出现图片丢失无法显示的情况（改动了一处 js 文件，可能造成性能略微损失，以后过长的文章会分 P）&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;2024-12-23 v1.11 热补丁修改&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;修复了公告里的一处错别字（？）&lt;/li&gt;
&lt;li&gt;由于支付宝实名显示规则暂仅开放微信充电，感谢您的一片热心，心意领了～顺便相当于修复了支付宝赞赏码过丑的问题和手机端赞赏偶现 bug 的问题（？）&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;2024-12-22 v1.01 热补丁修改&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;修复了腾讯云 COS 存储桶因为我欠了三分钱当场给我图片毙了 35 小时还没给我发短信的严重 BUG（？）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;往期大版本更新&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#往期大版本更新&#34;&gt;#&lt;/a&gt; 往期大版本更新&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;大版本更新：v1.10&lt;/strong&gt;    &lt;em&gt;2024-12-22&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&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;/li&gt;
&lt;li&gt;
&lt;p&gt;标签，分类功能上线，便于各位审计自己需要的东西&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;大版本更新：v1.00&lt;/strong&gt;    &lt;em&gt;2024-12-20&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;打造了五天五夜的站闪耀登场！&lt;/li&gt;
&lt;li&gt;可以拉到最下方查看本站存活时间以及访问量哦～&lt;/li&gt;
&lt;/ol&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://0d0-1yp0.github.io/2024/12/23/basic-C/C%E8%AF%AD%E8%A8%80%E5%85%A5%E9%97%A8%E5%9B%9E%E5%BD%92(%E4%BA%8C)/</guid>
            <title>C语言入门知识点&amp;基础思路（二）</title>
            <link>https://0d0-1yp0.github.io/2024/12/23/basic-C/C%E8%AF%AD%E8%A8%80%E5%85%A5%E9%97%A8%E5%9B%9E%E5%BD%92(%E4%BA%8C)/</link>
            <category term="C语言基础" scheme="https://0d0-1yp0.github.io/categories/basic-C/" />
            <category term="C语言" scheme="https://0d0-1yp0.github.io/tags/C%E8%AF%AD%E8%A8%80/" />
            <category term="基础" scheme="https://0d0-1yp0.github.io/tags/%E5%9F%BA%E7%A1%80/" />
            <category term="算法" scheme="https://0d0-1yp0.github.io/tags/%E7%AE%97%E6%B3%95/" />
            <pubDate>Mon, 23 Dec 2024 00:00:00 +0800</pubDate>
            <description><![CDATA[ &lt;p&gt;&lt;strong&gt;tips：本期有挑战题&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;你我不曾感受过&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;c语言笑传又来了说是&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#c语言笑传又来了说是&#34;&gt;#&lt;/a&gt; C 语言笑传又来了说是&lt;/h1&gt;
&lt;p&gt;最近用了 copilot，真不是一般的小机灵鬼，感觉被狠狠监视了&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241223090938881.png&#34; alt=&#34;image-20241223090938881&#34; /&gt;&lt;/p&gt;
&lt;p&gt;你坝还啥也没写呢，先给我猜出来了&lt;/p&gt;
&lt;p&gt;练题还是把它老人家闭了吧，否则手写代码的时候直接变小丑&lt;/p&gt;
&lt;p&gt;上题！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意，以下答案仅供参考，指针这部分我也还在学习中，答案对了也可能不代表规范性适合严格的考试！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;67字符串&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#67字符串&#34;&gt;#&lt;/a&gt; 6.7 字符串&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;我说我本来想学指针，结果突然发现字符串忘没了于是滚回去复习有人信吗哈哈哈哈哈哈哈&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241223091738394.png&#34; alt=&#34;image-20241223091738394&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;此题注意事项&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;博主脑子有点不灵活，先不上链表动态内存之类的高级操作，先用大数组苟分，后面再试高级操作（挖坑）&lt;/li&gt;
&lt;li&gt;打 pwn 后遗症犯了总想来点阴的&lt;/li&gt;
&lt;li&gt;同学，你的思路是什么？我的思路不一定就适合你哦&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;思路知识点&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#思路知识点&#34;&gt;#&lt;/a&gt; 思路知识点：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;scanf (&amp;quot;% s&amp;quot;) 遇到空格就会停止读取，不会读入空格，在读取字符串时会自动在末尾添加 &#39;\0&#39; 结束符（可以想象 scanf 格式化字符串的本质）&lt;/li&gt;
&lt;li&gt;gets (): 会自动添加 &#39;\0&#39;, 但不安全，已废弃（但也许考试的话是可以用的）&lt;/li&gt;
&lt;li&gt;如果要处理带空格的字符串输入，更推荐用 fgets ()（但也许考试的话是没必要的）&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; word&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;fgets&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;word&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;word&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token constant&#34;&gt;stdin&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;strlen () 不会把 &#39;\0&#39; 计算在内，它只计算到 &#39;\0&#39; 之前的字符个数，比如 &amp;quot;hello&amp;quot; 的 strlen () 结果是 5，但是 &#39;\0&#39; 确实会占用数组的一个位置 (word [5])。&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; word&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;scanf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;%s&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; word&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;word&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token char&#34;&gt;&#39;h&#39;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;word&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token char&#34;&gt;&#39;e&#39;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;word&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token char&#34;&gt;&#39;l&#39;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;word&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token char&#34;&gt;&#39;l&#39;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;word&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token char&#34;&gt;&#39;o&#39;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;word&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token char&#34;&gt;&#39;\0&#39;&lt;/span&gt;   &lt;span class=&#34;token comment&#34;&gt;//scanf 自动添加的结束符&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/blockquote&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;回车键 (\n) 不会被 scanf (&amp;quot;% s&amp;quot;) 存储，如果用 fgets ()，回车符会被存储，并且 &#39;\0&#39; 会在回车符之后&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;是的我刚才拿 scanf 搓半天才发现自己是人机，阴 4 你 8 了&lt;/p&gt;
&lt;p&gt;上 wp！！&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token macro property&#34;&gt;&lt;span class=&#34;token directive-hash&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;token directive keyword&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token macro property&#34;&gt;&lt;span class=&#34;token directive-hash&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;token directive keyword&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&amp;lt;string.h&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; word&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; num&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token function&#34;&gt;fgets&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;word&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token constant&#34;&gt;stdin&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;token comment&#34;&gt;// 别忘了，假设用 scanf 的话，字符串变量名本身就是个指针，不要加取地址符&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;i&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;i&lt;span class=&#34;token operator&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;strlen&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;word&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;i&lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;word&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;token char&#34;&gt;&#39; &#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; num&lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  num&lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;token comment&#34;&gt;// 最后一个词算上&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;%d&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;num&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;&lt;s&gt;&amp;lt;u&amp;gt; 好了我们可以去干一把指针了 &amp;lt;/u&amp;gt;&lt;/s&gt;&lt;/p&gt;
&lt;h2 id=&#34;挑战87字符变换&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#挑战87字符变换&#34;&gt;#&lt;/a&gt; 挑战：8.7 字符变换&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241223101047226.png&#34; alt=&#34;image-20241223101047226&#34; /&gt;&lt;/p&gt;
&lt;p&gt;真成笑传了，西八&lt;/p&gt;
&lt;h3 id=&#34;思路知识点-2&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#思路知识点-2&#34;&gt;#&lt;/a&gt; 思路知识点：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;ASCII 中，32 是空格也就是上文的‘ ’，0-9 是 48-57，A-Z 是 65-90，a-z 是 97-122，也就是大写加 32 就是小写&lt;/li&gt;
&lt;li&gt;这个挑战只是题干长，我们用心想想是可以秒的。可以回看上面字符串在内存里的存储，可能可以更直观一点&lt;/li&gt;
&lt;li&gt;首尾相连考虑 strcat，注意它会干掉第一个 \0&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;char *strcat(char *dest, const char *src);&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;
&lt;p&gt;指针的基本知识要牢牢掌握，另外要理解字符和数字的变换&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;思路上没有太复杂的东西，一定要注意 * 和 &amp;amp; 的运用，以及字符串变量名指针的本质&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;此题注意事项：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;此题主要是指针部分比较难，可以对着源码回忆，想想如果是你你会怎么做&lt;/li&gt;
&lt;li&gt;&lt;s&gt;好好读题，不要看见长题干就不想做，啊对我说的就是我自己&lt;/s&gt;&lt;/li&gt;
&lt;li&gt;由于函数传虚参实参规则，拿指针打会更稳&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我们先一步一步来，以下是我个人解题过程中进行的尝试&lt;/p&gt;
&lt;p&gt;对，都来看我没了 copilot 后的铸币操作吧哈哈哈哈哈哈哈我真得不想活辣！！&lt;/p&gt;
&lt;h3 id=&#34;解题过程最终答案在最后面&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#解题过程最终答案在最后面&#34;&gt;#&lt;/a&gt; 解题过程（最终答案在最后面）:&lt;/h3&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token macro property&#34;&gt;&lt;span class=&#34;token directive-hash&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;token directive keyword&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token macro property&#34;&gt;&lt;span class=&#34;token directive-hash&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;token directive keyword&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&amp;lt;string.h&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token macro property&#34;&gt;&lt;span class=&#34;token directive-hash&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;token directive keyword&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&amp;lt;stdlib.h&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; lens&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;StringCode&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;b&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; c&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    c&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token char&#34;&gt;&#39;\0&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;strcat&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;strcat&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;token comment&#34;&gt;// 首尾相连完成了，暂时存在 c 里，其实就是为了方便第 slen/2 以后的字符&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; i&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;i&lt;span class=&#34;token operator&#34;&gt;&amp;lt;&lt;/span&gt;lens&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;i&lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token comment&#34;&gt;// 开始遍历了&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;lens&lt;span class=&#34;token operator&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;token char&#34;&gt;&#39;a&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token keyword&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;token char&#34;&gt;&#39;a&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;17&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;lens&lt;span class=&#34;token operator&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;&gt;&lt;/span&gt;&lt;span class=&#34;token char&#34;&gt;&#39;z&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;18&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;19&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;            &lt;span class=&#34;token keyword&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;&gt;&lt;/span&gt;&lt;span class=&#34;token char&#34;&gt;&#39;z&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;20&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;21&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;22&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;23&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;lens&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token char&#34;&gt;&#39;\0&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;24&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;source=%s&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;c&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;token comment&#34;&gt;// 手动截断&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;25&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;26&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;27&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;28&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt; &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;29&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;b&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;30&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token function&#34;&gt;scanf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;%s&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;31&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  lens&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;strlen&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;32&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token function&#34;&gt;StringCode&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;b&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;33&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;//   printf (&#34;原字符串 =% s\n 新字符串 =% s&#34;,a,b);&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;34&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;//   printf(&#34;source=%s&#34;,a);&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;35&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;36&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;以下是个人独白，各位低血压可以看看。其实写到这里就差一句话就成功了，可惜后面越改越偏：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;先到这里。输入 Weihua，得到的结果是 source=qeihua&lt;/p&gt;
&lt;p&gt;也就是 W 正常变了，其他的还没变，迈出了第一步。理论是可行的&lt;/p&gt;
&lt;p&gt;但是，为什么别的没有变呢？？？&lt;/p&gt;
&lt;p&gt;在第 10 行后加入 printf (&amp;quot;source=% s\n&amp;quot;,c);，发现结果是&lt;/p&gt;
&lt;p&gt;source=WeihuaWeihua&lt;br /&gt;
source=qeihua&lt;/p&gt;
&lt;p&gt;字符串正常拼接了。再把 i 全都打印发现确实已经循环过五次了，手动加的截断点也是正常的&lt;/p&gt;
&lt;p&gt;岂有此理？&lt;/p&gt;
&lt;p&gt;先把 a 和 b 加上吧，先不调试了，&lt;/p&gt;
&lt;p&gt;等等。。。。？？？？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;渐渐的写入迷了，导致忘记了题目，接下来半小时越改越偏&lt;/p&gt;
&lt;p&gt;最后突然发现，WTF 不对啊，我要打的不是差值吗，这给我干哪来了&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241223143929154.png&#34; alt=&#34;image-20241223143929154&#34; /&gt;&lt;/p&gt;
&lt;p&gt;有时候就感觉这脑子里面装的是一坨&lt;/p&gt;
&lt;p&gt;好了，没啥想说的了已经，上最终 wp&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token macro property&#34;&gt;&lt;span class=&#34;token directive-hash&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;token directive keyword&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token macro property&#34;&gt;&lt;span class=&#34;token directive-hash&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;token directive keyword&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&amp;lt;string.h&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token macro property&#34;&gt;&lt;span class=&#34;token directive-hash&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;token directive keyword&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&amp;lt;stdlib.h&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; lens&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;StringCode&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;b&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; c&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    c&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token char&#34;&gt;&#39;\0&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;strcat&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;strcat&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;token comment&#34;&gt;// 首尾相连完成了，暂时存在 c 里，其实就是为了方便第 slen/2 以后的字符&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; i &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; i &lt;span class=&#34;token operator&#34;&gt;&amp;lt;&lt;/span&gt; lens&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; i&lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;lens&lt;span class=&#34;token operator&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; i&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;i&lt;span class=&#34;token operator&#34;&gt;&amp;lt;&lt;/span&gt;lens&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;i&lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token comment&#34;&gt;// 开始遍历了&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;token char&#34;&gt;&#39;a&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;token keyword&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;token char&#34;&gt;&#39;a&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;     &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;&gt;&lt;/span&gt;&lt;span class=&#34;token char&#34;&gt;&#39;z&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;&gt;&lt;/span&gt;&lt;span class=&#34;token char&#34;&gt;&#39;z&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;b&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;17&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;18&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;b&lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt;lens&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token char&#34;&gt;&#39;\0&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;19&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;20&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;21&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;22&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt; &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;23&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;b&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;24&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token function&#34;&gt;scanf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;%s&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;25&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  lens&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token function&#34;&gt;strlen&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;26&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token function&#34;&gt;StringCode&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;b&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;27&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;old=%s\nnew=%s&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;b&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;28&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;29&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241223144241980.png&#34; alt=&#34;image-20241223144241980&#34; /&gt;&lt;/p&gt;
&lt;p&gt;AI 依赖有时候真的会导致搓代码搓一半开始自嗨了，唉&lt;/p&gt;
&lt;p&gt;今天就先做到这吧，已经铸币了&lt;/p&gt;
&lt;p&gt;不懂的可以到 csdn dd 我，我看到后一定第一时间尽力解答&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://0d0-1yp0.github.io/2024/12/23/some/%E8%BF%98%E6%B2%A1%E5%A1%AB%E7%9A%84%E5%A4%A9%E5%9D%91/</guid>
            <title>挖了但是还没填的坑呜呜呜</title>
            <link>https://0d0-1yp0.github.io/2024/12/23/some/%E8%BF%98%E6%B2%A1%E5%A1%AB%E7%9A%84%E5%A4%A9%E5%9D%91/</link>
            <category term="日常" scheme="https://0d0-1yp0.github.io/categories/some/" />
            <category term="日常" scheme="https://0d0-1yp0.github.io/tags/%E6%97%A5%E5%B8%B8/" />
            <pubDate>Mon, 23 Dec 2024 00:00:00 +0800</pubDate>
            <description><![CDATA[ &lt;ol&gt;
&lt;li&gt;挖了 copilot 教学的坑&lt;/li&gt;
&lt;li&gt;挖了 2020 网鼎逆向复盘的坑&lt;/li&gt;
&lt;li&gt;挖了 sagemath 命令行教学的坑&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;哈哈哈哈哈哈哈自己挖坑自己跳了说是&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#哈哈哈哈哈哈哈自己挖坑自己跳了说是&#34;&gt;#&lt;/a&gt; 哈哈哈哈哈哈哈，自己挖坑自己跳了说是&lt;/h3&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://0d0-1yp0.github.io/2024/12/22/CTF/crypto/%E4%BB%A5%E4%B8%80%E9%81%93CTF%E9%A2%98%E7%9C%9F%E6%AD%A3%E5%88%9D%E8%AF%86RSA/</guid>
            <title>以一道CTF题真正初识RSA</title>
            <link>https://0d0-1yp0.github.io/2024/12/22/CTF/crypto/%E4%BB%A5%E4%B8%80%E9%81%93CTF%E9%A2%98%E7%9C%9F%E6%AD%A3%E5%88%9D%E8%AF%86RSA/</link>
            <category term="CTF" scheme="https://0d0-1yp0.github.io/categories/CTF/" />
            <category term="密码学" scheme="https://0d0-1yp0.github.io/categories/CTF/crypto/" />
            <category term="CTF" scheme="https://0d0-1yp0.github.io/tags/CTF/" />
            <category term="密码" scheme="https://0d0-1yp0.github.io/tags/%E5%AF%86%E7%A0%81/" />
            <pubDate>Sun, 22 Dec 2024 00:00:00 +0800</pubDate>
            <description><![CDATA[ &lt;blockquote&gt;
&lt;p&gt;给我的 crypto 入个门，入个门被数学✌薄纱&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文借 (chao) 鉴 (xi) 了鄙校北神上课用的用例，希望明年上课的师弟搜到这个文章不会影响佬师上课啊哈哈哈 ww&lt;/p&gt;
&lt;p&gt;开始前可以看一眼 RSA 的基本原理，本文不会提到很深&lt;/p&gt;
&lt;p&gt;&lt;s&gt;数学不好，密码还是太难了，一个字都看不懂哈哈哈哈哈哈哈&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;先用一个入门的 pip 包吧&lt;/p&gt;
&lt;figure class=&#34;highlight bash&#34;&gt;&lt;figcaption data-lang=&#34;bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;pip &lt;span class=&#34;token function&#34;&gt;install&lt;/span&gt; pycryptodome&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;开始，根据一道 CTF 题慢慢来&lt;/p&gt;
&lt;h2 id=&#34;先改一下flag以调通newcomerpy代码&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#先改一下flag以调通newcomerpy代码&#34;&gt;#&lt;/a&gt; 先改一下 flag 以调通 newcomer.py 代码&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;题目：初识 RSA&lt;br /&gt;
 来源：XSCTF 新人选拔赛&lt;br /&gt;
描述：p 和 q 藏起来了，你能帮我找到它们吗？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我找个 damn&lt;/p&gt;
&lt;figure class=&#34;highlight python&#34;&gt;&lt;figcaption data-lang=&#34;python&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;from&lt;/span&gt; Crypto&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;Util&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;number &lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; bytes_to_long&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;inverse&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;getPrime&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;from&lt;/span&gt; flag &lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; flag&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;m &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; bytes_to_long&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;flag&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;p &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; getPrime&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;q &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; getPrime&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;n &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; p&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;q&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;n&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;e &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;65537&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;c &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;pow&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;m&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;e&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;n&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;pq &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; p&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;q&lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;qp &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; q&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;p&lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;17&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;c=&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;c&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;18&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;n=&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;n&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;19&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;pq=&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;pq&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;20&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;qp=&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;qp&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;21&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;22&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token triple-quoted-string string&#34;&gt;&#39;&#39;&#39;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;23&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;c= 8722269075970644434253339592758512788160408912707387632591552130175707843950684315083250494010055435391879036285103810263591951437829414438640307561645721347859659807138051841516634704123100270651976676182059252251162982609391666023674158274992400910869692389001622774140191223807887675081808561012755545464977015973615407965906513878979919700065923364884766974187303774330319143647840846354404070430118235352622445115153298578370521811697710289716188726587743282814946239856766713516166990341116198180068191759095913957606379780234116317390622824096667107736103270907349927467971817639795094030622157581511033950777&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;24&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;n= 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074584935050067254029262890188260006596141011807724688556673520261743199388391094490191001701011230322653422314758778116196105077883955436582364267530633358016652912054880813710531145973799193443828969535902856467548523653920307742364119002349899553478815101092655897400295925170383678499125295006364960124859003&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;25&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;pq= 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074488896197029704465200125337817646702009123916866455067019234171839614862660036737875747177391796376553159880972782837853473250804807544086701088829096838316550146794766718580877976153967582795248676367265069623900208276878140709691073369415161936376086988069213820933152601453587292943483693378833664901178324&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;26&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;qp= 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074475956379708898904933143429835002718457573266164923043251954374464149976302585916538814746811455883837138715445492053610047383292461097590195481556557381952895539341802954749542143253491617052100969586396996063822508764438280468492894012685918249843558593322831683872737943676955669923498182824352081785243246&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;27&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&#39;&#39;&#39;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;原题是引入的 flag 文件，把那行注释掉，下面加一行自己写的 flag 就行，记得用 b 包裹&lt;/p&gt;
&lt;h2 id=&#34;用自己的语言写出rsa公钥和私钥的计算公式使用pqphined为符号&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#用自己的语言写出rsa公钥和私钥的计算公式使用pqphined为符号&#34;&gt;#&lt;/a&gt; 用自己的语言写出 RSA 公钥和私钥的计算公式（使用 p，q，phi，n，e，d 为符号）&lt;/h2&gt;
&lt;p&gt;设 p，q 为大质数，n=pq&lt;/p&gt;
&lt;p&gt;phi=(p-1)(q-1)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;根据欧拉函数，phi=(p-1)(q-1)，此部分的证明可以搜一下或者问问强大的大语言模型&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;e=65537 (公钥指数，任意小于 phi 并与其互质的即可)&lt;/p&gt;
&lt;p&gt;d=inverse (e,phi)(私钥指数)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;inverse 在库里带了，求逆元的意思&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;公钥对即为 e，n；私钥对即为 d，n&lt;/p&gt;
&lt;h2 id=&#34;利用题目下方注释中的已知变量计算phi并利用inverse函数编程计算e在模phi意义下的乘法逆元记为d根据程序运行结果写出d的具体数值&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#利用题目下方注释中的已知变量计算phi并利用inverse函数编程计算e在模phi意义下的乘法逆元记为d根据程序运行结果写出d的具体数值&#34;&gt;#&lt;/a&gt; 利用题目下方注释中的已知变量计算 phi，并利用 inverse 函数编程计算 e 在模 phi 意义下的乘法逆元，记为 d，根据程序运行结果写出 d 的具体数值；&lt;/h2&gt;
&lt;p&gt;别想太多，n=p*q，那么极其显然&lt;/p&gt;
&lt;p&gt;phi 就是 pq&lt;em&gt;qp/n（别把这里面的 pq 理解成 p&lt;/em&gt; * q，看上面的 python 代码哦同学）&lt;/p&gt;
&lt;p&gt;（请忽略我的背景柚子厨怎么你了 wwwwwww）&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241222195849333.png&#34; alt=&#34;image-20241222195849333&#34; /&gt;&lt;/p&gt;
&lt;p&gt;sagemath 命令行还有一些常用的东西，可以看我其他的文章（挖坑）&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241222202021405.png&#34; alt=&#34;image-20241222202021405&#34; /&gt;&lt;/p&gt;
&lt;p&gt;你算对了吗？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;phi=(pq*qp) //n，这句话如果用单 / 会报 OverflowError: integer division result too large for a float。是除法运算导致的类型溢出，用双 // 即可。&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;h2 id=&#34;根据下列给出的p-q-e根据rsa算法编程计算公钥n与私钥d&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#根据下列给出的p-q-e根据rsa算法编程计算公钥n与私钥d&#34;&gt;#&lt;/a&gt; 根据下列给出的 p、q、e，根据 RSA 算法编程计算公钥 n 与私钥 d；&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;p=173747400775037237499119138628710917207976935718394035613063219109153197713240288497094852951328821120301146137416392125632164384666157952079993477037237778043103278877799120982366215399159107746276881271883220494577745511406216675640773966244559596835970378099355485746784486359013819361014997811485589135463&lt;/p&gt;
&lt;p&gt;q=131816585373639721213952582957741137275970828607414189698553233434142961482639192734668517311468596205692079539001403643395543816907261944034422413069781755026864643651448329100659792941632674865761952547883089120086825249692433942528976412805682521697534499714513072333159601382118300897685368738513700813533&lt;/p&gt;
&lt;p&gt;e=65537&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;没什么好说的，建议同学们先自己做一下在对答案，错了回去看看上面的&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;n=22902789087710692282201627723972920087676945775651369909558749681603601877066490004280829887082860024866325792922333359888979450409785852136285331867214311784932513053946349686873084098919921626735642656688483918867105990444133292660146552582773030563402978424369091489168537829677450378086515187008083500599611600232061376101775199885242634728744796816625633726726074004731386467983188726961022911791843528459801349329514692878947844318287016330210241002676592845651108656701768277324789376390295075009358573926461653230171198186299924562887630088294834319717425915382663997302617669638278141644149065887129240620779&lt;/p&gt;
&lt;p&gt;d=19271863372140646463624718313226644858249851666842334809381515307252297674818586817615620577428910108660806391844117335212132837202625393102518076757881313639679468046843452495262065227324059965356828746942945552493466195508226172853946655099900580076597708945613657755972616318922476707819049590581423940789934387916037469210407055279325381173039093072419831193470910945428027164177392052950722125466565541460489747701257832749756103367996775905993293368370146016279539314698750416709668194421867922941773222876602958853233196249715041186342934713607756322667953880385223035641130659335671630397231173571336884350777&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;利用上述公钥n-e对你名字全拼如liuyangfan进行加密&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#利用上述公钥n-e对你名字全拼如liuyangfan进行加密&#34;&gt;#&lt;/a&gt; 利用上述公钥 n、e 对你名字全拼（如：liuyangfan）进行加密&lt;/h2&gt;
&lt;figure class=&#34;highlight python&#34;&gt;&lt;figcaption data-lang=&#34;python&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;from&lt;/span&gt; Crypto&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;Util&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;number &lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; bytes_to_long&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;inverse&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;getPrime&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;long_to_bytes&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;# #from flag import flag&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;flag&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;b&#39;flag coming~&#39;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;m &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; bytes_to_long&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;flag&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;p&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;173747400775037237499119138628710917207976935718394035613063219109153197713240288497094852951328821120301146137416392125632164384666157952079993477037237778043103278877799120982366215399159107746276881271883220494577745511406216675640773966244559596835970378099355485746784486359013819361014997811485589135463&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;q&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;131816585373639721213952582957741137275970828607414189698553233434142961482639192734668517311468596205692079539001403643395543816907261944034422413069781755026864643651448329100659792941632674865761952547883089120086825249692433942528976412805682521697534499714513072333159601382118300897685368738513700813533&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;e&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;65537&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;n&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;22902789087710692282201627723972920087676945775651369909558749681603601877066490004280829887082860024866325792922333359888979450409785852136285331867214311784932513053946349686873084098919921626735642656688483918867105990444133292660146552582773030563402978424369091489168537829677450378086515187008083500599611600232061376101775199885242634728744796816625633726726074004731386467983188726961022911791843528459801349329514692878947844318287016330210241002676592845651108656701768277324789376390295075009358573926461653230171198186299924562887630088294834319717425915382663997302617669638278141644149065887129240620779&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;d&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;19271863372140646463624718313226644858249851666842334809381515307252297674818586817615620577428910108660806391844117335212132837202625393102518076757881313639679468046843452495262065227324059965356828746942945552493466195508226172853946655099900580076597708945613657755972616318922476707819049590581423940789934387916037469210407055279325381173039093072419831193470910945428027164177392052950722125466565541460489747701257832749756103367996775905993293368370146016279539314698750416709668194421867922941773222876602958853233196249715041186342934713607756322667953880385223035641130659335671630397231173571336884350777&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;c &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token builtin&#34;&gt;pow&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;m&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;e&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;n&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;c=&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;c&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;豪丸，哈哈&lt;/p&gt;
&lt;h2 id=&#34;利用上述私钥d将下列密文c解密为明文用long_to_bytes转为字节码打印&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#利用上述私钥d将下列密文c解密为明文用long_to_bytes转为字节码打印&#34;&gt;#&lt;/a&gt; 利用上述私钥 d，将下列密文 c 解密为明文（用 long_to_bytes 转为字节码打印）&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;c=22383445933736798279478032679517743837766449187698865398822423786317612396771654040156586654564003392384975014045643201026069165276350584034120841617657486555798948939049343900381125798000000172357016404870066390095970211708364996514629691512019106870733929516372325207940525326467947232996619729431748024769431567208774806188872803942768881324395058229038610826245541466028073553184615680354118655959979504640632739098044460639023736294401801478667944983999124796530293982085703611284581213900570723479615642643430713949661089128106079384524944632103663244376051089098793845750645708721359256022997797080498949228931&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&#34;highlight python&#34;&gt;&lt;figcaption data-lang=&#34;python&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;from&lt;/span&gt; Crypto&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;Util&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;number &lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; bytes_to_long&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;inverse&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;getPrime&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;long_to_bytes&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;# #from flag import flag&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;p&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;173747400775037237499119138628710917207976935718394035613063219109153197713240288497094852951328821120301146137416392125632164384666157952079993477037237778043103278877799120982366215399159107746276881271883220494577745511406216675640773966244559596835970378099355485746784486359013819361014997811485589135463&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;q&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;131816585373639721213952582957741137275970828607414189698553233434142961482639192734668517311468596205692079539001403643395543816907261944034422413069781755026864643651448329100659792941632674865761952547883089120086825249692433942528976412805682521697534499714513072333159601382118300897685368738513700813533&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;e&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;65537&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;n&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;22902789087710692282201627723972920087676945775651369909558749681603601877066490004280829887082860024866325792922333359888979450409785852136285331867214311784932513053946349686873084098919921626735642656688483918867105990444133292660146552582773030563402978424369091489168537829677450378086515187008083500599611600232061376101775199885242634728744796816625633726726074004731386467983188726961022911791843528459801349329514692878947844318287016330210241002676592845651108656701768277324789376390295075009358573926461653230171198186299924562887630088294834319717425915382663997302617669638278141644149065887129240620779&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;d&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;19271863372140646463624718313226644858249851666842334809381515307252297674818586817615620577428910108660806391844117335212132837202625393102518076757881313639679468046843452495262065227324059965356828746942945552493466195508226172853946655099900580076597708945613657755972616318922476707819049590581423940789934387916037469210407055279325381173039093072419831193470910945428027164177392052950722125466565541460489747701257832749756103367996775905993293368370146016279539314698750416709668194421867922941773222876602958853233196249715041186342934713607756322667953880385223035641130659335671630397231173571336884350777&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;c &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;22383445933736798279478032679517743837766449187698865398822423786317612396771654040156586654564003392384975014045643201026069165276350584034120841617657486555798948939049343900381125798000000172357016404870066390095970211708364996514629691512019106870733929516372325207940525326467947232996619729431748024769431567208774806188872803942768881324395058229038610826245541466028073553184615680354118655959979504640632739098044460639023736294401801478667944983999124796530293982085703611284581213900570723479615642643430713949661089128106079384524944632103663244376051089098793845750645708721359256022997797080498949228931&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;pq &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; p&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;q&lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;qp &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; q&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;p&lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;phi&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;pq&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;qp&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;//&lt;/span&gt;n&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;d&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;inverse&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;e&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;phi&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;c&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token builtin&#34;&gt;pow&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;d&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;n&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;long_to_bytes&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;当然，flag 没变哦，答案还是 “flag coming~”&lt;/p&gt;
&lt;p&gt;豪丸，当然，碰到几个难题就老实了&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://0d0-1yp0.github.io/2024/12/20/basic-C/C%E8%AF%AD%E8%A8%80%E5%85%A5%E9%97%A8%E5%9B%9E%E5%BD%92%EF%BC%88%E4%B8%80%EF%BC%89/</guid>
            <title>C语言入门知识点&amp;基础思路（一）</title>
            <link>https://0d0-1yp0.github.io/2024/12/20/basic-C/C%E8%AF%AD%E8%A8%80%E5%85%A5%E9%97%A8%E5%9B%9E%E5%BD%92%EF%BC%88%E4%B8%80%EF%BC%89/</link>
            <category term="C语言基础" scheme="https://0d0-1yp0.github.io/categories/basic-C/" />
            <category term="C语言" scheme="https://0d0-1yp0.github.io/tags/C%E8%AF%AD%E8%A8%80/" />
            <category term="基础" scheme="https://0d0-1yp0.github.io/tags/%E5%9F%BA%E7%A1%80/" />
            <category term="算法" scheme="https://0d0-1yp0.github.io/tags/%E7%AE%97%E6%B3%95/" />
            <pubDate>Fri, 20 Dec 2024 00:00:00 +0800</pubDate>
            <description><![CDATA[ &lt;blockquote&gt;
&lt;p&gt;giants&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;c语言笑传之猜猜背一&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#c语言笑传之猜猜背一&#34;&gt;#&lt;/a&gt; C 语言笑传之猜猜背（一）&lt;/h1&gt;
&lt;p&gt;半年没碰 c 语言入门题，已成咸鱼矣&lt;/p&gt;
&lt;p&gt;遂，have a try&lt;/p&gt;
&lt;p&gt;古语有云，c 语言入门必刷青览，古语有云，难度不如 OI 一根&lt;/p&gt;
&lt;p&gt;我又不如青览一根，何如？算了哪有不疯的&lt;/p&gt;
&lt;h2 id=&#34;取位&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#取位&#34;&gt;#&lt;/a&gt; 取位&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/a61073f9479408aca71660bb68c40c0.png&#34; alt=&#34;a61073f9479408aca71660bb68c40c0&#34; /&gt;&lt;/p&gt;
&lt;p&gt;说实话半年没摸真忘了是取位，还以为 a&lt;em&gt;100+b&lt;/em&gt;10+c 这种操作来着&lt;/p&gt;
&lt;p&gt;难度不大，就是旁边的师弟差点没把我气死矣&lt;/p&gt;
&lt;h3 id=&#34;思路知识点&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#思路知识点&#34;&gt;#&lt;/a&gt; 思路知识点：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;取位的操作也就是利用好取余和整数除 10 即可&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;此题注意事项&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;取的位自己验一下就行&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;上 wp&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token macro property&#34;&gt;&lt;span class=&#34;token directive-hash&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;token directive keyword&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; i &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; i &lt;span class=&#34;token operator&#34;&gt;&amp;lt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; i&lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;i&lt;span class=&#34;token operator&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt; i&lt;span class=&#34;token operator&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;%d &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; i &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; i &lt;span class=&#34;token operator&#34;&gt;&amp;lt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; i&lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;i&lt;span class=&#34;token operator&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt; i&lt;span class=&#34;token operator&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;%d &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;如果不知 1000 的话就得用表达式表示范围了，以后再说&lt;/p&gt;
&lt;h2 id=&#34;数组&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#数组&#34;&gt;#&lt;/a&gt; 数组&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/7b499f6356e89f60fcb83ae96dda62f.png&#34; alt=&#34;7b499f6356e89f60fcb83ae96dda62f&#34; /&gt;&lt;/p&gt;
&lt;p&gt;善，我入个门，不输出就行，删除什么链表什么 free 什么的，有缘再叙！&lt;/p&gt;
&lt;p&gt;掐指一算，我就多开一个数组负责标记好了&lt;/p&gt;
&lt;h3 id=&#34;思路知识点-2&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#思路知识点-2&#34;&gt;#&lt;/a&gt; 思路知识点：&lt;/h3&gt;
&lt;p&gt;​	这里就没啥知识点了，硬说的话，用另一个数组做标记算思路吧&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;此题注意事项&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;博主之前第 10 行不小心写的 i++。第 12 行不小心写的 j [i] == 1&lt;/li&gt;
&lt;li&gt;少看多做，看和做是两回事&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;代码别写错&lt;/p&gt;
&lt;p&gt;废话少说，show me the code！！！&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token macro property&#34;&gt;&lt;span class=&#34;token directive-hash&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;token directive keyword&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&amp;lt;stdio.h&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;j&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; i&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;i &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; i &lt;span class=&#34;token operator&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; i&lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    j&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;scanf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;%d&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;&amp;amp;&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; k &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; k &lt;span class=&#34;token operator&#34;&gt;&amp;lt;&lt;/span&gt; i&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; k&lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt; a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;k&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; j&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;  &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;i &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; i &lt;span class=&#34;token operator&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; i&lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;j&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;%d &#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt;a&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;i&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;  &lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;下播！&lt;/p&gt;
&lt;p&gt;D&#39;s domain&lt;/p&gt;
&lt;p&gt;24/12/20&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://0d0-1yp0.github.io/2024/12/20/CTF/binary/PWN/pwndbg%E7%94%A8%E6%B3%95%E5%9F%BA%E7%A1%80/</guid>
            <title>pwndbg操作方式个人总结（一）</title>
            <link>https://0d0-1yp0.github.io/2024/12/20/CTF/binary/PWN/pwndbg%E7%94%A8%E6%B3%95%E5%9F%BA%E7%A1%80/</link>
            <category term="CTF" scheme="https://0d0-1yp0.github.io/categories/CTF/" />
            <category term="二进制安全" scheme="https://0d0-1yp0.github.io/categories/CTF/binary/" />
            <category term="二进制漏洞PWN" scheme="https://0d0-1yp0.github.io/categories/CTF/binary/PWN/" />
            <category term="工具使用" scheme="https://0d0-1yp0.github.io/tags/%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8/" />
            <category term="二进制" scheme="https://0d0-1yp0.github.io/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6/" />
            <category term="CTF" scheme="https://0d0-1yp0.github.io/tags/CTF/" />
            <category term="pwn" scheme="https://0d0-1yp0.github.io/tags/pwn/" />
            <pubDate>Fri, 20 Dec 2024 00:00:00 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;将-pwndbg-输出重定向到另一个终端tty&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#将-pwndbg-输出重定向到另一个终端tty&#34;&gt;#&lt;/a&gt; 将 pwndbg 输出重定向到另一个终端（TTY）：&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;打开另一个终端&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;启动一个新的终端窗口或在当前终端中使用  &lt;code&gt;tmux&lt;/code&gt; 、 &lt;code&gt;screen&lt;/code&gt;  等工具分割出新的窗口。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用  &lt;code&gt;tty&lt;/code&gt;  命令获取该终端的设备文件路径。例如：&lt;/p&gt;
&lt;figure class=&#34;highlight bash&#34;&gt;&lt;figcaption data-lang=&#34;bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;$ &lt;span class=&#34;token function&#34;&gt;tty&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;/dev/pts/1&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;在 pwndbg 中设置输出重定向&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在 GDB（pwndbg）中输入以下命令，将上下文输出重定向到新的终端：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-gdb&#34;&gt;set context-output /dev/pts/1
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;现在，pwndbg 的上下文信息（如  &lt;code&gt;context&lt;/code&gt;  命令的输出）将显示在  &lt;code&gt;/dev/pts/1&lt;/code&gt;  对应的终端中。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;恢复默认设置（可选）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;想将输出恢复到默认终端，可以使用：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-gdb&#34;&gt;set context-output /dev/tty
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;pwndbg的基础操作&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#pwndbg的基础操作&#34;&gt;#&lt;/a&gt; pwndbg 的基础操作:&lt;/h1&gt;
&lt;p&gt;附上一个佬的原文链接，写的真的很厉害 ovo 就不重复赘述了&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接：&lt;a href=&#34;https://blog.csdn.net/XiDPPython/article/details/142690569&#34;&gt;https://blog.csdn.net/XiDPPython/article/details/142690569&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;pwndbg-额外操作&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#pwndbg-额外操作&#34;&gt;#&lt;/a&gt; &lt;strong&gt;Pwndbg&lt;/strong&gt; 额外操作&lt;/h1&gt;
&lt;p&gt;特别适用于逆向工程和漏洞利用。以下是一些常用的 pwndbg 命令及其用途：&lt;/p&gt;
&lt;h3 id=&#34;常用命令&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#常用命令&#34;&gt;#&lt;/a&gt; 常用命令：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;context&lt;/code&gt; （或  &lt;code&gt;ctx&lt;/code&gt; ）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;显示当前调试的上下文信息，包括寄存器、堆栈、代码和内存映射等。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用法：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;context&lt;/code&gt; ：显示默认的上下文信息。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;context code&lt;/code&gt; ：仅显示代码段的反汇编。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;context regs&lt;/code&gt; ：仅显示寄存器信息。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;context stack&lt;/code&gt; ：仅显示堆栈内容。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;context all&lt;/code&gt; ：显示所有可用的上下文信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;hexdump&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;以十六进制形式显示内存内容。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用法：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hexdump ADDRESS&lt;/code&gt; ：从指定地址开始显示内存内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;telescope&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;类似于  &lt;code&gt;hexdump&lt;/code&gt; ，但提供更友好的内存查看方式，自动解析指针和字符串。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用法：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;telescope ADDRESS&lt;/code&gt; ：从指定地址开始显示内存内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;vmmap&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;显示当前进程的内存映射信息。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用法：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vmmap&lt;/code&gt; ：列出所有内存段及其权限。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;search&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在内存中搜索特定的字节序列或模式。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用法：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;search PATTERN&lt;/code&gt; ：搜索指定的模式。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;pie&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;处理位置无关可执行文件（PIE）的相关命令。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用法：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pie breakpoint OFFSET&lt;/code&gt; ：在偏移地址处设置断点。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;rop&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;帮助查找 ROP（Return-Oriented Programming）小工具。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用法：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rop&lt;/code&gt; ：列出可用的 ROP 小工具。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;got&lt;/code&gt;  和  &lt;code&gt;plt&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;查看全局偏移量表（GOT）和过程链接表（PLT）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用法：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;got&lt;/code&gt; ：显示 GOT 表信息。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plt&lt;/code&gt; ：显示 PLT 表信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;aslr&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;控制地址空间布局随机化（ASLR）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用法：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aslr on&lt;/code&gt; ：启用 ASLR。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aslr off&lt;/code&gt; ：禁用 ASLR。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;elf-info&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;显示当前可执行文件的 ELF 格式信息。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用法：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;elf-info&lt;/code&gt; ：显示 ELF 文件的段和节信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;pwndbg积累操作本人个人经常会用到的一些操作&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#pwndbg积累操作本人个人经常会用到的一些操作&#34;&gt;#&lt;/a&gt; pwndbg 积累操作 (本人个人经常会用到的一些操作)&lt;/h1&gt;
&lt;h3 id=&#34;gdb-info-functions-win&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#gdb-info-functions-win&#34;&gt;#&lt;/a&gt; &lt;strong&gt;(&lt;strong&gt;gdb&lt;/strong&gt;)&lt;/strong&gt; &lt;strong&gt;info&lt;/strong&gt; &lt;strong&gt;functions&lt;/strong&gt; &lt;strong&gt;win&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;All&lt;/strong&gt; &lt;strong&gt;functions&lt;/strong&gt; &lt;strong&gt;matching&lt;/strong&gt; &lt;strong&gt;regular&lt;/strong&gt; &lt;strong&gt;expression&lt;/strong&gt; &lt;strong&gt;&amp;quot;win&amp;quot;&lt;/strong&gt;:  &lt;strong&gt;Non&lt;/strong&gt;-&lt;strong&gt;debugging&lt;/strong&gt; &lt;strong&gt;symbols:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;0&lt;/strong&gt;x080484cb  &lt;strong&gt;win&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;还会更新&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://0d0-1yp0.github.io/2024/12/18/CTF/binary/RE/2020%E7%BD%91%E9%BC%8ERE/</guid>
            <title>2020网鼎RE</title>
            <link>https://0d0-1yp0.github.io/2024/12/18/CTF/binary/RE/2020%E7%BD%91%E9%BC%8ERE/</link>
            <category term="CTF" scheme="https://0d0-1yp0.github.io/categories/CTF/" />
            <category term="二进制安全" scheme="https://0d0-1yp0.github.io/categories/CTF/binary/" />
            <category term="逆向工程reverse" scheme="https://0d0-1yp0.github.io/categories/CTF/binary/RE/" />
            <category term="二进制" scheme="https://0d0-1yp0.github.io/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6/" />
            <category term="CTF" scheme="https://0d0-1yp0.github.io/tags/CTF/" />
            <category term="逆向" scheme="https://0d0-1yp0.github.io/tags/%E9%80%86%E5%90%91/" />
            <category term="网鼎杯" scheme="https://0d0-1yp0.github.io/tags/%E7%BD%91%E9%BC%8E%E6%9D%AF/" />
            <pubDate>Wed, 18 Dec 2024 00:00:00 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;还木写完先开个坑&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#还木写完先开个坑&#34;&gt;#&lt;/a&gt; 还木写完 ^^ 先开个坑&lt;/h1&gt;
&lt;h3 id=&#34;代码分析&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#代码分析&#34;&gt;#&lt;/a&gt; &lt;strong&gt;代码分析：&lt;/strong&gt;&lt;/h3&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; __cdecl &lt;span class=&#34;token function&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; argc&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;argv&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;envp&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; v4&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;117&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// [esp+18h] [ebp-1D4h] BYREF&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token function&#34;&gt;__main&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token function&#34;&gt;qmemcpy&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;v4&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;&amp;amp;&lt;/span&gt;unk_403040&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0x1C8u&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token function&#34;&gt;vm_operad&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;v4&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;114&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token function&#34;&gt;puts&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;good,The answer format is:flag &amp;#123;&amp;#125;&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h4 id=&#34;逐行解释&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#逐行解释&#34;&gt;#&lt;/a&gt; &lt;strong&gt;逐行解释：&lt;/strong&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;函数签名：&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; __cdecl &lt;span class=&#34;token function&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; argc&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;argv&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;envp&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;标准的  &lt;code&gt;main&lt;/code&gt;  函数入口。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__cdecl&lt;/code&gt;  是调用约定，表示参数从右到左入栈，由调用者清理栈。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;变量声明：&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; v4&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;117&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// [esp+18h] [ebp-1D4h] BYREF&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;声明了一个包含 117 个整数的数组  &lt;code&gt;v4&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;注释指出了栈偏移量，表示  &lt;code&gt;v4&lt;/code&gt;  位于栈帧的  &lt;code&gt;[ebp - 0x1D4]&lt;/code&gt;  位置。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BYREF&lt;/code&gt;  表示该变量以引用方式传递给函数。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;调用  &lt;code&gt;__main()&lt;/code&gt; ：&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;__main&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;这是编译器（如 GCC）在初始化时调用的函数，用于设置全局构造函数等。&lt;/li&gt;
&lt;li&gt;在逆向工程中，它通常可以忽略，对主要逻辑影响不大。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;调用  &lt;code&gt;qmemcpy()&lt;/code&gt; ：&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;qmemcpy&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;v4&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;&amp;amp;&lt;/span&gt;unk_403040&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0x1C8u&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;将内存从  &lt;code&gt;&amp;amp;unk_403040&lt;/code&gt;  复制到  &lt;code&gt;v4&lt;/code&gt; ，长度为  &lt;code&gt;0x1C8&lt;/code&gt;  字节（456 字节）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;qmemcpy&lt;/code&gt;  类似于标准的  &lt;code&gt;memcpy&lt;/code&gt; ，但可能是 IDA Pro 的内部函数。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;调用  &lt;code&gt;vm_operad()&lt;/code&gt; ：&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;vm_operad&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;v4&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;114&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;调用函数  &lt;code&gt;vm_operad&lt;/code&gt; ，传入参数  &lt;code&gt;v4&lt;/code&gt;  和  &lt;code&gt;114&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;这里的  &lt;code&gt;114&lt;/code&gt;  可能表示操作码的数量、数据长度或某个关键值。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;输出信息：&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;puts&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;good,The answer format is:flag &amp;#123;&amp;#125;&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;输出提示信息，告诉我们答案的格式是  &lt;code&gt;flag &amp;#123;&amp;#125;&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;返回语句：&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;标准的  &lt;code&gt;main&lt;/code&gt;  函数返回，表示程序正常结束。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;深入分析&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#深入分析&#34;&gt;#&lt;/a&gt; &lt;strong&gt;深入分析：&lt;/strong&gt;&lt;/h3&gt;
&lt;h4 id=&#34;1-理解数据复制操作&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#1-理解数据复制操作&#34;&gt;#&lt;/a&gt; &lt;strong&gt;1. 理解数据复制操作：&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;数据源  &lt;code&gt;unk_403040&lt;/code&gt; ：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;unk_403040&lt;/code&gt;  是未知的全局数据，位于地址  &lt;code&gt;0x403040&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;我们需要查看该地址处的数据内容，可能是加密的数据、字节码、操作码等。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;复制操作：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将  &lt;code&gt;456&lt;/code&gt;  字节的数据复制到  &lt;code&gt;v4&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;v4&lt;/code&gt;  的大小为  &lt;code&gt;117 * 4 = 468&lt;/code&gt;  字节（因为每个  &lt;code&gt;int&lt;/code&gt;  是 4 字节），所以复制操作是安全的。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;2-分析-vm_operad-函数&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#2-分析-vm_operad-函数&#34;&gt;#&lt;/a&gt; &lt;strong&gt;2. 分析  &lt;code&gt;vm_operad()&lt;/code&gt;  函数：&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;函数作用猜测：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从函数名来看， &lt;code&gt;vm_operad&lt;/code&gt;  可能表示 “虚拟机操作”。&lt;/li&gt;
&lt;li&gt;这暗示该函数可能是一个虚拟机解释器，执行传入的字节码或操作码。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;参数  &lt;code&gt;114&lt;/code&gt;  的含义：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;114&lt;/code&gt;  可能表示操作码的数量或某个关键参数。&lt;/li&gt;
&lt;li&gt;可能与复制的数据长度或某种校验有关。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;3-反汇编-vm_operad&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#3-反汇编-vm_operad&#34;&gt;#&lt;/a&gt; &lt;strong&gt;3. 反汇编  &lt;code&gt;vm_operad()&lt;/code&gt; ：&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;步骤：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 IDA 中，定位并反汇编  &lt;code&gt;vm_operad&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;分析函数的控制流程，查看是否有循环、跳转表或条件判断。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;寻找模式：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;操作码解析：&lt;/strong&gt; 检查是否有读取  &lt;code&gt;v4&lt;/code&gt;  中数据作为操作码的逻辑。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;栈操作：&lt;/strong&gt; 查看是否有自定义的栈，用于模拟指令执行。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关键函数调用：&lt;/strong&gt; 寻找与字符串比较、加密解密、输出相关的函数调用。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;4-堆栈不平衡问题的原因&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#4-堆栈不平衡问题的原因&#34;&gt;#&lt;/a&gt; &lt;strong&gt;4. 堆栈不平衡问题的原因：&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;异常的栈操作：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果  &lt;code&gt;vm_operad&lt;/code&gt;  在执行过程中直接修改了栈指针（如  &lt;code&gt;ESP&lt;/code&gt;  寄存器），会导致 IDA 无法正确跟踪栈帧，出现堆栈不平衡的提示。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;解决方法：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;手动调整：&lt;/strong&gt; 在 IDA 中，可以手动修改栈平衡，在函数属性中调整栈偏移。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分析调用约定：&lt;/strong&gt; 确保函数的入口和出口栈平衡，即进入和离开函数时，栈指针应恢复到相同的值。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;5-修改-call-指令的值为-0-的意义&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#5-修改-call-指令的值为-0-的意义&#34;&gt;#&lt;/a&gt; &lt;strong&gt;5. 修改  &lt;code&gt;call&lt;/code&gt;  指令的值为  &lt;code&gt;0&lt;/code&gt;  的意义：&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;跳过函数调用：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将  &lt;code&gt;call&lt;/code&gt;  指令的目标地址修改为  &lt;code&gt;0&lt;/code&gt; ，相当于调用了一个空函数，可能会导致程序崩溃或无操作返回。&lt;/li&gt;
&lt;li&gt;在逆向过程中，这种修改用于跳过某些干扰性的函数，如反调试、反虚拟化或延时函数。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;保持栈平衡：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;即使修改了  &lt;code&gt;call&lt;/code&gt; ，也需要确保栈的平衡。&lt;/li&gt;
&lt;li&gt;可以用  &lt;code&gt;NOP&lt;/code&gt;  指令替换  &lt;code&gt;call&lt;/code&gt; ，或者调整栈指针，使得程序继续正常执行。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;可视化结构图&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#可视化结构图&#34;&gt;#&lt;/a&gt; &lt;strong&gt;可视化结构图：&lt;/strong&gt;&lt;/h3&gt;
&lt;h4 id=&#34;函数调用栈&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#函数调用栈&#34;&gt;#&lt;/a&gt; &lt;strong&gt;函数调用栈：&lt;/strong&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;[ 高地址 ]
+-----------------------+
| 命令行参数 envp       |
+-----------------------+
| 命令行参数 argv       |
+-----------------------+
| 参数个数 argc         |
+-----------------------+
| 返回地址              | &amp;lt;-- 调用 __main() 压入的返回地址
+-----------------------+
| 返回地址              | &amp;lt;-- 调用 main() 压入的返回地址
+-----------------------+
| 旧的 EBP              | &amp;lt;-- 基指针 EBP
+-----------------------+
| 局部变量 v4[117]      | &amp;lt;-- 栈帧中的变量
+-----------------------+
[ 低地址 ]
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;程序执行流程&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#程序执行流程&#34;&gt;#&lt;/a&gt; &lt;strong&gt;程序执行流程：&lt;/strong&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;开始执行  &lt;code&gt;main()&lt;/code&gt; &lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;调用  &lt;code&gt;__main()&lt;/code&gt; &lt;/strong&gt;：初始化操作。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据复制&lt;/strong&gt;：将数据从  &lt;code&gt;unk_403040&lt;/code&gt;  复制到  &lt;code&gt;v4&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;执行  &lt;code&gt;vm_operad(v4, 114)&lt;/code&gt; &lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;可能解释执行  &lt;code&gt;v4&lt;/code&gt;  中的数据。&lt;/li&gt;
&lt;li&gt;关键的逻辑可能在此函数中。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;输出提示信息&lt;/strong&gt;：告诉我们答案的格式。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;程序结束&lt;/strong&gt;：返回  &lt;code&gt;0&lt;/code&gt; 。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;成为逆向大师的指导&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#成为逆向大师的指导&#34;&gt;#&lt;/a&gt; &lt;strong&gt;成为逆向大师的指导：&lt;/strong&gt;&lt;/h3&gt;
&lt;h4 id=&#34;1-深入分析-unk_403040&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#1-深入分析-unk_403040&#34;&gt;#&lt;/a&gt; &lt;strong&gt;1. 深入分析  &lt;code&gt;unk_403040&lt;/code&gt; ：&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;查看数据内容：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 IDA 中，跳转到地址  &lt;code&gt;0x403040&lt;/code&gt; ，查看数据是否为可读字符串、操作码或其他格式。&lt;/li&gt;
&lt;li&gt;如果是字节码，尝试手动解析。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;数据模式识别：&lt;/strong&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;/ul&gt;
&lt;h4 id=&#34;2-解析-vm_operad-的逻辑&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#2-解析-vm_operad-的逻辑&#34;&gt;#&lt;/a&gt; &lt;strong&gt;2. 解析  &lt;code&gt;vm_operad()&lt;/code&gt;  的逻辑：&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;反汇编并注释：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;逐行反汇编  &lt;code&gt;vm_operad&lt;/code&gt; ，添加注释，理解每个指令的作用。&lt;/li&gt;
&lt;li&gt;关注寄存器的使用、条件跳转和函数调用。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;构建操作码表：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果  &lt;code&gt;vm_operad&lt;/code&gt;  是解释器，可能有一个操作码对应的指令集。&lt;/li&gt;
&lt;li&gt;建立操作码与指令的映射，模拟执行过程。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;3-解决堆栈不平衡&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#3-解决堆栈不平衡&#34;&gt;#&lt;/a&gt; &lt;strong&gt;3. 解决堆栈不平衡：&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;理解栈帧结构：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;熟悉函数调用约定，如  &lt;code&gt;cdecl&lt;/code&gt; 、 &lt;code&gt;stdcall&lt;/code&gt;  等。&lt;/li&gt;
&lt;li&gt;理解栈指针（ESP）和基指针（EBP）的变化。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;修正 IDA 中的堆栈信息：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 IDA 的功能，手动设置函数的栈调整值。&lt;/li&gt;
&lt;li&gt;在函数属性中，设置正确的输入输出栈大小。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;4-实践调试技巧&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#4-实践调试技巧&#34;&gt;#&lt;/a&gt; &lt;strong&gt;4. 实践调试技巧：&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;使用调试器：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在动态调试器（如 OllyDbg、x64dbg）中运行程序，观察运行时的行为。&lt;/li&gt;
&lt;li&gt;设置断点，查看寄存器和内存的变化。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;脚本和自动化：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;利用 IDA Python 编写脚本，自动提取和分析数据。&lt;/li&gt;
&lt;li&gt;学习使用其他逆向工具，如 Ghidra、Radare2。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;5-解决逆向挑战&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#5-解决逆向挑战&#34;&gt;#&lt;/a&gt; &lt;strong&gt;5. 解决逆向挑战：&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;寻找密钥或 Flag：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;关注  &lt;code&gt;vm_operad&lt;/code&gt;  中的比较、循环和条件跳转。&lt;/li&gt;
&lt;li&gt;可能需要输入特定的数据，或者从  &lt;code&gt;v4&lt;/code&gt;  中提取信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;学习常见的加密和编码方式：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;熟悉 Base64、异或加密、移位加密等常用技巧。&lt;/li&gt;
&lt;li&gt;了解字符串加密和解密的过程。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;总结&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#总结&#34;&gt;#&lt;/a&gt; &lt;strong&gt;总结：&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;通过逐步分析代码，我们了解到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;程序从全局未知数据  &lt;code&gt;unk_403040&lt;/code&gt;  中复制了一段数据到本地变量  &lt;code&gt;v4&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;通过调用  &lt;code&gt;vm_operad&lt;/code&gt; ，可能对这段数据进行了解析或执行。&lt;/li&gt;
&lt;li&gt;输出的信息提示我们，答案的格式是  &lt;code&gt;flag &amp;#123;&amp;#125;&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要进一步解开这个逆向题，需要：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;深入分析  &lt;code&gt;vm_operad&lt;/code&gt;  的逻辑，理解其功能。&lt;/li&gt;
&lt;li&gt;可能需要模拟或重现  &lt;code&gt;vm_operad&lt;/code&gt;  的执行过程。&lt;/li&gt;
&lt;li&gt;从  &lt;code&gt;v4&lt;/code&gt;  或其他数据中提取出隐藏的  &lt;code&gt;flag&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;建议：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;耐心研究&lt;/strong&gt;：逆向工程需要耐心和细致的分析，逐行理解代码。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多练习&lt;/strong&gt;：通过解决更多的逆向题目，积累经验。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;学习基础&lt;/strong&gt;：巩固计算机体系结构、汇编语言和操作系统的知识。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;交流讨论&lt;/strong&gt;：与他人分享和讨论你的发现，可以获得新的思路。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;希望以上分析对你有所帮助，继续努力，你一定能成为一名出色的逆向工程师！\&lt;/p&gt;
&lt;p&gt;好的，让我们进一步分析  &lt;code&gt;vm_operad&lt;/code&gt;  函数的具体实现，逐步理解它的逻辑和可能的用途。&lt;/p&gt;
&lt;h3 id=&#34;代码分析-2&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#代码分析-2&#34;&gt;#&lt;/a&gt; &lt;strong&gt;代码分析：&lt;/strong&gt;&lt;/h3&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; __cdecl &lt;span class=&#34;token function&#34;&gt;vm_operad&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;a1&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; a2&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; result&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// eax&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// [esp+13h] [ebp-E5h] BYREF&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;char&lt;/span&gt; v4&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// [esp+DBh] [ebp-1Dh]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; v5&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// [esp+DCh] [ebp-1Ch]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; v6&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// [esp+E0h] [ebp-18h]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; v7&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// [esp+E4h] [ebp-14h]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; v8&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// [esp+E8h] [ebp-10h]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;int&lt;/span&gt; v9&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;token comment&#34;&gt;// [esp+ECh] [ebp-Ch]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;12&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  v9 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;13&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  v8 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;14&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  v7 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;15&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  v6 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;16&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  v5 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;17&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token keyword&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;18&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;19&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    result &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; v9&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;20&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt; v9 &lt;span class=&#34;token operator&#34;&gt;&gt;=&lt;/span&gt; a2 &lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;21&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token keyword&#34;&gt;return&lt;/span&gt; result&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;22&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token keyword&#34;&gt;switch&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt; a1&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v9&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;23&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;24&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token keyword&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;25&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v6 &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; v4&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;26&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;v9&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;27&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;v6&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;28&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;v8&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;29&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;30&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token keyword&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;31&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        v4 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; a1&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v9 &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v8&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;32&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        v9 &lt;span class=&#34;token operator&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;33&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;34&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token keyword&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;35&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        v4 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v8&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;LOBYTE&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a1&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v9 &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;36&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        v9 &lt;span class=&#34;token operator&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;37&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;38&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token keyword&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;39&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        v4 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; a1&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v9 &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;^&lt;/span&gt; Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v8&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;40&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        v9 &lt;span class=&#34;token operator&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;41&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;42&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token keyword&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;43&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        v4 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; a1&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v9 &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt; Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v8&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;44&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        v9 &lt;span class=&#34;token operator&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;45&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;46&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token keyword&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;47&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;v9&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;48&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;49&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token keyword&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;50&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt; Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v7 &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;!=&lt;/span&gt; a1&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v9 &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;51&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;52&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;          &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;what a shame...&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;53&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;          &lt;span class=&#34;token function&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;54&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;55&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;v7&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;56&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        v9 &lt;span class=&#34;token operator&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;57&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;58&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token keyword&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;59&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v5&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; v4&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;60&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;v9&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;61&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;v5&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;62&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;63&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token keyword&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;64&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token function&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;Str&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;65&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;v9&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;66&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;67&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token keyword&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;68&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        v4 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v8&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;69&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;v9&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;70&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;71&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token keyword&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;72&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        v4 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v8&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;73&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;v9&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;74&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;75&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;      &lt;span class=&#34;token keyword&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;token operator&#34;&gt;:&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;76&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;        &lt;span class=&#34;token keyword&#34;&gt;continue&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;77&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;78&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;  &lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;79&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;hr /&gt;
&lt;h3 id=&#34;逐行解释-2&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#逐行解释-2&#34;&gt;#&lt;/a&gt; &lt;strong&gt;逐行解释：&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;变量声明：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;int result;&lt;/code&gt; ：用于存储函数返回值。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;char Str[200];&lt;/code&gt; ：字符数组，用于存储字符串或数据。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;char v4;&lt;/code&gt; ：临时变量，用于存储中间计算的结果。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;int v5, v6, v7, v8, v9;&lt;/code&gt; ：多个整数变量，用于索引和计数。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;初始化：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;v9&lt;/code&gt;  初始化为  &lt;code&gt;0&lt;/code&gt; ，作为主循环的索引。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;v5&lt;/code&gt; ,  &lt;code&gt;v6&lt;/code&gt; ,  &lt;code&gt;v7&lt;/code&gt; ,  &lt;code&gt;v8&lt;/code&gt;  也初始化为  &lt;code&gt;0&lt;/code&gt; ，它们分别用于处理字符串和跟踪状态。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;主循环：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;while (1)&lt;/code&gt; ：无限循环，直到  &lt;code&gt;return&lt;/code&gt;  语句。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;result = v9;&lt;/code&gt; ：在每次循环开始时更新  &lt;code&gt;result&lt;/code&gt;  为当前索引。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;if (v9 &amp;gt;= a2) return result;&lt;/code&gt; ：如果索引  &lt;code&gt;v9&lt;/code&gt;  超过输入参数  &lt;code&gt;a2&lt;/code&gt; ，则返回当前结果，结束循环。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;switch 语句：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;根据  &lt;code&gt;a1[v9]&lt;/code&gt;  的值进行不同操作， &lt;code&gt;a1&lt;/code&gt;  是输入的整数数组。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;每种情况的分析&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#每种情况的分析&#34;&gt;#&lt;/a&gt; &lt;strong&gt;每种情况的分析：&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;case 1:&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v6 &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; v4&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;将  &lt;code&gt;v4&lt;/code&gt;  存入  &lt;code&gt;Str&lt;/code&gt;  数组的偏移量  &lt;code&gt;v6 + 100&lt;/code&gt; ，并更新  &lt;code&gt;v6&lt;/code&gt;  和  &lt;code&gt;v8&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;case 2:&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;v4 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; a1&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v9 &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v8&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;将  &lt;code&gt;a1&lt;/code&gt;  中下一个元素与  &lt;code&gt;Str[v8]&lt;/code&gt;  相加，结果存入  &lt;code&gt;v4&lt;/code&gt; ，并将  &lt;code&gt;v9&lt;/code&gt;  增加  &lt;code&gt;2&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;case 3:&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;v4 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v8&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;token function&#34;&gt;LOBYTE&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;a1&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v9 &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;将  &lt;code&gt;Str[v8]&lt;/code&gt;  减去  &lt;code&gt;a1[v9 + 1]&lt;/code&gt;  的低字节（使用  &lt;code&gt;LOBYTE&lt;/code&gt; ），结果存入  &lt;code&gt;v4&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;case 4:&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;v4 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; a1&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v9 &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;^&lt;/span&gt; Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v8&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;使用按位异或操作将  &lt;code&gt;a1[v9 + 1]&lt;/code&gt;  与  &lt;code&gt;Str[v8]&lt;/code&gt;  进行运算。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;case 5:&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;v4 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; a1&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v9 &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt; Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v8&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;将  &lt;code&gt;a1[v9 + 1]&lt;/code&gt;  与  &lt;code&gt;Str[v8]&lt;/code&gt;  相乘，结果存入  &lt;code&gt;v4&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;case 6:&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token operator&#34;&gt;++&lt;/span&gt;v9&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;仅增加  &lt;code&gt;v9&lt;/code&gt; ，不进行任何其他操作。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;case 7:&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v7 &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;!=&lt;/span&gt; a1&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v9 &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;token punctuation&#34;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#34;what a shame...&#34;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;    &lt;span class=&#34;token function&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token number&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token punctuation&#34;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;检查  &lt;code&gt;Str[v7 + 100]&lt;/code&gt;  是否等于  &lt;code&gt;a1[v9 + 1]&lt;/code&gt; ，如果不等，则打印错误信息并退出程序。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;case 8:&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v5&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; v4&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;将  &lt;code&gt;v4&lt;/code&gt;  存入  &lt;code&gt;Str&lt;/code&gt;  数组的偏移量  &lt;code&gt;v5&lt;/code&gt; ，并更新  &lt;code&gt;v5&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;case 10:&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token function&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;Str&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;从输入读取数据到  &lt;code&gt;Str&lt;/code&gt;  中。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;case 11:&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;v4 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v8&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;将  &lt;code&gt;Str[v8]&lt;/code&gt;  减去  &lt;code&gt;1&lt;/code&gt; ，结果存入  &lt;code&gt;v4&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;case 12:&lt;/strong&gt;&lt;/p&gt;
&lt;figure class=&#34;highlight c&#34;&gt;&lt;figcaption data-lang=&#34;c&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;v4 &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; Str&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;v8&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;将  &lt;code&gt;Str[v8]&lt;/code&gt;  加上  &lt;code&gt;1&lt;/code&gt; ，结果存入  &lt;code&gt;v4&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;default:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不执行任何操作，继续循环。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;潜在用途分析&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#潜在用途分析&#34;&gt;#&lt;/a&gt; &lt;strong&gt;潜在用途分析：&lt;/strong&gt;&lt;/h3&gt;
&lt;h4 id=&#34;1-逻辑概述&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#1-逻辑概述&#34;&gt;#&lt;/a&gt; &lt;strong&gt;1. 逻辑概述：&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vm_operad&lt;/code&gt;  函数似乎是一个简单的虚拟机或解释器，它根据传入的指令数组  &lt;code&gt;a1&lt;/code&gt;  逐步操作数组  &lt;code&gt;Str&lt;/code&gt;  和变量  &lt;code&gt;v4&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;这个函数可以执行多种操作，如加法、减法、乘法、异或等，处理相应的数据并将结果存储在  &lt;code&gt;Str&lt;/code&gt;  中。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;2-关键指令&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#2-关键指令&#34;&gt;#&lt;/a&gt; &lt;strong&gt;2. 关键指令：&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;读入数据&lt;/strong&gt;：通过  &lt;code&gt;read(Str)&lt;/code&gt;  可能是让用户输入数据以进一步处理。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;条件检查&lt;/strong&gt;：在  &lt;code&gt;case 7&lt;/code&gt;  中，如果输入不匹配，会导致程序退出，表明某些输入的有效性检查。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;3-输出逻辑&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#3-输出逻辑&#34;&gt;#&lt;/a&gt; &lt;strong&gt;3. 输出逻辑：&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;puts(&amp;quot;what a shame...&amp;quot;)&lt;/code&gt;  提示可能与程序的输入或逻辑错误有关，提示用户输入的值不符合预期。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;建议的进一步步骤&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#建议的进一步步骤&#34;&gt;#&lt;/a&gt; &lt;strong&gt;建议的进一步步骤：&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;观察输入数据结构&lt;/strong&gt;：分析传入的  &lt;code&gt;a1&lt;/code&gt;  数组内容，特别是其在  &lt;code&gt;main&lt;/code&gt;  函数中是如何被填充的。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跟踪执行&lt;/strong&gt;：使用调试工具逐步跟踪  &lt;code&gt;vm_operad&lt;/code&gt;  的执行，观察  &lt;code&gt;Str&lt;/code&gt;  和  &lt;code&gt;v4&lt;/code&gt;  的变化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;构造测试用例&lt;/strong&gt;：通过手动构造适当的  &lt;code&gt;a1&lt;/code&gt;  数组来观察函数的行为，以找到可能的输出或  &lt;code&gt;flag&lt;/code&gt; 。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;p&gt;希望这个分析对你进一步理解  &lt;code&gt;vm_operad&lt;/code&gt;  的逻辑有帮助！如果你还有其他问题或者需要更深入的讨论，请告诉我！&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://0d0-1yp0.github.io/2024/11/28/CTF/binary/%E5%A0%86%E6%A0%88%E4%B8%8D%E5%B9%B3%E8%A1%A1,%E5%B8%83%E6%A0%88/</guid>
            <title>堆栈不平衡，布栈</title>
            <link>https://0d0-1yp0.github.io/2024/11/28/CTF/binary/%E5%A0%86%E6%A0%88%E4%B8%8D%E5%B9%B3%E8%A1%A1,%E5%B8%83%E6%A0%88/</link>
            <category term="CTF" scheme="https://0d0-1yp0.github.io/categories/CTF/" />
            <category term="二进制安全" scheme="https://0d0-1yp0.github.io/categories/CTF/binary/" />
            <category term="基础" scheme="https://0d0-1yp0.github.io/tags/%E5%9F%BA%E7%A1%80/" />
            <category term="二进制" scheme="https://0d0-1yp0.github.io/tags/%E4%BA%8C%E8%BF%9B%E5%88%B6/" />
            <category term="CTF" scheme="https://0d0-1yp0.github.io/tags/CTF/" />
            <pubDate>Thu, 28 Nov 2024 00:00:00 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;堆栈不平衡&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#堆栈不平衡&#34;&gt;#&lt;/a&gt; 堆栈不平衡&lt;/h1&gt;
&lt;p&gt;通常是由于函数调用和返回过程中堆栈操作的不匹配。每当调用一个函数时，程序会将当前的栈指针（SP）和返回地址压入堆栈，这会影响到后续的堆栈操作。&lt;/p&gt;
&lt;p&gt;例如，假设一个函数调用  &lt;code&gt;func&lt;/code&gt; ，在进入  &lt;code&gt;func&lt;/code&gt;  时，栈指针会增加（即压入返回地址）。如果在  &lt;code&gt;func&lt;/code&gt;  中未正确地平衡堆栈（比如未能弹出相应的值），那么在返回时，栈指针可能会指向一个不正确的位置，导致堆栈不平衡。&lt;/p&gt;
&lt;p&gt;至于栈指针的修改，可以通过调整指令来确保调用的函数有正确的返回地址。例如，修改  &lt;code&gt;call&lt;/code&gt;  指令的目标地址为  &lt;code&gt;0&lt;/code&gt; ，可以防止调用某个函数，这在某些逆向工程中是用于跳过不必要的函数调用或陷阱，达到对程序行为的控制。&lt;/p&gt;
&lt;p&gt;简单来说，理解堆栈的操作顺序和调用约定是非常重要的。通过反汇编工具分析这些操作，可以更好地理解程序的执行流程和潜在的漏洞。你可以从调试程序，观察栈的变化入手，加深对这些概念的理解。&lt;/p&gt;
&lt;p&gt;要深入理解堆栈不平衡的问题，我们可以从堆栈的工作原理和汇编代码角度进行分析。&lt;/p&gt;
&lt;h3 id=&#34;1-堆栈的基本概念&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#1-堆栈的基本概念&#34;&gt;#&lt;/a&gt; 1. 堆栈的基本概念&lt;/h3&gt;
&lt;p&gt;堆栈是一种后进先出（LIFO）的数据结构，用于存储函数调用的信息，包括返回地址、局部变量和参数。堆栈的顶端通常由栈指针（SP）指向。&lt;/p&gt;
&lt;h3 id=&#34;2-函数调用的过程&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#2-函数调用的过程&#34;&gt;#&lt;/a&gt; 2. 函数调用的过程&lt;/h3&gt;
&lt;p&gt;当一个函数被调用时，会执行以下步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;保存返回地址&lt;/strong&gt;：调用指令（如  &lt;code&gt;call func&lt;/code&gt; ）会将当前指令的下一条地址压入堆栈。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;调整栈指针&lt;/strong&gt;：栈指针会减少（在 x86 架构中，栈向下增长）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;进入函数体&lt;/strong&gt;：函数内部可以通过栈来存储局部变量。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;示例代码&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#示例代码&#34;&gt;#&lt;/a&gt; 示例代码&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&#34;language-assembly&#34;&gt;push ebp           ; 保存旧的基指针
mov ebp, esp      ; 设置新的基指针
sub esp, 16       ; 为局部变量分配空间

; 函数体

mov esp, ebp      ; 恢复栈指针
pop ebp           ; 恢复旧的基指针
ret                ; 返回
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;3-堆栈不平衡的原因&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#3-堆栈不平衡的原因&#34;&gt;#&lt;/a&gt; 3. 堆栈不平衡的原因&lt;/h3&gt;
&lt;p&gt;如果在函数中未正确弹出压入的值，或者在返回之前没有恢复堆栈状态，就会导致堆栈不平衡。比如，如果你在函数内部多次压入值而没有相应的弹出，堆栈将继续增长，最终导致溢出。&lt;/p&gt;
&lt;h3 id=&#34;4-栈指针的修改&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#4-栈指针的修改&#34;&gt;#&lt;/a&gt; 4. 栈指针的修改&lt;/h3&gt;
&lt;p&gt;栈指针的修改通常涉及  &lt;code&gt;push&lt;/code&gt;  和  &lt;code&gt;pop&lt;/code&gt;  指令。例如，如果需要跳过某个函数的执行，可以将  &lt;code&gt;call&lt;/code&gt;  指令的目标地址更改为  &lt;code&gt;0&lt;/code&gt; ，这样不会实际调用任何函数，从而避免栈指针的进一步修改。&lt;/p&gt;
&lt;h4 id=&#34;伪代码示例&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#伪代码示例&#34;&gt;#&lt;/a&gt; 伪代码示例&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&#34;language-assembly&#34;&gt;call 0x0         ; 不会改变堆栈状态
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;5-可视化结构图&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#5-可视化结构图&#34;&gt;#&lt;/a&gt; 5. 可视化结构图&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[ ESP ]   --&amp;gt;  | Return Address | &amp;lt;-- call func
               | Local Var 1    |
               | Local Var 2    |
               | ...            |
               | Old EBP        |
[ EBP ]   --&amp;gt;  | Base Pointer   |
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;6-逆向工程的实用技巧&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#6-逆向工程的实用技巧&#34;&gt;#&lt;/a&gt; 6. 逆向工程的实用技巧&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;使用调试工具&lt;/strong&gt;：例如 GDB 或 x64dbg，逐步执行代码，观察堆栈的变化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分析调用约定&lt;/strong&gt;：了解不同平台（如 x86 和 x64）的调用约定，这对逆向非常重要。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;编写脚本&lt;/strong&gt;：可以使用 Python 等语言结合工具（如 IDA Pro 或 Ghidra）自动化分析任务。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;掌握这些基础知识后，继续深入学习汇编语言和计算机体系结构将有助于你成为真正的逆向工程大师！&lt;/p&gt;
&lt;h1 id=&#34;布栈&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#布栈&#34;&gt;#&lt;/a&gt; 布栈&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;教我做一道 CTF 中的 pwn 题: #!/usr/bin/env python from pwn import *  sh = process (&#39;./ret2libc1&#39;)  binsh_addr = 0x8048720 system_plt = 0x08048460 payload = flat ([b&#39;a&#39; * 112, system_plt, b&#39;b&#39; * 4, binsh_addr]) sh.sendline (payload)  sh.interactive () 这里我们需要注意函数调用栈的结构，如果是正常调用 system 函数，我们调用的时候会有一个对应的返回地址，这里以 &#39;bbbb&#39; 作为虚假的地址，其后参数对应的参数内容。  你看他布栈的时候，为什么要 system_plt 后面要布一个虚假的地址，然后才是参数呢，这里没太懂&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这道题目是典型的 &lt;strong&gt;ret2libc&lt;/strong&gt; 攻击 (Return-to-libc)，目标是通过覆盖栈上的返回地址，绕过程序的正常流程，转而调用  &lt;code&gt;system()&lt;/code&gt;  函数来执行命令（在这个例子中是  &lt;code&gt;/bin/sh&lt;/code&gt; ）。为了理解为什么  &lt;code&gt;system_plt&lt;/code&gt;  后面需要填充一个虚假的地址（ &lt;code&gt;b&#39;b&#39; * 4&lt;/code&gt; ），我们需要详细分析下栈结构和函数调用的过程。&lt;/p&gt;
&lt;h3 id=&#34;背景知识&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#背景知识&#34;&gt;#&lt;/a&gt; 背景知识&lt;/h3&gt;
&lt;p&gt;在  &lt;code&gt;x86&lt;/code&gt;  架构的程序中，函数调用的基本过程如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;压栈&lt;/strong&gt;：当一个函数被调用时，程序会将当前的 &lt;strong&gt;返回地址&lt;/strong&gt; 压入栈中，这个返回地址是程序调用该函数后，程序应该跳转回来的地址。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;参数传递&lt;/strong&gt;：在栈上，函数的参数会紧随返回地址之后依次被压入栈中。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;栈帧结构&lt;/strong&gt;：每次函数调用时，都会为该函数分配一个栈帧，栈帧中包含：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;返回地址&lt;/strong&gt;：指向调用函数之后的代码位置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;参数&lt;/strong&gt;：该函数的参数。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;攻击思路&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#攻击思路&#34;&gt;#&lt;/a&gt; 攻击思路&lt;/h3&gt;
&lt;p&gt;在这道题中，我们要利用程序中的漏洞，覆盖栈上的返回地址，使得程序在执行  &lt;code&gt;ret&lt;/code&gt; （返回指令）时跳到我们指定的地址，也就是  &lt;code&gt;system()&lt;/code&gt;  函数的地址。&lt;/p&gt;
&lt;h3 id=&#34;分析代码&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#分析代码&#34;&gt;#&lt;/a&gt; 分析代码&lt;/h3&gt;
&lt;figure class=&#34;highlight python&#34;&gt;&lt;figcaption data-lang=&#34;python&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token comment&#34;&gt;#!/usr/bin/env python&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;2&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class=&#34;token keyword&#34;&gt;from&lt;/span&gt; pwn &lt;span class=&#34;token keyword&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;3&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;4&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;sh &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; process&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;&#39;./ret2libc1&#39;&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;5&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;6&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;binsh_addr &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0x8048720&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;7&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;system_plt &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;0x08048460&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;8&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;payload &lt;span class=&#34;token operator&#34;&gt;=&lt;/span&gt; flat&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;token string&#34;&gt;b&#39;a&#39;&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;112&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; system_plt&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;token string&#34;&gt;b&#39;b&#39;&lt;/span&gt; &lt;span class=&#34;token operator&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;token number&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;,&lt;/span&gt; binsh_addr&lt;span class=&#34;token punctuation&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;9&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;sh&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;sendline&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;payload&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;10&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-num=&#34;11&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;sh&lt;span class=&#34;token punctuation&#34;&gt;.&lt;/span&gt;interactive&lt;span class=&#34;token punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;token punctuation&#34;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;binsh_addr = 0x8048720&lt;/code&gt; &lt;/strong&gt;：这是我们要传给  &lt;code&gt;system()&lt;/code&gt;  函数的参数地址，也就是  &lt;code&gt;/bin/sh&lt;/code&gt;  字符串的地址。 &lt;code&gt;system()&lt;/code&gt;  函数需要一个字符串参数，在这里我们传递的是  &lt;code&gt;/bin/sh&lt;/code&gt;  的地址， &lt;code&gt;system()&lt;/code&gt;  会执行该命令，启动一个 shell。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;system_plt = 0x08048460&lt;/code&gt; &lt;/strong&gt;：这是  &lt;code&gt;system&lt;/code&gt;  函数的地址，在程序中的 &lt;strong&gt;PLT（Procedure Linkage Table）&lt;/strong&gt; 区域。PLT 是程序用来调用动态库函数的一个表，每当程序要调用动态库中的函数时，都会先跳转到 PLT 处，由 PLT 去调用函数的实际地址。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;payload = flat([b&#39;a&#39; * 112, system_plt, b&#39;b&#39; * 4, binsh_addr])&lt;/code&gt; &lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt; &lt;code&gt;b&#39;a&#39; * 112&lt;/code&gt; &lt;/strong&gt;：这里填充的是  &lt;code&gt;112&lt;/code&gt;  个字节  &lt;code&gt;a&lt;/code&gt; ，这是覆盖栈帧到返回地址的部分。程序会首先执行一些前期的操作（例如栈的初始化、局部变量等），然后遇到返回地址。因为栈的布局是从高地址到低地址的，所以我们填充  &lt;code&gt;a&lt;/code&gt;  字符来覆盖返回地址的空间，确保在覆盖掉返回地址后，后面的内容是我们想要填充的内容。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt; &lt;code&gt;system_plt&lt;/code&gt; &lt;/strong&gt;：这是我们覆盖的返回地址。当栈上的返回地址被覆盖为  &lt;code&gt;system_plt&lt;/code&gt;  后，程序将跳转到  &lt;code&gt;system()&lt;/code&gt;  函数。这个  &lt;code&gt;system_plt&lt;/code&gt;  的地址是硬编码的，它会让程序跳转到  &lt;code&gt;system()&lt;/code&gt;  的实际地址。注意，这个地址是 PLT 表中的地址，在动态链接的程序中，PLT 是一个跳转表，用于跳转到  &lt;code&gt;system&lt;/code&gt;  函数的实际实现地址。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt; &lt;code&gt;b&#39;b&#39; * 4&lt;/code&gt; &lt;/strong&gt;：这是一个 &lt;strong&gt;虚假的返回地址&lt;/strong&gt;，也就是说这是我们填充在  &lt;code&gt;system_plt&lt;/code&gt;  后的一个占位符。这个部分的大小是  &lt;code&gt;4&lt;/code&gt;  字节（通常是  &lt;code&gt;x86&lt;/code&gt;  架构的指针大小）。为什么要填充这个虚假的返回地址呢？因为  &lt;code&gt;system()&lt;/code&gt;  函数的调用约定是需要一个参数（即  &lt;code&gt;/bin/sh&lt;/code&gt;  的地址）。这个虚假的返回地址用于模拟栈上  &lt;code&gt;system()&lt;/code&gt;  函数执行完之后返回的地址。我们这样做是为了让栈结构保持正确，在调用  &lt;code&gt;system()&lt;/code&gt;  时，栈帧结构要完整，所以我们需要一个假的返回地址来确保  &lt;code&gt;system()&lt;/code&gt;  执行完成后能正确返回。实际上，在这道题中，虚假的地址  &lt;code&gt;b&#39;b&#39; * 4&lt;/code&gt;  会被  &lt;code&gt;system()&lt;/code&gt;  执行后丢弃。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt; &lt;code&gt;binsh_addr&lt;/code&gt; &lt;/strong&gt;：这是我们传递给  &lt;code&gt;system()&lt;/code&gt;  函数的参数  &lt;code&gt;/bin/sh&lt;/code&gt;  字符串的地址。 &lt;code&gt;system()&lt;/code&gt;  函数需要一个字符串作为参数，这个参数是  &lt;code&gt;system()&lt;/code&gt;  在执行时使用的命令，告诉它启动一个 shell。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;sh.sendline(payload)&lt;/code&gt; &lt;/strong&gt;：这一行是将构造好的 payload 发送到程序中，触发栈的溢出和返回地址的修改。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;sh.interactive()&lt;/code&gt; &lt;/strong&gt;：执行完 payload 后，程序将进入交互模式，让我们与程序进行交互，通常在这种 CTF 题目中，这意味着我们已经成功地获得了一个 shell，可以执行命令。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;为什么要填充虚假的地址&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#为什么要填充虚假的地址&#34;&gt;#&lt;/a&gt; 为什么要填充虚假的地址？&lt;/h3&gt;
&lt;p&gt;在调用  &lt;code&gt;system()&lt;/code&gt;  函数时，通常在栈上需要有一个返回地址，指示函数执行完之后应该跳转到哪里。由于  &lt;code&gt;system()&lt;/code&gt;  是一个库函数，它执行完成后并不会返回到一个特定的地址，而是会根据调用栈返回到调用它的地方。但是，由于我们要用  &lt;code&gt;ret2libc&lt;/code&gt;  攻击来绕过正常的程序流程，我们通过修改返回地址，使得程序跳转到  &lt;code&gt;system()&lt;/code&gt;  函数。但是  &lt;code&gt;system()&lt;/code&gt;  函数的调用约定仍然需要栈上有一个正确的返回地址（即调用  &lt;code&gt;system()&lt;/code&gt;  后程序会跳回的地址）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;由于  &lt;code&gt;system()&lt;/code&gt;  在执行后会返回，我们需要一个虚假的返回地址来填补栈上的空隙，确保栈帧结构完整。&lt;/li&gt;
&lt;li&gt;我们用  &lt;code&gt;b&#39;b&#39; * 4&lt;/code&gt;  来填充这个虚假的返回地址。这里的  &lt;code&gt;4&lt;/code&gt;  字节是因为在 x86 架构中，返回地址是一个指针，占用 4 字节。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;总结&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#总结&#34;&gt;#&lt;/a&gt; 总结&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt; &lt;code&gt;system_plt&lt;/code&gt; &lt;/strong&gt; 是我们想跳转到的地址，即  &lt;code&gt;system()&lt;/code&gt;  函数的入口。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;虚假的返回地址 ( &lt;code&gt;b&#39;b&#39; * 4&lt;/code&gt; )&lt;/strong&gt; 用于保证栈帧的完整性，它只是一个占位符。 &lt;code&gt;system()&lt;/code&gt;  执行后会跳过这个虚假的地址，并且返回到  &lt;code&gt;system()&lt;/code&gt;  函数的调用者。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt; &lt;code&gt;binsh_addr&lt;/code&gt; &lt;/strong&gt; 是传递给  &lt;code&gt;system()&lt;/code&gt;  函数的参数，即  &lt;code&gt;/bin/sh&lt;/code&gt;  的地址， &lt;code&gt;system()&lt;/code&gt;  会执行它，启动一个 shell。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个过程通过巧妙地控制栈上的返回地址，利用系统中已经存在的库函数来执行恶意代码，从而达到绕过程序控制并获取 shell 的目的。&lt;/p&gt;
 ]]></description>
        </item>
        <item>
            <guid isPermalink="true">https://0d0-1yp0.github.io/2024/11/12/Forensics/meiyacup2024%E5%86%85%E5%AD%98%E5%A4%8D%E7%9B%98/</guid>
            <title>Meiyacup2024菜鸟个人总结（一）</title>
            <link>https://0d0-1yp0.github.io/2024/11/12/Forensics/meiyacup2024%E5%86%85%E5%AD%98%E5%A4%8D%E7%9B%98/</link>
            <category term="取证" scheme="https://0d0-1yp0.github.io/categories/Forensics/" />
            <category term="取证" scheme="https://0d0-1yp0.github.io/tags/%E5%8F%96%E8%AF%81/" />
            <category term="工具使用" scheme="https://0d0-1yp0.github.io/tags/%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8/" />
            <pubDate>Tue, 12 Nov 2024 00:00:00 +0800</pubDate>
            <description><![CDATA[ &lt;h1 id=&#34;meiyacup2024菜鸟个人总结一&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#meiyacup2024菜鸟个人总结一&#34;&gt;#&lt;/a&gt; Meiyacup2024 菜鸟个人总结（一）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;以下内容仅用作个人复盘以及分享参考的思路。&lt;/p&gt;
&lt;p&gt;我已经菜得离谱了！！！这里没有好东西啦！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;去打 2024 美亚线下了，今年比去年弱了好多好多，比赛结果非常非常差&lt;s&gt;但是也是尽力了&lt;/s&gt;一坨就是一坨&lt;/p&gt;
&lt;p&gt;比赛的时候，网断了才发现犯了非常离谱的错误，赛前明明注意到了内存取证题，但是没系统练过也没调试 volatility&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://xn--python3setup-bc3y.py&#34;&gt;python3 掉 setup.py&lt;/a&gt;, 然后发现网上教程有敲 python3 vol.py 的，然后我发现可以直接敲 vol&lt;/p&gt;
&lt;p&gt;不太懂于是复盘之后 chat 了一下&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241220201123451.png&#34; alt=&#34;image-20241220201123451&#34; /&gt;&lt;/p&gt;
&lt;p&gt;事实上还发现了依赖项问题。因为我的 kali 中又有 python2 又有 python3, 总是产生一些奇奇怪怪的问题&lt;/p&gt;
&lt;p&gt;总之以后还是多用虚拟环境吧，正好 2024 的 kali 更新规则了&lt;/p&gt;
&lt;h2 id=&#34;至于赛题&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#至于赛题&#34;&gt;#&lt;/a&gt; 至于赛题:&lt;/h2&gt;
&lt;p&gt;举个赛题的例子&lt;/p&gt;
&lt;p&gt;列出 firefox 的 pid&lt;/p&gt;
&lt;p&gt;比赛的时候不联网，个人赛时间紧迫又没法看 help。只能拿本地的 llama3.1 跑一下 vol 的命令，最后给的一堆人机指令&lt;/p&gt;
&lt;p&gt;这里就丢了 10 分，后面还有一个解压然后开火眼即取的手机镜像题也没拿到分，太着急了可能是&lt;/p&gt;
&lt;p&gt;这里的 20 分拿回来就是第二了，仅次于通天戴，可惜没有如果 == 难受了一整天&lt;/p&gt;
&lt;p&gt;美亚的内存取证工具什么都出不来，火眼的连镜像都打不开，除非 vol 否则一个都跑不出来&lt;/p&gt;
&lt;p&gt;以后一定好好复习&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241220200723671.png&#34; alt=&#34;image-20241220200723671&#34; /&gt;&lt;/p&gt;
&lt;p&gt;纪念一下自己人机级别蠢到家的指令&lt;/p&gt;
&lt;p&gt;正确做法：&lt;/p&gt;
&lt;p&gt;vol -f xxx.raw [plugin] -- 额外参数&lt;/p&gt;
&lt;p&gt;for example：&lt;/p&gt;
&lt;figure class=&#34;highlight bash&#34;&gt;&lt;figcaption data-lang=&#34;bash&#34;&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td data-num=&#34;1&#34;&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;vol &lt;span class=&#34;token parameter variable&#34;&gt;-f&lt;/span&gt; RAM_Capture_David_Laptop.raw windows.info&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;结果：&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241220201219814.png&#34; alt=&#34;image-20241220201219814&#34; /&gt;&lt;/p&gt;
&lt;p&gt;出来了，windows 信息&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;那么这道题的话&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;vol -f RAM_Capture_David_Laptop.raw windows.pslist &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;或者更好的&lt;/p&gt;
&lt;p&gt;&lt;code&gt;vol -f RAM_Capture_David_Laptop.raw windows.pslist | grep &amp;quot;firefox.exe&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog-store-1325083740.cos.ap-beijing.myqcloud.com/image-20241220201247050.png&#34; alt=&#34;image-20241220201247050&#34; /&gt;&lt;/p&gt;
&lt;p&gt;o1-pre 会给出 vol -f RAM_Capture_David_Laptop.raw pslist 这个指令，但是 vol3.x 就不行了，因为这个比赛直接炸掉了&lt;/p&gt;
&lt;p&gt;为什么有时候大脑不转呢&lt;/p&gt;
 ]]></description>
        </item>
    </channel>
</rss>
