2024年5月11日发(作者:)
Making plain binary files using a C compiler (i386+)
作者:Cornelis Frank April 10, 2000
翻译:coly li
我写这篇文章是因为在internet上关于这个主题的信息很少,而我的EduOS项目又需要它。对
于由此文中信息所引申、引起的意外或不利之处,作者均不负有任何责任。如果因为我的糟糕英
语导致你的机器故障,那是你的问题,而不是我的。
1,你需要什么工具
一个i386或者更高x86CPU配置的PC
一个Linux发行版本,Redhat或者Slackware就不错。
一个GNU GCC编译器。一般linux发行版本都会自带,可以通过如下命令检查你的GCC的
版本和类型:
gcc --version
这将会产生如下的输出:
2.7.2.3
可能你的输出和上面的不一样,但是这不碍事。
Linux下的binutils工具包。
NASM 0.97或者更高的版本汇编器。Netwide Assembler,即NASM,是一个80x86的模块化
的可移植的汇编器。他支持一系列的对象文件格式,包括linux的””,和
ELF,NetBSD/FreeBSD,COFF,Microsoft 16位OBJ和Win32。他也可以输出无格式二进制
文件。他的语法设计的非常简单并且易于理解,同intel的非常相似但是没有那么复杂。它
支持Pentium,P6和MMX操作数,并且支持宏。
如果你的机器上没有NASM,可以从下述网站下载:
/pub/Linux/devel/lang/assemblers/
一个象emacs或者pico那样的文本编辑器。
1.1安装Netwide汇编器(NASM)
假定当前目录下存有nasm-0.97的压缩包,输入:
gunzip
tar -vxf
这将建立一个名为nasm-0.97的目录,进入这个目录,下一步我们将输入如下命令来编译这个
汇编器:
./configure
make
这将建立可执行文件nasm和ndisasm。你可以将这些文件复制到你的/usr/bin目录下,这样更
方便调用。现在你可以从你的计算机上删除目录nasm-0.97了。我一般会在RedHat linux 5.1
或者Slackware 3.1下编译,这样不会引起太多麻烦。
2,使用C语言生成第一个二进制文件
使用你的文本编辑器建立一个名为test.c的文件,输入如下内容:
intmain(){
}
输入如下命令进行编译:
gcc –c test.c
ld –o test –Ttext 0x0 –e main test.o
objcopy –R .note –R .comment –S –O binary test
这将建立我们的名为的二进制文件。我们可以使用ndisasm查看这个文件,需输入如
下命令:
ndisasm –b 32
这将生成如下输出:
00000000
00000001
00000003
00000004
指令本身。
55
89E5
C9
C3
push ebp
mov ebp,esp
leave
ret
我们看到3列。第一列是指令的内存地址,第二列是指令的字节代码,最后一行是对应的汇编


发布评论