使用C编译器制作简单二进制文件

使用C编译器制作简单二进制文件

使用C编译器制作简单二进制文件(i386+)

Cornelis Frank 著

newrain 译

2000.4.10

我写这篇文章是因为网上相关这方面的讨论不多,而我因为EduOS工程需要这么一篇文章。

由于使用下面的信息或程序引起的偶然的或一系列的致命错误,我将对此不负任何责任。

因此如果由于我的“英语”很差而使你的计算机因此遭受损坏,那是不是我的问题而是你的问题。



1 需要些什么工具?

?一个i386或跟高的PC机器

?像Red Hat或Slackware的一个Linux发行版操作系统

?GNU GCC 编译器。这个C编译器常被用于Linux系统中。使用下面的命令方式检测你的GCC版本:

gcc –version

将出现与下面类似的显示:

2.7.2.3

你的计算机上显示的数值可能与上面的不匹配,但这个不是问题。

?Linux中的binutils工具

?NASM0.97或更高的版本。NASM最新广泛使用的版本是一个80x86汇编器,被设计成便携式和模块式。NASM支持大范围的对象文件格式,包括Linux的‘a.out’和ELF,NetBSD/FreeBSD,COFF,Microsoft 16-bit OBJ 和Win32 格式。它也能够输出简单的二进制文件。NASM的语法结构简单,容易理解,类似Intel的语法,但是跟简单。NASM支持Pentium,P6和MMX 操作代码和宏方法。

一般情况下,你可能没有NASM,从下面的地址下载:

http://sunsite.unc.edu/pub/Linux/devel/lang/assemblers/

?一个文本编辑框,如plco或emacs



1.1 安装广泛使用的汇编器

假定nasm-0.97.tar.gz在当前的目录下,键入:

gunzip nasm-0.97.tar.gz

tar –vxf nasm-0.97.tar

将会创建一个nasm-0.97的文件夹,进入这个文件夹,之后通过输入编译这个汇编器:

./configure

make

这个将创建执行文件nasm和ndisasm文件。可以将他们拷贝到/usr/bin目录下,这样可以方便访问他们。现在可以把nasm-0.97文件夹从系统中删除。我在Red Hat5.1和SlackWare3.1系统中成功编译了NASM,因此这个将不会是个大问题。



2 用C创建第一个简单的二进制文件

使用文本编辑器创建一个test.c文件,输入:

int main(){

}

输入编译:

gcc –c test.c

ld –o test –Ttext 0x0 –e main test.o

objcopy –R .note –R .comment –S –o binary test test.bin

这将创建一个二进制文件。我门可以使用ndisasm查看这个二进制文件,输入:

ndisasm –b 32 test.bin

将给出如下输出:

00000000 55 push ebp

00000001 89E5 mov ebp,esp

00000003 C9 leave

00000004 C3 ret

将得到三列,第一列包括指令的内存地址

相关推荐
相关主题
热门推荐