burningcodes 原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.学习感受 经过这两个多月的Linux内核之旅,对Linux内核有了初步的认识。在这过程之中付出了很多,也收获了很多,尤其是写blog的方式,不仅能记录所学,还能加深对知识的理解。通过这门课,虽然只是认识了内核的很小一部分,但是最主要的是学会了学习源码的方...

burningcodes 原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 在 从迷你型Linux内核理解进程调度的原理  一文中已经介绍过简化版的linux内核进程进程调度,这篇文章将深入linux源码进一步分析linux进程调度的原理。 1.进程调度的时机 进程调度主要有以下几个时机: 中断处理过程中:中断处理包括时钟中断、I/O中断、系...

burningcodes  原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.elf文件格式 目标文件主要分为三种类型: 可重定位文件(Relocatable File) 包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件的代码和数据。 可执行文件(Executable File) 包含适合于执行的一个程序。 共享目标文件(Shared Object Fi...

burningcodes  原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.进程管理中的关键数据结构 在进程管理中用到了几个关键的数据结构,这里先给出关键结构间的大致关系: 最主要的是三个数据结构: thread_union(linux-3.18.6/include/linux/sched.h#2241) thread_info(linux-3.18.6/arch/x86/include/asm/thread_info...

burningcodes  原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 上一篇文章中分析了系统调用的基本原理,通过跟踪源码将应用层系统调用和内核层的系统调用联系在了一起,回顾点这: 理解系统调用的原理(一)。 这篇文章在上文的基础上主要解决两个问题: 进一步分析system_call中做了哪些操作 中断处理与系统调用的区别和...

burningcodes  原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.参数传递 系统调用也需要参数,但是它在内核态下的参数传递方式和用户态下不太一样,不是通过栈而是通过寄存器来存放参数(在64位系统中用户程序的参数也变为用寄存器存放),若参数个数不超过6个可以使用ebx, ecx,edx,esi,edi,ebp来存放(eax中存放系...

Linux内核课第三次作业。burningcodes + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.给内核加入调试信息 ubunte32位下要安装 libncurses5-dbg 库,直接apt-get安装即可。 打开图形化内核配置: make menuconfig 1 make menuconfig ...

android加载so库时会调用loadLibrary来完成加载操作。一般情况下,我们将JNI_OnLoad看作so库的入口,但是很多加壳过的so根本无法从JNI_OnLoad处开始分析,那JNI_OnLoad真的是so的入口吗,从android源码中找到答案如下: System.loadLibrary其实只是做了一个中转(System.loadLibrary): public static void loadLibrary(String lib...

在脱壳的时候经常见到在dvmDexFileOpenPartial这个函数下断点,但是为什么要在这里下断点呢,这篇文件就从源码的角度跟踪一下Dex的加载流程。 源码可以在这里查看:/dalvik/dexopt/OptMain.cpp OptMain中的main函数就是加载dex的最原始入口,是用c代码写成的native函数: int main(int argc, char* const argv[]) { set_process_name("dexo...

Linux下的printf和Windows下的略有区别:Linux下printf不会将数据立即输出,而是先放入缓冲区,等缓冲区满或者遇到/n/r时才会输出。如果想立即输出,需要加上 fflush(stdout)。 仿Linux中printf的源码: C++ #include <stdio.h> #include <stdarg.h> #include <malloc.h> #define IsDigital(c) ((c>='0') &...

+
跳转到评论