12 2013 档案

摘要:Kprobes是一种运行时动态调试内核的机制, 你可以用它设置断点并收集调试信息, 甚至改变内核行为.Kprobes分三种, 普通kprobes以及基于普通kprobes的jprobes和kretprobes. kprobes可以注入某个地址, jprobes用来注入某个函数入口, 而kretprobes则用来注入某个函数返回.实现原理Kprobes的实现主要利用了处理器的异常和单步执行特性. 以普通kprobes举例, 注册时它会复制一份被注入的指令, 并加入断点(例如x86的int 3), 当CPU执行到被注入的指令时就会陷入到Kprobes中, 此时Kprobes先运行钩子函数”pre_ 阅读全文
posted @ 2013-12-29 16:22 jeremyatchina 阅读(545) 评论(0) 推荐(0)
摘要:使用printk打印变量等方法,是调试内核的有效方法之一,但是这种方法必须重新构建并用新内核启动,调试效率比较低。以内核模块的方式使用kprobes、jprobes,就可以在任意地址插入侦测器,执行包括printk在内的各种调试工作,而无须重新构建内核,也无须重启。一、首先内核必须支持kprobes、jprobes:#make menuconfigGeneral setup --->[*] Kprobes使内核支持kprobes。二、kprobes的使用方法:1、分配一个kprobe结构体供kprobes运行时使用。2、在kprobe结构体的addr成员中设置要插入侦测器的函数地址,可以 阅读全文
posted @ 2013-12-29 16:14 jeremyatchina 阅读(692) 评论(0) 推荐(0)
摘要:缺頁異常被觸發通常有兩種情況——1.程序設計的不當導致訪問了非法的地址2.訪問的地址是合法的,但是該地址還未分配物理頁框下面解釋一下第二種情況,這是虛擬內存管理的一個特性。盡管每個進程獨立擁有3GB的可訪問地址空間,但是這些資源都是內核開出的空頭支票,也就是說進程手握着和自己相關的一個個虛擬內存區域(vma),但是這些虛擬內存區域並不會在創建的時候就和物理頁框掛鉤,由於程序的局部性原理,程序在一定時間內所訪問的內存往往是有限的,因此內核只會在進程確確實實需要訪問物理內存時才會將相應的虛擬內存區域與物理內存進行關聯(为相應的地址分配頁表項,並將頁表項映射到物理內存),也就是說這種缺頁異常是正常的 阅读全文
posted @ 2013-12-23 13:34 jeremyatchina 阅读(1352) 评论(0) 推荐(0)
摘要:这两天找工作,做面试题的时候,碰到这样的题:指定了一个地址,比如说0x0012ff7c这样一个地址,要求是给这个指定的地址赋一个确定的值,比如说100,当时就是一个郁闷啊,在汇编里这样用过,在c中还真没用过。今天在网上查了查,自己也在turbo c上运行了一下,正好做个总结,方法如下:char * test;test = (char *)0x0012ff7c;*test = value;//自己赋值就好了这里需要注意的是第二行中的(char *)是一定需要的,而且要和上面的指针定义的类型相对应,比如:int * test;test = (int *)0x0012ff7c;*test = val 阅读全文
posted @ 2013-12-20 10:47 jeremyatchina 阅读(5290) 评论(0) 推荐(2)
摘要:Linux 的 time 指令Linux 有個很有意思的 time 指令,可以用來查看另一個指令的執行時間,例如執行 time helloworld 會顯示 helloworld 這支程式的執行時間。time 指令的返回值包含「實際時間 (real time)」、「用戶態 CPU 時間 (user CPU time)」及「核心態 CPU 時間 (system CPU time)」。其中,real time 表示後面所接的指令或程式從開始執行到結束終止所需要的時間。簡單講,當一個程式開始執行瞬間看一下手錶記下時間,當程式結束終止瞬間再看一次手錶,兩次的時間差就是 real time。user C 阅读全文
posted @ 2013-12-09 15:06 jeremyatchina 阅读(871) 评论(0) 推荐(0)
摘要:Hi there,I've upgraded a number of test systems to the latest Saucy beta. I've seen quite a few cases of processes being killed by lowmemorykiller with the following entries being logged:[ 291.565121] lowmemorykiller: send sigkill to 4476 (python), adj 0, size 8864[23515.006794] lowmemorykil 阅读全文
posted @ 2013-12-09 12:01 jeremyatchina 阅读(730) 评论(0) 推荐(0)
摘要:addr2line探秘在Linux下写C/C++程序的程序员,时常与Core Dump相见。在内存越界访问,收到不能处理的信号,除零等错误出现时,我们精心或不精心写就的程序就直接一命呜呼了,Core Dump是Linux仁慈地留下的程序的尸体,帮助程序员们解决了一个又一个问题。有时配置不给力,Linux直接毁尸灭迹,没有了Core文件;又有时,刚好磁盘空间不足,Core文件写不下了。没有Core文件的时候,如何知道程序在什么地方出错了呢?addr2line就在这时派上用场。这是一个示例程序,func函数返回参数a除以参数b的结果。这里使用0作为除数,结果就是程序因为除以0导致错误,直接中断了。 阅读全文
posted @ 2013-12-09 11:58 jeremyatchina 阅读(598) 评论(0) 推荐(0)