我想在 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
文件。要更改,只需编辑此文件即可。