You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 19:30:36