环境搭建设
在目前,很少有关于这方面太多的资料。因此这也是我下决心来写一些东西的原因,希望这篇文章能对大家有所帮助。在读该篇文章前,你必须有一定的基础。否则,在阅读时会有很大困难,首先你要了解汇编语言及C语言,其次,你要会使用LINUX。
首先我要先介绍一下,所需要的硬件及软件环境。
1、一台INTEL,I386构架的PC机或者更高
2、一份LINUX操作系统,如:红帽子。
3、GNU GCC编译器,这个C编译器通常是LINUX自带的。请用此命令(GCC –VERSION)来检查以下它的版本,我这里显示的是2.7.2.3。也许在你哪里可能显示的不是这个版本,但是我想应该不会有太大的问题。
4、版本为0.97或者更高的NASM。NASM是一个免费的支持便宜多种文件对象格式的汇编编译器,它的语法设计的的很简单,很容易上手。到这里寻找相应的版本http://www.ibiblio.org/pub/Linux/devel/lang/assemblers/
5、一个文本编辑器
安装汇编编译器
把从INTERNET上下载到的文件,在一个适当的目录下解压,输入下列命令:
gunzip nasm-0.97.tar.gz
tar -vxf nasm-0.97.tar
上面的命令会创建一个叫做nasm-0.97的目录,进入该目录我们开始编译这个汇编编译器,输入下列命令:
./configure
make
这样会创建两个可执行文件nasm 和ndisasm.。你可以把这两个文件考备到/usr/bin,这样就可以很容易的来执行该文件了。接下来,你可以把刚才因为编译而创建的目录及目录下所有的文件删除了。经过这些步骤,我们就可以开始进入真正的主题了。
开始编译我们的第一个二进制文件
使用任何一个文本编辑器,创建一个叫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
请注意,这里的test.bin文件是一个二进制机器码的文件,和我们平时在WINDOWS及LINUX下运行的可执行文件不一样。需要把二进制机器码经过一定格式的封装后通过操作系统的装载器装载后才可以在操作系统里运行。可执行文件不是这篇文章的主题,在这里我们就不做讨论了。如果想学破解的朋友,可以在先在二进制机器码文件上下下功夫,相信我这对你以后的一定会有帮助的,好了现在言归正传,开始介绍二进制机器码了。
经过上面的步骤,我们已经创建了一个叫test.bin的二进制机器码文件。我们可以用刚才编译过的ndisasm来看我们的第一个二进制机器码文件。请输入下面的命令:
ndisasm -b 32 test.bin
当你按下回车后,就会在屏幕上输出以下内容:
00000000 55 push ebp
00000001 89E5 mov ebp,esp
00000003 C9 leave
00000004 C3 ret
我们会在屏幕上看到有三列文字,第一列是表示指令在内存中的地址。第二列是指令的二进制码,第三列就是指令的汇编代码。注意指令的汇编代码是和指令的二进制码一一对应的。
你应该注意到,这是一个32位的代码,GNC GCC只能生成32位的代码。因此要运行这个程序也必须在32位的环境中运行。这段代码只是完成了一个住函数的框架,并没有执行任何指令。EBP指针是用来保存函数参数的。