把循环反推成一个表达式
这段汇编在做「加 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 -
阅读更多 →