Microcorruption CTF中32位汇编单操作数tst指令含义咨询
解答
这确实是架构差异导致的——你接触的是MSP430指令集,它的单操作数TST指令行为和x86等架构的双操作数TST不同:
1. MSP430 TST指令的核心行为
MSP430的TST <操作数>指令,等价于对操作数执行 AND <操作数>, <操作数>,但运算结果不会写回原操作数,仅用来更新状态寄存器的标志位:
- 当操作数为0时,AND结果为0,Z(零标志位)被置1
- 当操作数非0时,AND结果非0,Z标志位被置0
- 额外会根据操作数的最高位设置N(负标志),进位标志C固定为0
放到你的代码里,tst r14就是在检查刚从内存中读取的字节是否为字符串结束符(0x00):
- 若读到的是0字节,Z标志置1,后续的
jnz(仅当Z=0时跳转)不会触发,循环退出 - 若读到的是非0字节,Z标志置0,
jnz跳回循环开头,继续读取下一个字节
2. 结合代码逻辑的补充说明
这段check_password函数的作用是验证输入密码的长度:
- 循环从r15指向的内存(输入缓冲区)逐个读字节,用r12计数
- 读到结束符后,检查计数器r12是否等于0x9——意味着输入的密码(不含结束符)长度是8位(因为结束符会让计数器多自增1次)
- 长度符合则设置r15为1(验证通过)返回,否则置0(验证失败)返回
内容的提问来源于stack exchange,提问作者Aiden Hanney
相关产品推荐
相关产品推荐

