кодировать данные в многобайтовом noop? - PullRequest
0 голосов
/ 13 января 2010

Я генерирую файлы сборки AT & T-синтаксиса. Я хочу закодировать некоторые данные в сгенерированном потоке команд. (Я хочу встроить маску указателя регистра, которую я могу найти, используя фиксированное смещение на ПК.)

Я могу просто использовать директиву .byte или .ascii и jmp для встроенных данных:

movq _label6@GOTPCREL(%rip), %rax
jmp _skip0
.ascii "garbage instructions; scares GDB\0"
_skip0:
movq %rax, -8(%r15)

Однако это кажется немного абсурдным. Есть ли более чистый способ сделать это? В руководствах Intel говорится, что есть многобайтовые инструкции NOP. Есть ли способ кодировать данные в NOP? Если это так, могу ли я сделать это с помощью сборки? (Я не хочу создавать двоичные файлы самостоятельно.)

Спасибо.

Ответы [ 2 ]

1 голос
/ 07 апреля 2012

Например, для кодирования 'abcdef12' в NOP

$echo 'asm("nopq 0x12abcdef(%rax,%rax,1)");' > t.c; gcc -c t.c;objdump -d t.o
t.o:     file format elf64-x86-64

Disassembly of section .text:

0000000000000000 <.text>:
   0:   48 0f 1f 84 00 ef cd    nopq   0x12abcdef(%rax,%rax,1)
   7:   ab 12
1 голос
/ 13 января 2010

Я предполагаю, что это правдоподобно - http://www.asmpedia.org/index.php?title=NOP

Возможно, вы сможете использовать разные значения регистров для кодирования разных вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...