12 2011 档案
摘要:watchdog是一种以NMI方式检查CPU死锁的机制上下文:进程上下文、中断上下文http://www.docin.com/p-251729682.html同一时刻,一个Tasklet或Timer不会同时在两个CPU上执行http://hi.baidu.com/greatren518/blog/item/27f7351033d349ffc2ce7925.htmlspin_lock_irqsave()是最通用和最强大的加锁函数。RCUhttp://www.ibm.com/developerworks/cn/linux/l-rcu/http://hi.baidu.com/xiangjunzhao
阅读全文
摘要:ld学习实例:linux 下仅导出指定函数的方法:转自http://www.whitecell.org/forums/viewthread.php?tid=741linux 也有导出文件。不用特定的扩展名,且不是在 gcc 中指定参数,而是在 ld 中。 写一个导出符号文件,如 symbol 指定你只导出的函数,如 func1。使用 ld 的 --retain-symbols-file参数可以在 static section 里取消 func1 以外的所有函数。这 时你用 readelf 看编译好后的 .so 文件 static section 里没有了,使用 nm 看 .so 文件它无法查出
阅读全文
摘要:1.adore实现文件隐藏getdents64()系统调用修改VFS来达到隐藏目的getdents64——>sys_getdents64——>vfs_readdir——>file->f_op->readdiropen——>sys_open——>filp_open——>dentry_open——>f->f_op=fops_get(inode->i_fop)最后是把inode中的file_operations函数集赋值给file中的file_operations函数集open当前目录文件,返回一个文件句柄,改句柄对应到内核中就是一个
阅读全文
摘要:1.module结构struct module{enum module_state state; /* 模块的内部状态 */struct list_head list; /* 模块链表指针 */char name[MODULE_NAME_LEN]; /* 模块名,60字节 */struct module_kobject mkobj; /* 包含一个kobject结构 */struct module_attribute *modinfo_attrs; const char *version; const char *srcversion;struct kobject *holders_dir;c
阅读全文
摘要:一串bit流中统计1的个数同事说了个方法很不错,学习了。#pragma once#include<iostream>typedef unsigned char byte;#define NEW_LINE "\r\n";const static int bitMapSize=256;byte bitMap[bitMapSize];void InitBitMap(void){bitMap[0]=0; //初始化第一个表值 0000 0000int nowBitStart=0,nowStart=1,nowLength=2;//根据第一个表值生成后面的所有表值for(;
阅读全文
摘要:modutils:http://www.kernel.org/pub/linux/utils/kernel/modutils/v2.4/http://mp.tongji.edu.cn/cgi-bin/topic.cgi?forum=6&topic=10 tongji论坛如果user不是root的话,lsmod只是将/proc/modules里的内容显示出来如果user是root的话,通过sys_query_module获取模块信息几个和module相关的系统调用sys_create_modulesys_init_modulesys_query_modulesys_delete_modu
阅读全文
摘要:TASK_KILLABLE对不可中断睡眠模式的进程的唤醒呼叫可能会由于某些原因不会发生,这会使进程无法被终止,从而最终引发问题,因为惟一的解决方法 就是重启系统。一方面,您需要考虑一些细节,因为不这样做会在内核端和用户端引入 bug。另一方面,您可能会生成永远不会停止的进 程(被阻塞且无法终止的进程)。为此引入了TASK_KILLABLE状态#define TASK_KILLABLE (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)参考链接:http://www.ibm.com/developerworks/cn/linux/l-task-killable/
阅读全文
摘要:Tim所著文章http://www.ibm.com/developerworks/cn/linux/l-lkm/index.htmlLinux 可加载内核模块剖析insmod-->init_module-->sys_init_modulermmod-->delete_module-->sys_delete_module在模块的加载和卸载期间,模块子系统维护了一组简单的状态变量,用于表示模块的操作。加载模块时,状态为 MODULE_STATE_COMING。 如果模块已经加载并且可用,状态为 MODULE_STATE_LIVE。此外,卸载模块时,状态为 MODULE_ST
阅读全文
摘要:__asm__ __volatile__("": : :"memory")memory强制gcc编译器假设RAM所有内存单元均被汇编指令修改,这样cpu中的registers和cache中已缓存的内存单元中的数据将作废。cpu将不得不在需要的时候重新读取内存中的数据。这就阻止了cpu又将registers,cache中的数据用于去优化指令,而避免去访问内存。这里就是跟gcc说已经更改了你存了详细请参看:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1978940http://gcc.g
阅读全文
摘要:CFS相关链接:http://www.ibm.com/developerworks/cn/linux/l-cfs/index.htmlhttp://blog.chinaunix.net/space.php?uid=20940095&do=blog&id=66041http://blog.chinaunix.net/space.php?uid=20940095&do=blog&id=66042http://blog.chinaunix.net/space.php?uid=20543183&do=blog&id=1930842http://wenku
阅读全文
摘要:32位的进程描述符都是task_struct类型结构,它的域包含了与一个进程相关的所有信息。其中包含指向tty_struct、fs_struct、files_struct、mm_struct、signal_struct等在Linux中,任务(task)和进程(process)是两个相同的术语,task_struct其实就是通常所说的"进程控制块"即PCB。进程的状态:可运行状态(TASK_RUNNING)、可中断的等待状态(TASK_INTERRUPTIBLE)、不可中断的等待状态(TASK_UNINTERRUPTIBLE)、暂停状态(TASK_STOPPED)、僵死状态(
阅读全文
摘要:进程劫持:http://blog.chinaunix.net/space.php?uid=18757596&do=blog&id=1744672unsigned long *getscTable(){ unsigned char idtr[6],*shell,*sort; struct _idt *idt; unsigned long system_call,sct; unsigned short offset_low,offset_high; char *p; int i; /* get the...
阅读全文
摘要:make的时候发现出现Makefile:8: *** missing separator. Stop.在http://gcc.gnu.org/ml/gcc/2001-02/msg00635.html这里看到了解决方法,实际上也很简单,就是必须要有一个tab>I tried to write the easy makefile>8: gcc -o test DBcomplx.o>When I call the make command I'got always the error message>>makefile:8: *** missing separa
阅读全文
摘要:http://blog.csdn.net/bresponse/article/details/6905904http://blog.csdn.net/bresponse/article/details/6905933平衡二叉树(Balanced Binary Tree):它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一颗平衡二叉树。红黑树,能保证在最坏情况下,基本的动态几何操作的时间均为O(lgn).红黑树上每个结点内含五个域,color,key,left,right,p。如果相应的指针域没有,则设为NIL。一般的,红黑树,满足以下性质,即只有满足以下全部性质的树
阅读全文
摘要: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
阅读全文
摘要:看中断处理的时候,通过这种方式可以达到返回值有多种情况,非常好的方式在响应一个具体的中断时,内核会执行一个函数,该函数被称为中断服务例程(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
阅读全文
摘要:引子:CPU和外围硬件设备的速度不是一个数量级的。让硬件在需要的时候再向内核发出信号(变内核主动为硬件主动),这就是中断机制。1.不同的设备对应的中断不同,而每个中断都通过一个唯一的数字标识。这些中断值通常称为中断请求线(IRQ)。注:与异常的区别,中断不需要考虑与处理器时钟同步,而异常在产生时必须考虑与处理器时钟同步。实际上,异常也常常称为同步中断。中断就是由硬件产生的异步中断(还有一些软中断),而异常就是由处理器本身产生的同步中断。在响应一个特定中断的时候,内核会执行一个函数,该函数叫做中断处理程序(interrupthandler)或中断服务例程(interruptservicerout
阅读全文
摘要:不多说,一些参考链接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
阅读全文
摘要:时钟中断由系统的定时硬件以周期性的时间间隔产生,这个间隔(即频率)由内核根据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
阅读全文
摘要: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
阅读全文
摘要: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
阅读全文
摘要: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
阅读全文
摘要: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
阅读全文
摘要:11.调试优化的代码几乎所有的编译器都支持优化。禁用掉优化后,编译器生成的汇编代码通过简单的方式直接对应到你的源代码。由于编译器提供了更强大的优化能力,生成的汇编代码与源代码变得不尽相对应了。由编译器生成的调试信息的帮助下,gdb可以从正在运行的程序映射出源代码的结构。gdb在禁用掉优化后更准确。如果你可以使用不优化来重新编译,很容易在调试过程中跟踪你的程序的过程。但是,有许多情况下,您可能需要调试优化后的版本。当你调试用'-g -O'编译的程序,请记住,优化已经重新安排你的代码,调试器会显示那里存在什么。不要对执行路径没有准确符合源文件感到奇怪。一个极端的例子:如果你定义一个
阅读全文
摘要:本文主要取自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
阅读全文
摘要:Debugging with GDB已经有一份中文翻译,在这边中文翻译的基础上将文档中新增的部分以及没有翻译的后继部分进行翻译,对gdb达到一个质的应用。这是第10部分的选出来的一些技巧10.4 模糊表达式表达式有时会包含一些模糊的元素。例如,一些编程语言(特别是Ada,C++和Objective-C语言)允许一个简单的函数名在不同的语境中被定义多次。这就是所谓的重载。涉及Ada的另一个例子是通用的。一个普通包类似C++模板以及可以被实例化多次,导致在相同的函数名在不同的上下文中被定义。在某些情况下,根据语言,它是可能删除一些模糊的地方来调整表达。比如在C++中,你可以指定想要下断点的函数特征
阅读全文
摘要:选自如下: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 //预处理运算符# #为宏扩展提供
阅读全文
摘要: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 (
阅读全文
摘要: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...
阅读全文
摘要:在用户空间中可以用如下方法得到:1. 从 System.map 文件直接得到地址。 例如,要得到 do_fork 的地址,可以在命令行执行 $grep do_fork /usr/src/linux/System.map 。2. 使用 nm 命令。 $nm vmlinuz |grep do_fork3. 从 /proc/kallsyms 文件获得地址。 $cat /proc/kallsyms |grep do_fork链接:http://hi.baidu.com/wzt85/blog/item/eb8546f2a64e7616b17ec548.html
阅读全文
摘要:无聊,逛博客(http://hi.baidu.com/wordexp/blog/item/f33479433a1bad1873f05d99.html)的时候发现一串有技巧的字符串:000102030405060708090A0B0C0D0E0F00:526172211A0700CF907300000D00000010:0000000077B77420902B00BA0000003820:010000024FDBC8236865393C1D33060030:2000000043432E45584500F010A9670840:150D10BE0D66F3DA083C2BF0286D0DC95..
阅读全文
摘要:下载地址解密链接:http://md5.mmkey.com/base64/base64解析:http://baike.baidu.com/view/469071.htmbase64详解:http://wenku.baidu.com/view/cfddd54733687e21af45a997.html各大下载软件下载地址详细分析:http://www.mmkey.com/html/wangluokeji/wanzhuanwangluo/2009/0908/26655.html迅雷,快车,旋风下载地址加密和解密分析1、普通地址转换为迅雷地址 在原地址前面加"AA",后面加&qu
阅读全文
摘要:P2P检测技术:1.端口检测技术2.协议识别技术 基于RFC标准的协议分析技术 基于逆向工程的协议分析技术 基于模式匹配的特征检测技术 基于关联分析的统计监测技术端口检测可以逐包进行,模式匹配可以逐流进行,而基于关联分析的统计检测技术是更为复杂的技术。一般来说,对单个会话的特征检测就能够识别一些传统的P2P应用协议,但越来越多的P2P应用采取协议加密、协议模糊等规避监管的技术,简单的数据分析已无法准确识别新型P2P应用,需要在IP碎片重组、TCP会话跟踪、TCP流汇聚的基础上,通过单包模式匹配、单会话多包关联分析、多会话关联分析各种P2P应用的连接数、单IP的连接模式、上下行流量比例关系、数据
阅读全文