- 博客(8)
- 收藏
- 关注
原创 Linux内核学习总结
第一周:计算机是如何工作的//在64位环境下编译成32位的汇编gcc -S -o ccode32.s ccode.c -m32//链接时会缺少构建32 位可执行程序缺少的包,使用以下指令安装:sudo apt-get install libc6-dev-i386//编译链接成32位的可执行文件gcc -o ccode32 ccode.c -m32堆栈
2016-04-25 10:33:37
913
转载 实验八:理解进程调度时机跟踪分析进程调度与进程切换的过程
一、理论知识Linux系统的一般执行过程最一般的情况:正在运行的用户态进程X切换到运行用户态进程Y的过程1. 正在运行的用户态进程X2. 发生中断——save cs:eip/esp/eflags(current) to kernel stack, then load cs:eip(entry of a specific ISR) and ss:esp(point t
2016-04-13 16:25:28
428
原创 实验七:Linux内核如何装载和启动一个可执行程序
理解编译链接的过程和ELF可执行文件格式对于静态链接来说,start_thread中的elf_entry就是可执行文件的entry在一个新的可执行文件返回到用户态之前,要把压入内核栈的EIP修改,用新的可执行程序的起点Sys_execve的内部处理过程Do_open打开文件,加载文件头部Exec_binprm关键点是:寻找可执行文件的处理函数关键点是寻找
2016-04-06 14:36:30
567
原创 实验六:分析Linux内核创建一个新进程的过程
1、首先进入虚拟机,打开终端,这命令行依次敲入以下命令:cd LinuxKernel rm menu -rf //强制删除git clone https://github.com/mengning/menu.git //将menu更新cd menu mv test_fork.c test.c //更新test.c make rootfs
2016-03-30 16:19:46
956
转载 实验五:分析system_call中断处理过程
将上一个系统调用函数和asm版本的实现整合进入menu的内核中:int GetPid() { int pid = getpid(); printf("The Current Progress pid is : % d\n",pid); return 0; } int GetPid
2016-03-23 16:56:43
419
原创 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
使用库函数API在屏幕上显示进程的ID使用C语言内嵌汇编代码在屏幕上显示进程IDAPI:第一层是指Libc中定义的API,这些API封装了系统调用,使用int 0x80触发一个系统调用中断;当然,并非所有的API都使用了系统调用,如完成数学加减运算的API就没有使用系统调用;也有可能某个API使用了多个系统调用;这一层存在的价值就是为应用程序员提供易于使
2016-03-16 17:29:43
470
转载 实验三:跟踪分析Linux内核的启动过程
1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息、符号表的最初的内核,大小约23MB; 命令:arm-linux-gnu-ld -o vmlinux -T arch/arm/kernel/vmlinux.lds arch/arm/kernel/head.o init/built
2016-03-09 14:06:46
364
原创 一个简单的时间片轮转多道程序内核代码
关于时间片轮转多道程序内核代码分析【当前进程与处于运行状态的目标进程切换】asm volatile( 1 "pushl %%ebp\n\t"/* save ebp */2 "movl %%esp,%0\n\t"/* save esp */3 "movl %2,%%esp\n\t"/* restore esp */4 "movl $1f,%1\n\
2016-03-02 17:50:55
925
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人