首页 > 解决方案 > MIPS:在基偏移寻址中使用标签

问题描述

我正在尝试使用标签作为基本偏移寻址模式中的偏移量,以便在类似 shellcode 的环境中访问全局变量。代码和数据的基地址存储在 中$s7,我正在尝试这样做:

# global variable @ offset 20 in code, 
foobar: .word <non-constant value>

# ...

lw $s0, foobar($s7)

然后让汇编器把它翻译成lw $t0, 20($s7). 相反,在没有特殊选项的情况下进行编译时,它会通过$gp. 同样,当使用-mno-abicallsor时-mno-shared, thelw被翻译为:

lui     $s0, 0x0
addu    $s0, $s0, $s7
lw      $s0, 20($s0)

有没有办法让它解释foobar为立即值,就像 do 时一样,按预期addiu $t0, $t1, foobar翻译?addiu $t0, $t1, 20

到目前为止,挖掘文档并没有产生任何有用的东西。

提前致谢!

标签: assemblymips

解决方案


我找到了解决方案。现在我将使用lw $s0, %lo(foobar)($s7)哪个有效,只要标签是<= 0xffff- 再加上你不能在一条指令中使用更大的偏移量来做到这一点。


推荐阅读