用多字节noop编码数据?

时间:2010-01-12 21:51:03

标签: assembly

我正在生成AT& T语法汇编文件。我想在生成的指令流中编码一些数据。 (我想嵌入一个寄存器指针掩码,我可以使用固定的偏移量来查找PC。)

我可以简单地使用.byte或.ascii指令和jmp而不是嵌入数据:

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

然而,这似乎有点荒谬。有更清洁的方法吗?英特尔手册称有多字节NOP指令。有没有办法在NOP中编码数据?如果是这样,我可以使用汇编吗? (我不想自己生成二进制文件。)

感谢。

2 个答案:

答案 0 :(得分:1)

我的猜测是合理的 - http://www.asmpedia.org/index.php?title=NOP

您可以使用不同的寄存器值来编码不同的东西。

答案 1 :(得分:1)

例如,在NOP中编码'abcdef12'

$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