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(不可访问)       

 

 

原创粉丝点击