把循环反推成一个表达式

把循环反推成一个表达式

这段汇编在做「加 k 次 m」。写一个函数直接算出结果,并和逐条跑出来的结果对一遍账。

阅读更多 →
自己写:认出这段是不是循环

自己写:认出这段是不是循环

给一段汇编,判断它有没有「往回跳」。两段各判一次:一段有循环,一段没有。

阅读更多 →
同一段汇编,换个乘数

同一段汇编,换个乘数

运行下面这段程序,填写它打印出来的结果。 def run(src, regs=None, guard=200): R = {"eax": 0, "ebx"

阅读更多 →
这段汇编在算什么

这段汇编在算什么

运行下面这段程序,填写它打印出来的结果。 def run(src, regs=None, guard=200): R = {"eax": 0, "ebx"

阅读更多 →
往回跳意味着什么

往回跳意味着什么

一段汇编里出现了「往回跳」的指令,这多半是【0】。

阅读更多 →
反推逻辑先看什么

反推逻辑先看什么

拿到一段陌生汇编,最该先看的是【0】。

阅读更多 →
⚠️ 两边约定不一致

⚠️ 两边约定不一致

调用方按「前两个走寄存器」放参数,被调方却按「全部走栈」去取。⚠️ 程序不会报错,把被调方取到的两个值打出来。

阅读更多 →
参数超过寄存器数量怎么办

参数超过寄存器数量怎么办

约定说前两个参数走寄存器,多出来的走栈。传五个参数,把「走寄存器的几个 / 走栈的几个」和栈上的内容打出来。

阅读更多 →
自己写:按约定接参数

自己写:按约定接参数

模拟调用约定:前两个参数放 edi 和 esi,返回值放 eax。

阅读更多 →
返回值放在哪

返回值放在哪

运行下面这段程序,填写它打印出来的结果。 ASM = """ push rbp mov rbp, rsp mov dword ptr [rbp -

阅读更多 →