查找汇编语句对应机器码的方法通常是使用反汇编工具,例如IDA Pro,OllyDBG等。
部分汇编语句(如NOP)和机器码是一一对应的关系,这种语句的编码可以通过查表获得。但像mov byte ptr[esi],90h这类使用操作数或者操作内存的指令一般没有固定编码,所以推荐使用上述反汇编工具。
方法示例(使用OllyDBG):
1:首先打开OllyDBG,依次单击 文件->打开 ,弹出以下窗口。选择一个应用程序,单击【打开】。
2:打开后主窗口显示如下,下图中中间的绿色部分即为右侧汇编指令的机器码。
注意事项:以上示例为win32平台的应用程序,不同平台的程序也会有不同的指令和反汇编工具,所以以上示例并不通用。建议搜索关键字:平台+反汇编工具(例如 linux 反汇编工具)。
你找任何介绍汇编语言的书上都有指令集,上面都会列出每条指令的机器码。
其实,编译程序中包含一个指令助记符-机器指令的对照表,就像你查字典能查到读音和字义一样,通过对照表可以很方便地找到对应的机器码。
一般直接插手测
此外还有一些工具可以帮助转换
特别需要注意的是,有些指令是和当前的ip有关系的,比如 jump
需要手工计算跳转位置才能得到正确的值
这个得找本书才行。而且汇编指令可能对应多个机器码。
如果用dos模拟器,可以用debug自己汇编和反汇编看看。一个是A指令,一个是U指令。