Home 世界杯开幕战 线卡(line card)

线卡(line card)

匿名用户:

load_elf_binary(linux_binprm* bprm,pt_regs* regs)

分析 ELF 文件头

读入程序的头部分( kernel_read 函数)

if (存在解释器头部) {

读入解释器名( ld*.so ) (kernel_read 函数 ) | ( zalem note :可用

打开解释器文件( open_exec 函数) | objdump -s -j .interp xxx

读入解释器文件的头部( kernel_read 函数) | 命令查看,

) |linux 下是 /lib/ld-linux.so.x )

释放空间,清楚信号,关闭指定了 close-on-exec 标识的文件( flush_old_exec 函数)

生成堆栈空间,塞入环境变量 / 参数部分( setup_arg_pages 函数)

for (可引导的所有的程序头) {

将文件影射入内存空间( elf_map,do_mmap 函数)

}

if (为动态联结) {

影射动态联结器( load_elf_interp 函数)

}

释放文件( sys_close 函数)

确定执行中的 UID , GID ( compute_creds 函数)

生成 bss 领域( set_brk 函数)

bss 领域清零( padzero 函数)

设定从 exec 返回时的 IP , SP ( start_thread 函数)(动态联结时的 IP 指向解释器的入口)

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ruixj/archive/2009/11/07/47