gcc 给出了奇怪的 Intel 语法

问题描述 投票:0回答:2

我一直试图通过使用编译器生成不同优化级别的各种 C 程序的汇编程序来更好地了解幕后发生的情况。有件事困扰了我一段时间。

当我编译

t.c
时,

gcc -S t.c

我得到的 AT&T 语法汇编如下。

function:
    pushl   %ebp
    movl    %esp, %ebp
    movl    12(%ebp), %eax
    addl    8(%ebp), %eax
    popl    %ebp
    ret
    .size   function, .-function

当我使用 masm 参数进行编译时,如下所示:-

gcc -S t.c -masm=intel

我得到以下输出。

function:
    push    %ebp
    mov %ebp, %esp
    mov %eax, DWORD PTR [%ebp+12]
    add %eax, DWORD PTR [%ebp+8]
    pop %ebp
    ret
    .size   function, .-function

语法发生了变化,但寄存器符号之前仍然有“%”(这就是为什么我一开始就不喜欢 AT&T 语法)。

有人可以解释一下为什么会发生这种情况吗?我该如何解决这个问题?

gcc assembly disassembly
2个回答
2
投票

GNU 汇编器(gas)确实有一个单独的选项来控制 % 前缀。文档似乎表明 GCC 没有这样的选项,但我的 GCC(版本 Debian 4.3.2-1.1)不会生成 % 前缀。


0
投票

我认为你在反汇编时除了获得英特尔语法之外,我不确定,但请尝试以下步骤,

  1. 海湾合作委员会
  2. gdb ./a.out
  3. 设置反汇编情报
  4. 拆解主机

Refer this image, which i shared

© www.soinside.com 2019 - 2024. All rights reserved.