我试图通过gcc将我的c代码转换为汇编(通过输入gcc -S -masm = intel或pg.c或gcc -S prog.c),但它给了我masm代码,但我需要nasm one.我想知道你是否可以帮助我将我的c转换为nasm汇编
tin*_*ino 10
这里解释一下:如何从Linux上的c源代码生成一个nasm可编译的汇编代码?但我会给你一个完整的解释(我需要声誉,因为我想投票.无论如何......).一步步 :
第1步:编写hello.c:
#include <stdio.h>
int main()
{
printf( "Hello World \n" );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第2步:创建目标文件:
gcc -fno-asynchronous-unwind-tables -s -c -o hello.o hello.c
Run Code Online (Sandbox Code Playgroud)
第3步:反汇编目标文件
objconv -fnasm hello.o #this creates hello.asm
Run Code Online (Sandbox Code Playgroud)
看到最后安装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 .
Run Code Online (Sandbox Code Playgroud)
你需要删除"功能"(第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
Run Code Online (Sandbox Code Playgroud)
Anexe 1安装objconv:
Anexe 2
你想在Nasm制作好的程序,也许看到这个包里有很多例子:http://sourceforge.net/projects/nasmx
小智 1
问题有点不清楚,但或多或少您可以通过在调试器中打开 c 可执行文件并复制相关代码来做到这一点。如果您正在寻找“Shellcode”,这将为您提供。
但是,如果您计划将完整的 C 代码转换为 NASM,您应该采用该 MASM 代码并将其重新连接为 NASM。
| 归档时间: |
|
| 查看次数: |
8584 次 |
| 最近记录: |