当我在进行一个简单的编译一个内核的时候,在输入如下命令后
nasm -f elf -o write.o write.Sld -m elf_i386 -s -o write.bin write.o
出现报错如下:
ld: i386 architecture of input file `write.o' is incompatible with i386:x86-64 output
原因是我用的ubuntu是64位的,在x86_64上编译/链接32位应用程序时,设置模拟以elf_i386提供正确的elf格式。
解决方案:将链接的语句换成下面这个
ld -m elf_i386 -s -o write.bin write.o
即可
顺便附上我的第一个用汇编写的系统调用:write函数
section .data
str_c_lib: db "c library say : hello world!",0xa
str_c_lib_len equ $-str_c_libsection .text
global _start_start:push str_c_lib_lenpush str_c_libpush 1call simu_writeadd esp,12mov eax,1int 0x80simu_write:push ebpmov ebp,espmov eax,4mov ebx,[ebp+8]mov ecx,[ebp+12]mov edx,[ebp+16]int 0x80pop ebpret
运行结果截图: