我需要编写一些指令,如
mov eax, edx
inc edx
到相应的x86_64操作码。是否有任何库(不是整个asm编译器)可以轻松实现这一目标?
答案 0 :(得分:2)
答案 1 :(得分:1)
如果您已将其编译为二进制文件(来自您的asm或带有嵌入式asm的c):
objdump -S your_binary,它将列出每条指令及其二进制代码。
答案 2 :(得分:0)
假设您刚刚翻译了简单的指令,那么编写一个简单的汇编程序就不会有多大功能。我之前已经完成了 - 您可能拥有反汇编程序组件的大部分逻辑和表(例如指令名称和寄存器编号的操作码表 - 只需反过来使用它)。我并不一定意味着您可以直接反向使用表格,但以合适的方式重新安排的表格内容应该能够完成大部分艰苦的工作。
困难的是符号和搬迁等等。但是,因为你可能并不真的需要这样做,所以找到这段代码",我猜你可以不用那些部分。您也不需要为某些规范生成目标文件 - 您只需要一组字节。
现在,如果你想找到它会变得有点棘手:
here:
inc eax
jnz here
jmp someplace_else
....
...
someplace_else:
....
因为您必须将跳转编码到它们的相对位置 - 至少,它需要两遍方法,首先计算指令的长度,然后实际填充跳跃目标。如果" someplace_else"远离跳跃本身,它也可能是绝对跳跃,在这种情况下你的搜索"必须要考虑它与搜索位置的关系 - 因为每个地址的序列都不同。
我已经写过汇编程序和反汇编程序,如果您不必处理可重定位的地址和文件格式,并且不知道您不知道的奇怪定义,那么它就不是很难了[直到您研究了格式的200页定义]。