Правильное хранение 8-байтового значения в сборке - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть конкретные инструкции для сохранения 8-байтового шестнадцатеричного значения для "/ bin / sh" в регистре% rax.

Итак, 8 байтов означали бы 64 бита ... поэтому мой первый подход - использовать команду movq ... но я не могу определить, как правильно отформатировать команду.

/ bin / sh в шестнадцатеричном виде: 2f 62 69 6e 2f 73 68 который занимает всего 7 байт .. есть ли какой-нибудь нулевой терминатор или заполнение, в котором я могу правильно написать команду?

  # Write the 8-byte hex value for "/bin/sh" to %rax register
  movq $0x68732f6e69622f, %rax

В конце концов команда будет использоваться системным вызовом

Спасибо!

1 Ответ

0 голосов
/ 16 апреля 2019

Регистр имеет определенный размер, поэтому он принимает 64 бита независимо от того, что вы делаете.Это будет эффективно заполнять нулями в старших разрядах.При перемещении $0x1 в нем будет один бит с наименьшим значением с остальными нулями.

Эти значения не «обнуляют» эти значения, что может привести к умножению на некоторый произвольный коэффициент.$0x1000 - это не то же самое, что $0x0001, очевидно.

...