繁体   English   中英

将asm指令编码为操作码

[英]Encode asm instructions to opcodes

我需要编写一些像

mov eax, edx
inc edx

到相应的x86_64操作码。 是否有任何库(不是一个完整的asm编译器)可以轻松实现这一目标?

您可以使用开源FASMNASM并使用其解析器。

如果你已经将它编译成二进制文件(从你的asm或c嵌入asm):

objdump -S your_binary,它将列出每条指令及其二进制代码。

假设您刚刚翻译了简单的指令,那么编写一个简单的汇编程序就不会那么有用了。 我之前已经完成了 - 你可能拥有反汇编程序组件的大部分逻辑和表(例如指令名称和寄存器号的操作码表 - 只需反过来使用它)。 我并不一定意味着你可以直接反向使用表格,但以适当的方式重新安排的表格内容应该做大部分的努力而不是太糟糕。

困难的是符号和搬迁等等。 但是因为你可能并不真的需要“找到这个代码序列”,我猜你可以不用那些部分。 您也不需要为某些规范生成目标文件 - 您只需要一组字节。

现在,如果你想找到它会变得有点棘手:

here:
     inc eax
     jnz here
     jmp someplace_else
....
...
someplace_else:
     ....

因为你必须将跳转编码到它们的相对位置 - 至少,它需要一个两遍方法,首先计算指令的长度,然后是跳跃目标的实际填充。 如果“someplace_else”远离跳跃本身,那么它也可能是绝对跳跃,在这种情况下,您的“搜索”将必须考虑它与搜索位置的关系 - 因为该序列对于每个地址都是不同的。

我已经编写了汇编程序和反汇编程序,如果您不必处理可重定位的地址和文件格式,并且您不知道这些奇怪的定义[直到您研究了格式的200页定义,那么这并不难]。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM