我试图写一个简单的汇编程序,其中包含printf函数。我使用nasm -f elf 64
进行编译,并使用gcc
进行链接。运行后出现了segmentation fault
错误。这是什么问题?
[Bits 32]
extern printf
global main
section .data
hello:
db "Hello", 0xa, 0
section .text
main:
push hello
call [printf]
add esp, 4
mov eax, 1
mov ebx, 0
int 80h
elf64
呢? - Daniel Kamil Kozar/usr/bin/ld: i386 architecture of input file ./asemlebr.o is incompatible with i386:x86-64 output
。 - user902691printf
?如果你想调用 C 库中的printf
,那么需要进行更多的工作 - 你需要确保库的初始化代码被调用,根据所在平台的 ABI 设置堆栈帧和参数,并将程序与库链接起来,至少要做到这些... - twalbergsys_exit
不会刷新标准输出,但如果它不是TTY,则会进行完全缓冲。 - Peter Cordes