我正在生成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中编码数据?如果是这样,我可以使用汇编吗? (我不想自己生成二进制文件。)
感谢。
答案 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