上一页 1 ··· 6 7 8 9 10 11 下一页
摘要: http://bbs.chinaunix.net/thread-3628928-1-1.htmlQ:中断线屏蔽与禁用什么区别?A:local_irq_disable就是调用的汇编指令cli,所以是禁止中断。disable_irq是将相应的irq的desc->status|=IRQ_DISABLE,所以是屏蔽中断。禁止中断和屏蔽中断的区别就是,cli后,不会产生中断信号;disable后会产生中断信号,但是不会处理中断,只是置位IRQ_PENDING非常好的分析的文章:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelin 阅读全文
posted @ 2011-12-21 19:26 yarpee 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 看中断处理的时候,通过这种方式可以达到返回值有多种情况,非常好的方式在响应一个具体的中断时,内核会执行一个函数,该函数被称为中断服务例程(Interrupt Service Routine,ISR)。每一个设备的驱动程序中都会定义相关的中断服务例程。从下面的代码可以看到,中断服务例程有两个参数,分别为int型和 void指针型。并且返回值为irqreturn_t。//linux/include/linux/interrupt.h typedef irqreturn_t (*irq_handler_t)(int, void *);//linux/include/linux/irqreturn.h 阅读全文
posted @ 2011-12-21 15:10 yarpee 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 引子:CPU和外围硬件设备的速度不是一个数量级的。让硬件在需要的时候再向内核发出信号(变内核主动为硬件主动),这就是中断机制。1.不同的设备对应的中断不同,而每个中断都通过一个唯一的数字标识。这些中断值通常称为中断请求线(IRQ)。注:与异常的区别,中断不需要考虑与处理器时钟同步,而异常在产生时必须考虑与处理器时钟同步。实际上,异常也常常称为同步中断。中断就是由硬件产生的异步中断(还有一些软中断),而异常就是由处理器本身产生的同步中断。在响应一个特定中断的时候,内核会执行一个函数,该函数叫做中断处理程序(interrupthandler)或中断服务例程(interruptservicerout 阅读全文
posted @ 2011-12-20 22:45 yarpee 阅读(1081) 评论(0) 推荐(0) 编辑
摘要: 不多说,一些参考链接http://hi.baidu.com/yangyingchao/blog/item/b5bd6cdf665ac11e4854036a.htmlhttp://blog.csdn.net/mm350670610/article/details/5895561http://www.linuxidc.com/Linux/2011-05/35327.htmhttp://wenku.baidu.com/search?word=Linux%C9%E8%B1%B8%C7%FD%B6%AF%B3%CC%D0%F2%D1%A7%CF%B0&lm=0&od=0&pn=0 阅读全文
posted @ 2011-12-18 21:25 yarpee 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 时钟中断由系统的定时硬件以周期性的时间间隔产生,这个间隔(即频率)由内核根据HZ来确定,HZ是一个与体系结构无关的参数,可配置(50-1200),在X86平台,默认1000jiffies(unsigned long):每当时钟中断发生一次,全局变量jiffies就加1.因此jiffies记录了自linux启动后时钟中断发生的次数。unsigned long j=jiffies+jit_delay*HZ; (即增加jit_delay秒)struct timer_list { struct list_head entry; //timer_list结构体链表的头部,内核使用了爱组织成双向链表uns 阅读全文
posted @ 2011-12-16 16:31 yarpee 阅读(220) 评论(0) 推荐(0) 编辑
摘要: a.修改内存的通用步骤http://www.outflux.net/blog/archives/category/reverse-engineering/1.首先在/proc/PID/maps中找到相应的位置2.寻找相关的内存attach上去后(gdb) find /w 0x0a22e000, 0x0b08a000, 2193933.查看内存相关信息(gdb) x/8x 0xaf06ca84.修改内存相关信息(gdb) set var *0xaf06cac = 0x00100bb8等等相关步骤。b.转自scz1.在GDB里将指定范围的内存数据转储成二进制文件http://www.sczgrou 阅读全文
posted @ 2011-12-15 16:39 yarpee 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 1.打印存储于地址addr上的符号名。如果在此地址上没有存储符号,GDB打印最近的符号和偏移量:(gdb)info symbol 0x54320_initialize_vx+396 in section .text2.要将值保存进内存中的绝对地址,使用'{...}'指令在指定的地址上存入指定类型的值。 set {int}0x83040=43.为程序设置信号非常好的UNIX方面交流的地方:http://www.newsmth.net/bbsdoc.php?board=Unix如何获取当前进程对应之静态映像文件的绝对路径http://www.sczgroup.org/unix/20 阅读全文
posted @ 2011-12-14 22:50 yarpee 阅读(199) 评论(0) 推荐(0) 编辑
摘要: Extending GDB详情在http://sources.redhat.com/gdb/current/onlinedocs/gdb.html#Extending-GDB,具体还需要进一步实例应用set script-extension off All scripts are always evaluated as gdb Command Files. set script-extension soft The debugger determines the scripting language based on filename extension. If this scripting 阅读全文
posted @ 2011-12-14 10:50 yarpee 阅读(418) 评论(0) 推荐(0) 编辑
摘要: 1.gdb中dump内存http://ioctl.eu/blog/2009/05/06/memory_dump_gdbMemory Dump with GDBAltough gdb is not a real low-level debugger, it has some quite interesting low-level functionality. (gdb) dump binary memory dump.raw 0x00800000 0x01000000 Dumps the memory of the currently debugged application into a fi 阅读全文
posted @ 2011-12-13 18:25 yarpee 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 11.调试优化的代码几乎所有的编译器都支持优化。禁用掉优化后,编译器生成的汇编代码通过简单的方式直接对应到你的源代码。由于编译器提供了更强大的优化能力,生成的汇编代码与源代码变得不尽相对应了。由编译器生成的调试信息的帮助下,gdb可以从正在运行的程序映射出源代码的结构。gdb在禁用掉优化后更准确。如果你可以使用不优化来重新编译,很容易在调试过程中跟踪你的程序的过程。但是,有许多情况下,您可能需要调试优化后的版本。当你调试用'-g -O'编译的程序,请记住,优化已经重新安排你的代码,调试器会显示那里存在什么。不要对执行路径没有准确符合源文件感到奇怪。一个极端的例子:如果你定义一个 阅读全文
posted @ 2011-12-13 14:34 yarpee 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 本文主要取自Debugging with GDB中第10部分的一些技巧1.程序里产生Core文件 How to Produce a Core File from Your ProgramA core file or core dump is a file that records the memory image of a running process and its process status (register values etc.). Its primary use is post-mortem debugging of a program that crashed while i 阅读全文
posted @ 2011-12-13 12:38 yarpee 阅读(352) 评论(0) 推荐(0) 编辑
摘要: Debugging with GDB已经有一份中文翻译,在这边中文翻译的基础上将文档中新增的部分以及没有翻译的后继部分进行翻译,对gdb达到一个质的应用。这是第10部分的选出来的一些技巧10.4 模糊表达式表达式有时会包含一些模糊的元素。例如,一些编程语言(特别是Ada,C++和Objective-C语言)允许一个简单的函数名在不同的语境中被定义多次。这就是所谓的重载。涉及Ada的另一个例子是通用的。一个普通包类似C++模板以及可以被实例化多次,导致在相同的函数名在不同的上下文中被定义。在某些情况下,根据语言,它是可能删除一些模糊的地方来调整表达。比如在C++中,你可以指定想要下断点的函数特征 阅读全文
posted @ 2011-12-12 17:56 yarpee 阅读(372) 评论(0) 推荐(0) 编辑
摘要: 选自如下:http://wangcong.org/blog/archives/1821情况是这样的:在 Linux 内核中,有一个函数 kmap_atomic(),它之前带两个参数,而现在,它的第二个参数已经名存实亡了,可以直接去掉。所以问题就出来了,如何警告使用 kmap_atomic() 的人带有两个参数的形式是过时的?换句话说,怎么才能在用两个参数调用 kmap_atomic() 时发出警告而用一个参数调用时就没有警告?选用的技巧https://lkml.org/lkml/2011/11/27/3++#define PASTE(a, b) a ## b //预处理运算符# #为宏扩展提供 阅读全文
posted @ 2011-12-11 18:26 yarpee 阅读(299) 评论(0) 推荐(0) 编辑
摘要: a.安装pydasm1.下载 libdasm (pydbg 依赖于 pydasm, pydasm 又需要 libdasm)http://code.google.com/p/libdasm/下载libdasm-1.5.tar.gz并解压取其中的pydasm2.如果你从没有编译个c源代码的python库, 而且你安装的 python 和你的 VC 编译器版本不 匹配的话, 可能会出现找不到C编译器的错误. 这时就需要手动修改python的 Lib\distutils \msvccompiler.py文件.具体如下所示:msvccompiler.py: ...class MSVCCompiler ( 阅读全文
posted @ 2011-12-04 21:21 yarpee 阅读(1575) 评论(0) 推荐(0) 编辑
摘要: Linux熟悉内核参与 1.内核源代码管理模式 2.patch的属性与内容 3.与Maintainer交互a、Linux 版本小数点后第一位是偶数的就是是稳定版b、git.kernel.org 内核源码树 http://www.remword.com/kps_result/ 贡献源码统计c、Linux内核开发模式 1.主版本负责人叫做Maintainer 2.分支版本d、Linux内核使用分布式版本控制Gite、与maintainer交互: 订阅邮件列表 修订patchf、Linux源代码代码风格在document这个目录里面 比如:http://lxr.linux.no/l... 阅读全文
posted @ 2011-12-04 17:15 yarpee 阅读(187) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 下一页