Ubuntu16.04_x64的gcc 编译32位 elf 文件

原来的格式

源文件为 main.c
若直接使用gcc 编译文件,编译出的是 ELF64 格式的。
用 readelf -e 文件名,即可查看文件的ELF的信息。

Ubuntu16.04_x64的gcc 编译32位 elf 文件_第1张图片
由上图可以看出,直接使用 gcc 编译、链接出来的elf 文件,class 是ELF64,machine是 Advanced Micro Devices X86-64。

而我们需要的是ELF32格式的,而且是要运行在intel 80386机器上。

改动后

首先是编译:

gcc -m32 -c -o main.o main.c

然后是链接:

ld -m elf_i386 main.o -Ttext 0xc0001500 -e main -o kernel.bin

Ubuntu16.04_x64的gcc 编译32位 elf 文件_第2张图片
可以看出,Class 和 Machine 都变为咱期望的样子了。

总结

也就比原来的命令多了个参数,
编译时,多了个 -m32
链接时,多了个 -m elf_i386
其它没有变化。

你可能感兴趣的:(Linux基础,gcc,elf)