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

炸弹实验Phase1:如何获取指定地址的目标字符串?

破解炸弹实验Phase1:正确获取目标比对字符串的方法

核心问题:误用错误地址,需先计算RIP相对寻址的实际目标地址

x86-64架构中0x1bbc(%rip)是RIP相对寻址,不能直接用0x1bbc作为地址,必须结合当前指令的RIP值计算实际目标地址,步骤如下:

  1. 定位Phase1中字符串比对相关指令
    在GDB中执行disas phase_1,查看Phase1的汇编代码,找到包含0x1bbc(%rip)的指令(通常是lea指令,用于加载目标字符串地址到寄存器,供strcmp类函数调用)。

  2. 计算目标地址
    RIP相对寻址的公式为:目标地址 = 当前指令的下一条指令地址 + 偏移量(0x1bbc)

  • 假设包含0x1bbc(%rip)的指令地址是0x400eec(以实际汇编输出为准),先确定这条指令的长度:执行x/i 0x400eec查看指令,比如这条lea指令长度为7字节,那么下一条指令地址是0x400eec + 7 = 0x400ef3。
  • 加上偏移量0x1bbc:0x400ef3 + 0x1bbc = 0x402aa8(这就是目标字符串的实际地址,不同炸弹的地址会有差异)。
  1. 查看正确字符串
    执行GDB命令x/s 0x402aa8(替换为你计算出的实际地址),即可得到Phase1需要的正确比对字符串。

为什么0x15bd会输出乱码?

你查看的0x15bd并非RIP相对寻址计算后的目标地址,该地址存储的内容不是以\0结尾的合法ASCII字符串,x/s命令会从该地址开始输出字节直到遇到第一个\0,因此会出现不可打印的乱码。

内容的提问来源于stack exchange,提问作者zeliha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:45:10