gpt4 book ai didi

assembly - 将 C 转换为 nasm 程序集

转载 作者:行者123 更新时间:2023-12-04 22:13:18 25 4
gpt4 key购买 nike

我尝试通过 gcc 将我的 c 代码转换为汇编(通过键入 gcc -S -masm=intel 或 pg.c 或 gcc -S prog.c),但它给了我 masm 代码,但我需要 nasm one 。我想知道你是否可以帮助我将我的 c 转换为 nasm 程序集

最佳答案

解释在这里:How to generate a nasm compilable assembly code from c source code on Linux?但我会给你一个完整的解释。一步步 :

步骤 1 : 写 hello.c:

#include <stdio.h>
int main()
{
printf( "Hello World \n" );
return 0;
}

步骤 2 :创建目标文件:
gcc -fno-asynchronous-unwind-tables -s -c -o hello.o hello.c

步骤 3 : 反汇编目标文件
objconv -fnasm hello.o   #this creates hello.asm

看到最后安装objconv,你真的需要它,因为objdumb(安装在linux上)只输出一个人类可读的长长输出。现在让我们看看 hello.asm :
; Disassembly of file: hello.o
; Mon Dec 1 13:08:02 2014
; Mode: 32 bits
; Syntax: YASM/NASM
; Instruction set: 80386


global main: function

extern puts ; near


SECTION .text align=4 execute ; section number 1, code

main: ; Function begin
push ebp ; 0000 _ 55
mov ebp, esp ; 0001 _ 89. E5
and esp, 0FFFFFFF0H ; 0003 _ 83. E4, F0
sub esp, 16 ; 0006 _ 83. EC, 10
mov dword [esp], ?_001 ; 0009 _ C7. 04 24, 00000000(d)
call puts ; 0010 _ E8, FFFFFFFC(rel)
mov eax, 0 ; 0015 _ B8, 00000000
leave ; 001A _ C9
ret ; 001B _ C3
; main End of function


SECTION .data align=4 noexecute ; section number 2, data


SECTION .bss align=4 noexecute ; section number 3, bss


SECTION .rodata align=1 noexecute ; section number 4, const

?_001: ; byte
db 48H, 65H, 6CH, 6CH, 6FH, 20H, 57H, 6FH ; 0000 _ Hello Wo
db 72H, 6CH, 64H, 20H, 00H ; 0008 _ rld .

您需要删除“函数”(第 8 行)和所有“align=? noexecute”在哪里?代表一个数字。

第 4 步 集合 :
nasm -f elf hello.asm #This creates a new hello.o, actually the same :) 
gcc hello.o -o hello # this creates a binary hello, use gcc and no ld because of the call of external functions
./hello # output : hello world

附件 1 安装 objconv :
  • 进入本站 http://www.agner.org/optimize/#objconv
  • 点击下载并解压objconv.zip
  • 解压 source.zip 并运行 build.sh for linux(运行 objconv.exe for window ),这将创建一个可执行文件 objconv
  • 将 objconv 移动到你的二进制文件(现在就做!!)或者只运行 ./objconv(如果不允许,你可能必须在之前运行 chmod 777 objconv)


  • 附件 2

    你想在 Nasm 中编写好的程序,也许可以看到这个充满示例的包: http://sourceforge.net/projects/nasmx

    关于assembly - 将 C 转换为 nasm 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17676026/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com