【发布时间】:2011-03-23 12:17:46
【问题描述】:
我正在 Linux 上学习 asm (noobuntu 10.04) 我得到了以下代码:http://asm.sourceforge.net/intro/hello.html
section .text
global _start ;must be declared for linker (ld)
_start: ;tell linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
这是一个简单的hello world。在 Linux 上运行 + 直接调用内核(显然)。 谁能解释一下这里到底发生了什么?我认为它读取 eax 和 ebx 处理器寄存器和 ecx、edx 数据中的整数,并在调用内核时定义系统调用。如果是这样,当调用 int 0x80 时,不同的整数组合是否定义了不同的系统调用?
我不擅长手册页,但我已经阅读了我能找到的所有相关手册,是否有任何手册页告诉我哪些组合定义了哪些系统调用?
感谢任何帮助。逐行解释将是惊人的...... -提前致谢 杰里米
【问题讨论】:
标签: assembly x86 linux-kernel system-calls