Microcorruption CTF Cusco关卡add #0x10,sp加16而add #0x8,sp仅加8原因求解
问题1:Microcorruption CTF Cusco关卡sp增量差异成因
Microcorruption CTF基于16位MSP430微控制器架构,栈从高地址向低地址增长,所有栈操作默认以2字节为单位。你观察到的是函数从调用到执行完成返回后的总sp增量,而非单条ret指令的执行效果,单条ret指令在MSP430上仅会让sp自增2(弹出返回地址到pc寄存器),二者差异成因如下:
- 地址
0x4476所属函数无需要被调用方清理的栈传参:该函数栈帧总开销为8字节,包含保存的帧指针、返回地址和局部变量空间,函数执行完成后仅清理自身栈帧即可返回,因此总sp增量为8。 - 地址
0x453a所属函数采用被调用方清理栈参数的约定:该函数除了自身8字节的栈帧开销外,调用方在发起调用前还向栈中压入了合计8字节的传入参数,按照约定函数返回前会额外跳过这部分参数空间,因此总sp增量为8+8=16。你可以在0x453a附近的反汇编代码中看到add #8, sp这类额外栈调整指令验证这一点。
问题2:低难度逆向工程练习资源推荐
- Microcorruption CTF本身前10个关卡均为入门级,覆盖基础汇编阅读、栈结构分析、简单漏洞利用等基础逆向技能,可直接在浏览器端完成调试,无需额外搭建环境。
- 入门级CrackMe练习可选择公开的新手CrackMe合集,前30题仅涉及基础序列号验证、简单反调试绕过,适合零基础入门。
- 基础二进制漏洞练习可选择知名入门靶场的新手区,覆盖栈溢出、格式化字符串等常规入门考点,普遍有配套基础题解可供参考。
内容的提问来源于stack exchange,提问作者omriMB
相关产品推荐
相关产品推荐

