From C/C++ to NASM src

From C/C++ to NASM src

本文关键字:NASM src to C++ From      更新时间:2023-10-16

我需要开发一些算法,这些算法实际上很容易使用HIG级别的语言(例如C或C ),但是很难直接以NASM制作为单位。

基本上是C和C 编译器必须使用低级别的结构来产生二进制文件,因此是否有一种简单的方法可以从C C 程序中获取NASM代码。

我发现编译更容易(使用-g查看源代码以及汇编)并在二进制中运行objdump

objdump -M intel -d a.out

来自 man gcc

-s

正确的汇编阶段之后停止;不要组装。输出是每个非组件的汇编代码文件的形式 指定的输入文件。

默认情况下,源文件的汇编文件名是由 用.s。

替换后缀.c,.i等

gcc -S hello.c应该使用相应的汇编代码创建文件hello.s

也适用于g++。其他编译器可能具有类似的选项。


例如,对于此程序(hello.c):

#include <stdio.h>
int main() {
    printf("Hello, world! %dn", 6*7);
    return 0;
}

输出(hello.s)包含以下内容:

        .file   "hello.c"
        .section        .rodata
.LC0:
        .string "Hello, world! %dn"
        .text
        .globl  main
        .type   main, @function
main:
.LFB0:
        .cfi_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        movl    $42, %esi
        movl    $.LC0, %edi
        movl    $0, %eax
        call    printf
        movl    $0, %eax
        popq    %rbp
        .cfi_def_cfa 7, 8
        ret
        .cfi_endproc
.LFE0:
        .size   main, .-main
        .ident  "GCC: (Debian 4.7.2-5) 4.7.2"
        .section        .note.GNU-stack,"",@progbits