Assembly 获取操作码的简单方法

Assembly 获取操作码的简单方法,assembly,x86,Assembly,X86,我知道如何从可执行文件中获取操作码和相应的汇编语法;但是,有没有一种简单的方法可以单独获取特定汇编指令的操作码,而不必使用相同的操作码编写程序,然后手动链接和加载操作码,并在可执行文件上执行objdump 有没有一种简单的方法可以找到特定指令的相应操作码?包含一系列32位和64位x86处理器上的指令及其相应操作码的参考表。对于x86,您可以在英特尔手册(,)中查找它们。不,我不知道为什么手册分成两部分。您可以使用gdb(GNU调试器)的x/bx命令 我在这里做了一个教程: http://aimb

我知道如何从可执行文件中获取操作码和相应的汇编语法;但是,有没有一种简单的方法可以单独获取特定汇编指令的操作码,而不必使用相同的操作码编写程序,然后手动链接和加载操作码,并在可执行文件上执行objdump


有没有一种简单的方法可以找到特定指令的相应操作码?

包含一系列32位和64位x86处理器上的指令及其相应操作码的参考表。

对于x86,您可以在英特尔手册(,)中查找它们。不,我不知道为什么手册分成两部分。

您可以使用gdb(GNU调试器)的x/bx命令

我在这里做了一个教程:

http://aimbots.net/tutorials/9276-how-get-op-codes.html

不久前我问了一个类似的问题()

有人好心地为我提供了一个自动脚本来完成这项工作。你可以按照链接的问题,或参考他们提供给我的脚本下面

opcode() {
  echo $* > tmp.S && nasm tmp.S -o tmp.o && od -x tmp.o
  rm -f tmp.o tmp.S
}

希望这有帮助。

我不知道你为什么需要操作码。但是如果是为了开发漏洞,您可能已经有了metasploit,它附带了一个非常有用的ruby脚本,名为nasm_shell.rb(位于tools目录中)

您键入的每一行都是正确操作码的ascii十六进制表示形式

如果是出于其他目的,或者您不想让metasploit这样的重量级工具包因为任何原因而挂起,那么您可以取出脚本并安装其依赖项。它使用Rex并假设安装了nasm


如果您想修改它,实际需要的代码只是函数外壳中的几行。运行

很遗憾,这并不能给出正确的结果。或者更确切地说,正确的结果被隐藏在hextump中。例如,“jmp eax”的正确操作码是“FF E0”,而上面的函数给出的是“FF 66 00 E0”。@sillyMunky:hexdump中的0x66表示操作数大小被覆盖。如果您希望对32位执行此操作,则需要在命令中添加适当的标志/开关。