Ubuntu16.04_x64的gcc 編譯32位 elf 文件

原來的格式

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

在這裏插入圖片描述
由上圖可以看出,直接使用 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

在這裏插入圖片描述
可以看出,Class 和 Machine 都變爲咱期望的樣子了。

總結

也就比原來的命令多了個參數,
編譯時,多了個 -m32
鏈接時,多了個 -m elf_i386
其它沒有變化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章