trace “hello world”
来源:互联网 发布:海岛奇兵民房升级数据 编辑:程序博客网 时间:2024/05/01 08:21
==============================================================================================
#include <stdio.h>
int main()
{
printf("hello world !\n");
return 0;
}
==============================================================================================
execve("./hello", ["./hello"], [/* 38 vars */]) = 0
brk(0) = 0x804a000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fa7000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=48856, ...}) = 0
mmap2(NULL, 48856, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f9b000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\260e\1"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1364388, ...}) = 0
mmap2(NULL, 1369712, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7e4c000
mmap2(0xb7f95000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x149) = 0xb7f95000
mmap2(0xb7f98000, 9840, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7f98000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e4b000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7e4b6b0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0,
limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0xb7f95000, 4096, PROT_READ) = 0
munmap(0xb7f9b000, 48856) = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fa6000
write(1, "hello world!\n", 13hello world!
) = 13
exit_group(0) = ?
Process 7177 detached
===============================================================================================
下面介绍各个系统调用:
1. asmlinkage unsigned long sys_brk(unsigned long brk)
功能:在进程空间分配或者释放内存
参数:将要分配的结束地址/将要释放的起始地址
返回:
2. int access(const char *pathname, int mode)
功能:检查调用进程是否可以对指定文件执行某种操作
参数:pathname:文件名 mode:R_OK(可读), W_OK(可写), X_OK(可执行), F_OK(文件存在)
返回:成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EINVAL: 模式值无效
EACCES: 文件或路径名中包含的目录不可访问
ELOOP : 解释路径名过程中存在太多的符号连接
ENAMETOOLONG:路径名太长
ENOENT: 路径名中的目录不存在或是无效的符号连接
ENOTDIR: 路径名中当作目录的组件并非目录
EROFS: 文件系统只读
EFAULT: 路径名指向可访问的空间外
EIO: 输入输出错误
ENOMEM: 不能获取足够的内核内存
ETXTBSY:对程序写入出错
3. void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);
功能:普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问
参数:fd为即将映射到进程空间的文件描述字,一般由open()返回,
len是映射到调用进程地址空间的字节数,它从被映射文件开头offset个字节开始算起。
prot参数指定共享内存的访问权限。PROT_READ(可读),PROT_WRITE(可写),PROT_EXEC(可执行),PROT_NONE(不可访问)。
flags由以下几个常值指定:MAP_SHARED, MAP_PRIVATE, MAP_FIXED。其中,MAP_SHARED,MAP_PRIVATE必选其一
如果指定为MAP_SHARED,则对映射的内存所做的修改同样影响到文件。如果是MAP_PRIVATE,则对映射的内存所做的修改仅对该进程
可见,对文件没有影响。
offset参数一般设为0,表示从文件头开始映射。
参数addr指定文件应被映射到进程空间的起始地址,一般被指定一个空指针,此时选择起始地址的任务留给内核来完成。函数的返回
值为最后文件映射到进程空间的地址,进程可直接操作起始地址为该值的有效地址。
4.int fstat64(int fildes, struct stat64 *buf);
功能:gets information about the named file and writes it to the area that buf points to.
参数:filds 文件描述符
buf Points to a stat or stat64 structure where status information about the file is to be placed.
5.int set_thread_area (struct user_desc *u_info);
功能:set_thread_area() sets an entry in the current thread's Thread Local Storage (TLS) array. The TLS array entry set by
set_thread_area() corresponds to the value of u_info->entry_number passed in by the user.
6.int sys_mprotect(unsigned long start, size_t len, unsigned long prot)
功能:改变内存的访问权限
参数:start mmap的返回值
len 内存大小
prot PROT_READ(可读),PROT_WRITE(可写),PROT_EXEC(可执行),PROT_NONE(不可访问)
- trace “hello world”
- Hello World!【Hello World】
- Hello, world!
- Hello World!
- Hello world!
- Hello World!
- Hello World!
- hello world!
- Hello World !
- Hello,World!
- Hello World!
- Hello world!
- Hello World!
- Hello World
- Hello World
- Hello world
- Hello World!
- Hello world
- which is 什么时候可以省略
- Java 类集 _foreach 及Enumeration 接口
- Context initialization failed
- 最长公共子串LCS
- 最长公共子序列
- trace “hello world”
- 搭建android开发环境
- 13.3线程的生命周期与线程状态
- 线程1_20110905
- Android音频流程一(JNI部分)
- 线程2_20110906
- 第十三章 多线程 第二讲
- HTML5新的数字输入控件
- CDMA短信接收PDU串分析