【发布时间】:2011-12-11 14:20:51
【问题描述】:
我正在尝试定义一些调用 printf 的子例程。 一个很简单的例子如下:
extern printf
LINUX equ 80H
EXIT equ 60
section .data
intfmt: db "%ld", 10, 0
segment .text
global main
main:
call os_return ; return to operating system
os_return:
mov rax, EXIT ; Linux system call 60 i.e. exit ()
mov rdi, 0 ; Error code 0 i.e. no errors
int LINUX ; Interrupt Linux kernel
test:
push rdi
push rsi
mov rsi, 10
mov rdi, intfmt
xor rax, rax
call printf
pop rdi
pop rsi
ret
这里的 test 只是调用 printf 将数字 10 输出到屏幕上。我不希望这会被调用,因为我没有调用它。
但是在编译运行时:
nasm -f elf64 test.asm
gcc -m64 -o test test.o
我得到了输出:
10
10
我完全感到困惑,想知道是否有人可以解释为什么会发生这种情况?
【问题讨论】:
标签: linux gcc assembly x86-64 subroutine