为了账号安全,请及时绑定邮箱和手机立即绑定

您如何使用gcc以Intel语法生成汇编代码?

/ 猿问

您如何使用gcc以Intel语法生成汇编代码?

catspeake 2019-10-15 14:47:34

gcc -S选项将以AT&T语法生成汇编代码,是否可以以Intel语法生成文件?还是有办法在两者之间转换?



查看完整描述

3 回答

?
料青山看我应如是

你有尝试过吗?


gcc -S -masm=intel test.c

未经测试,但我在这个论坛上找到了它,有人声称它为他们工作。


我只是在Mac上尝试过,但失败了,因此我在手册页中进行了查找:


   -masm=dialect

       Output asm instructions using selected dialect.  Supported choices

       are intel or att (the default one).  Darwin does not support intel.

它可能在您的平台上运行。


对于Mac OSX:


clang++ -S -mllvm --x86-asm-syntax=intel test.cpp


查看完整回答
反对 回复 2019-10-15
?
守候你守候我


gcc -S -masm=intel test.c

和我一起工作。但是我可以说另一种方式,尽管这与运行gcc无关。编译可执行文件或目标代码文件,然后使用objdump以Intel asm语法反汇编目标代码,如下所示:


 objdump -d --disassembler-options=intel a.out

这可能会有所帮助。


查看完整回答
反对 回复 2019-10-15
?
潇潇雨雨

我在CPP文件中有以下代码:


#include <conio.h>

#include <stdio.h>

#include <windows.h>


int a = 0;

int main(int argc, char *argv[]) {

    asm("mov eax, 0xFF");

    asm("mov _a, eax");

    printf("Result of a = %d\n", a);

    getch();

    return 0;

 };

该代码与此GCC命令行一起工作:


gcc.exe File.cpp -masm=intel -mconsole -o File.exe

它将生成* .exe文件,并且按照我的经验可以正常工作。


Notes:

immediate operand must be use _variable in global variabel, not local variable.

example: mov _nLength, eax NOT mov $nLength, eax or mov nLength, eax


A number in hexadecimal format must use at&t syntax, cannot use intel syntax.

example: mov eax, 0xFF -> TRUE, mov eax, 0FFh -> FALSE.

就这样。


查看完整回答
反对 回复 2019-10-15

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信