c - 如何从命令提示符编译和运行汇编程序源代码?

标签 c windows gcc assembly command-line

我在 C 中有这个相对简单的程序 打印两个 int 的总和:

#include <stdio.h>

int main()
{
    int a = 5;
    int b = 8;
    printf("a + b = %d", a+b);
    getchar();
}

我使用以下命令生成汇编代码:gcc -S prog.c 以获取汇编代码。

    .file   "prog.c"
    .def    ___main;    .scl    2;  .type   32; .endef
    .section .rdata,"dr"
LC0:
    .ascii "a + b = %d\0"
    .text
    .globl  _main
    .def    _main;  .scl    2;  .type   32; .endef
_main:
LFB10:
    .cfi_startproc
    pushl   %ebp
    .cfi_def_cfa_offset 8
    .cfi_offset 5, -8
    movl    %esp, %ebp
    .cfi_def_cfa_register 5
    andl    $-16, %esp
    subl    $32, %esp
    call    ___main
    movl    $5, 28(%esp)
    movl    $8, 24(%esp)
    movl    28(%esp), %edx
    movl    24(%esp), %eax
    addl    %edx, %eax
    movl    %eax, 4(%esp)
    movl    $LC0, (%esp)
    call    _printf
    call    _getchar
    movl    $0, %eax
    leave
    .cfi_restore 5
    .cfi_def_cfa 4, 4
    ret
    .cfi_endproc
LFE10:
    .ident  "GCC: (GNU) 5.3.0"
    .def    _printf;    .scl    2;  .type   32; .endef
    .def    _getchar;   .scl    2;  .type   32; .endef

如何从命令行运行此 prog.s?所有搜索均导致使用 asmfasm 命令在 Linux 上运行此程序,我的 cmd 无法识别这些命令。

我的操作系统:Windows 10

最佳答案

它只是您用另一种编程语言编写的 .c 文件,您仍然需要对其进行汇编和链接。 gnu 工具实际上允许您使用 c 编译器执行此操作,您应该能够将其输入 gcc 并且它会理解它是汇编语言而不是 C,并且一旦组装就会为您调用链接器,就像您输入它时一样.c 文件。理想情况下将它链接到您的目标主机,以便它运行。例如,您可以在汇编语言中修改 ascii 字符串,向 a + b 添加更多字符,重新运行 gcc 以查看正在使用的确实是这个 asm。

关于c - 如何从命令提示符编译和运行汇编程序源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42425268/

相关文章:

c - 如何在 C 中创建和使用我自己的静态库?

c - 处置(释放)整个二叉搜索树

c - 为什么 Apple 根据平台将 UInt32 定义为 long 或 int?

windows - 我在哪里可以获得 Windows 检查版本?

c - gcc 常量的隐式符号

c++ - 有没有办法告诉 gcc 在报告错误时不要替换 typedef 名称和默认参数?

c - 是否正在积极开发下一个 C 标准?

在 Windows 上使用 shp2pgsql.exe 将 shapefile 提取到 PostgreSQL/PostGIS 数据库中的 Python 脚本

c++ - 客户端中的安全配置文件

linux - 如何在 gcc 版本之间切换以在 manjaro linux 上使用 cudnn 5 加速(cuda 7.5)构建 torch7 或 caffe?