Я пытаюсь использовать метку в качестве смещения в режиме адресации базового смещения,
для доступа к глобальной переменной в среде, подобной шеллкоду. Базовый адрес кода и данных хранится в $s7
, и я пытаюсь сделать это:
# global variable @ offset 20 in code,
foobar: .word <non-constant value>
# ...
lw $s0, foobar($s7)
И затем заставить ассемблер перевести это на lw $t0, 20($s7)
. Вместо этого при компиляции без специальных опций требуется обход по $gp
. Аналогично, при использовании -mno-abicalls
или -mno-shared
, lw
переводится в:
lui $s0, 0x0
addu $s0, $s0, $s7
lw $s0, 20($s0)
Есть ли способ заставить его интерпретировать foobar
как непосредственное значение, точно так же, как и при выполнении addiu $t0, $t1, foobar
, который переводится в addiu $t0, $t1, 20
, как и ожидалось?
Копание в документах пока не принесло ничего полезного.
Заранее спасибо!