编译和链接
nasm编译生成elfnasm -f elf hello.asm
gcc链接gcc hello.o -o hello
如果报错i386 架构于输入文件 hello.o 与 i386:x86-64 输出不兼容
,是因为输入32bit,输出64bit,用elf64即可(事实上,这个参数自己选,有elf,elf32,elf64,aout)
或者也可以不用gcc来link(特别是有的时候,妾身的代码不支持64bit,ld就显得很重要了)
ld -m elf_i386 hello.o -o hello
然后,./hello
跑程序就可以了
elf&aout
ELF
全称是Executable Linkable Format
1.可重定位文件 这类文件包含了代码和数据,可以被用来链接成可执行文件或共享目标文件,静态链接库也可以归为这一类
2.可执行文件 这类文件包含了可以直接执行的程序,它的代表就是ELF可执行文件,它们一般都没有扩展名
3.共享目标文件 这类文件包含了代码和数据,可以在两种情况下使用。一种是链接器可以使用这种文件跟其他的可重定位文件和共享目标文件链接,产生新的目标文件。第二种是动态链接器可以将几个这种共享目标文件与可执行文件结合,作为进程映像的一部分来运行
4.核心转储文件 当进程意外终止时,系统可以讲该进程的地址空间的内容及终止时的一些其他信息转储到核心转储文件
aout
assembler output(汇编程序输出)最初没有连接器,所有源文件连接在一起,进行汇编
但是现在程序编程中出现它并不是汇编输出,而