首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将英特尔代码与反汇编输出匹配

将英特尔代码与反汇编输出匹配
EN

Stack Overflow用户
提问于 2020-09-13 20:04:58
回答 1查看 151关注 0票数 1

我开始使用Intel参考页面来查找和学习op代码(而不是询问所有关于op代码的内容)。我想确保我的理解是好的,并问几个问题之间的输出之间的基本asm程序和英特尔指令代码。

下面是我必须将各种mov指令与rax-ish寄存器进行比较的程序(是否有更好的方法来表示"rax“及其32- 16位和8位组件):

代码语言:javascript
复制
.globl _start
_start:
    movq $1,    %rax    # move immediate into 8-byte rax (rax)
    movl $1,    %eax    # move immediate into 4-byte rax (eax)
    movw $1,    %ax     # move immediate into 2-byte rax (ax)
    movb $1,    %al     # move immediate into 1-byte rax (al)
    mov $60,    %eax
    syscall

它分解如下:

代码语言:javascript
复制
$ objdump -D file

file:     file format elf64-x86-64


Disassembly of section .text:

0000000000400078 <_start>:

  400078:   48 c7 c0 01 00 00 00    mov    $0x1,%rax
  40007f:   b8 01 00 00 00          mov    $0x1,%eax
  400084:   66 b8 01 00             mov    $0x1,%ax
  400088:   b0 01                   mov    $0x1,%al

  40008a:   b8 3c 00 00 00          mov    $0x3c,%eax
  40008f:   0f 05                   syscall

现在,匹配来自MOV的英特尔代码,在这里复制:

我能够协调以下四项指示中的一项:

  1. mov $0x1,%al -> b0 01 ,英特尔的状态代码是b0 +1字节作为1字节的值立即移动.
  2. mov $0x1,%eax -> b8 01 00 00 00 ,英特尔的状态代码是b8 +4字节,值为1字节立即移动.
  3. mov $0x1,%ax -> 66 b8 01 00 ,英特尔状态代码是b8而不是66 b8
  4. mov $0x1,%rax48 -> c7 c0 01 00 00 00 N/A,只有32位指令。没有被列出来。

因此,我的问题是:

  • 为什么mov $0x1,%ax不匹配?
  • 是否有相同的表用于64-bit代码,或者建议如何查找?
  • 最后,当寄存器更改时,代码如何调整?例如,如果我想将一个值移到%ebx%r11中。如何计算“代码调整”,就像它在这个查找表中所显示的那样(我认为呢?)“寄存器示例代码”的eax寄存器。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-13 20:22:55

您缺少了前缀“操作码”的概念,该前缀更改了以下指令的含义。IA32手册的第2卷2.1.1和2.2.1节介绍了这一点。从2.1.1我们得到:

操作数大小覆盖前缀使用66H编码(66H也用作某些指令的强制前缀)。

因此,66前缀将操作数大小从默认的32位更改为16位。因此,mov $1,%ax (16位)与只有66前缀的mov $1,%eax (32位)相同。

最后一种情况(mov $1, %rax)实际上使用的是不同的指令

代码语言:javascript
复制
REX.W + C7 /0 io    MOV r/m64, imm32      Move imm32 sign extended to 64-bits tor/m64.

在这里,我们将一个常量移到任何寄存器中,而不是A --指令大一个字节,但允许将32位嵌入64位寄存器,所以只需要一个4字节的常量,而不是8字节的寄存器(因此最终比等效的48 b8 01 00 00 00 0 0 0,0 0 0,0 0 0只需3个字节)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63875061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档