Browsed by
Month: May 2016

[C Linux内核] 文件与I/O

[C Linux内核] 文件与I/O

系统调用 Hello world 先看一个例子,利用系统调用sys_write用汇编实现的向stdout输出hello world .data msg: .ascii “Hello, world!\n” len = . – msg .text .global _start _start: movl $len, %edx # third argument: message length movl $msg, %ecx # second argument: pointer to message to write movl $1, %ebx # frist argument: file handle(here stdout) movl $4, %eax int $0x80 movl $0, %ebx movl $1, %eax int $0x80 将_start作为 ELF linker or loader的 外部可以使用的符号(通过 .global) 并且在.data段内定义一个标号msg,代表字符串Hello world 的首地址,  定义len的时候用到的 . 是一个用来代替当前段内地址(在每一个段开头, “.” 的值都会初始化回0)因而, len的值就是当前地址减去msg的首地址, 换句话说,就是 字符串常量”Hello world\n”长度, 上面的代码进行了两次系统调用,…

Read More Read More