GCC 汇编器以英特尔语法输出

GCC 汇编器以英特尔语法输出

我想在 gcc 中将我的汇编调试器从 at&t 设置为 intel。我目前使用的是 ubuntu 18.0。我该怎么做?

答案1

GCC 汇编器以英特尔语法输出

假设你使用 gcc,你有一个名为-masm=方言

来自 gcc 手册:

-masm=dialect
       Output assembly instructions using selected dialect.  Also
       affects which dialect is used for basic "asm" and extended "asm".
       Supported choices (in dialect order) are att or intel. The
       default is att. Darwin does not support intel.

要获得英特尔语法,你必须使用

gcc -S -masm=intel adder.c

这里我有一个小例子:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int a = atoi(argv[1]), b = atoi(argv[2]);
    int sum=0;

    sum = a+b;
    printf("%d + %d = %d\n", a, b, sum);

    return 0;
 }

将其保存为 adder.c 并编译

gcc adder.c -o adder 

并使用测试程序

./adder 1 4

输出应该是

1 + 4 = 5

现在使用以下命令创建一个英特尔 asm 文件

gcc -S  -masm=intel adder.c

这是 adder.s 的第一行

.file   "adder.c"
    .intel_syntax noprefix
    .text
    .section    .rodata
.LC0:
     .string    "%d + %d = %d\n"
     .text
     .globl main
     .type  main, @function
main:
.LFB5:
    .cfi_startproc
    push    rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    mov rbp, rsp
    .cfi_def_cfa_register 6
    sub rsp, 32
    mov DWORD PTR -20[rbp], edi
    mov QWORD PTR -32[rbp], rsi
    mov rax, QWORD PTR -32[rbp]
    add rax, 8
    mov rax, QWORD PTR [rax]

在 GDB 中使用 intel 语法

现在使用调试选项编译最后一个例子:

gcc -g adder.c -o adder

打开 gnu 调试器

gdb -q --args ./adder 3 5 

并设置味道

set disassembly-flavor intel

在主界面设置断点

b main

并运行程序

r

如果你现在输入

disassemble

你将获得英特尔风格的代码:

(gdb) disassemble 
Dump of assembler code for function main:
   0x000055555555468a <+0>:     push   rbp
   0x000055555555468b <+1>:     mov    rbp,rsp
   0x000055555555468e <+4>:     sub    rsp,0x20
   0x0000555555554692 <+8>:     mov    DWORD PTR [rbp-0x14],edi
   0x0000555555554695 <+11>:    mov    QWORD PTR [rbp-0x20],rsi
=> 0x0000555555554699 <+15>:    mov    rax,QWORD PTR [rbp-0x20]
   0x000055555555469d <+19>:    add    rax,0x8
   0x00005555555546a1 <+23>:    mov    rax,QWORD PTR [rax]

要恢复您的口味,您必须将其改回 at&t 风格:

set disassembly-flavor att
  • 要在 gdb 中永久获取英特尔语法,请在 shell 中输入以下内容:

    echo "set disassembly-flavor intel" >> ~/.gdbinit
    

这会将属性设置为您的.gdbinit文件。要更改,只需编辑此文件即可。

相关内容