- 博客(65)
- 资源 (37)
- 收藏
- 关注
转载 Linux Kernel 2.6进程调度的分析(揭示了几乎所有2.6调度的东西)
第一章 Kernel 2.4存在的不足根据对2.4进程调度的分析,我们总结出看出2.4内核总的特点就是: 内核调度简单有效 内核不可抢占但是经过对2.4内核的分析,我们也明显看到了它的缺点:1.调度算法复杂度是O(n),与系统负荷关系较大。而且调度算法在设计上也有缺陷,比如:(1) 2.4进程调度只设置了一个进程就绪队列,这样有的进程
2009-12-24 16:50:00 1999
转载 软中断
软中断一般是指由指令int引起的“伪”中断动作——给CPU制造一个中断的假象;而硬中断则是实实在在由8259的连线触发的中断。因此,严格的讲,int与IRQ毫无关系,但二者均与中断向量有关系。int引起的中断,CPU是从指令中取得中断向量号;而IRQ引起的中断,CPU必须从数据线上取回中断号(硬件引发中断首先加到8259的某个IRQ引脚上,8259根据定义好的规则换算出相应的中断向量号,将其放在数
2009-12-30 20:51:00 3670 3
转载 转:Before main() 分析(gdb的使用)
main()的堆栈内容演示。===========================================================预备知识:1. 常用命令(gdb) b * 0x80483d8 # 在地址处设置断点(gdb) b main # 在标号处设置断点(gdb) disass 0x80483d8 # 反汇编(gd
2009-12-28 20:40:00 672
转载 获取Linux 2.6.x sys_call_table
在linux中所有的syscall都是调用int 0x80, int 0x80的中断服务程序为system_call(arch/x86/kernel/traps_32.c:set_system_gate(SYSCALL_VECTOR,&system_call). system_call (arch/x86/entry_32.S)最终call *sys_call_table(,%eax,4)来
2009-12-26 17:01:00 427
转载 实现Linux系统调用劫持
关于系统调用劫持如果一个木马要隐藏起来,不被系统管理员发现。截获系统调用似乎是必须的。大部分情况下,通过修改系统调用表来实现系统调用的劫持。下面是一个典型的截获系统调用的模块:模块一:#include #include #include #include #include #include #include #include #include MODULE_LICENSE("GPL");exter
2009-12-26 16:57:00 1100 3
转载 Linux2.6内核中劫持系统调用隐藏进程
网上很多类似的文章,其中很多示例程序都是在比较老的内核版本上测试过,很多在新的内核下根本无法运行,我收集了一些相关的资料,并给出一个在linux内核2.6.28(ubuntu9.04)上可以运行的程序代码.相比其他一些文章,修改如下:1.增加了两个函数,清CR0的第20位,不然在替换sys_call_table的时候会报段错误.unsigned int clear_and_return_cr0(v
2009-12-26 16:56:00 451
转载 2.6内核系统调用劫持段错误segment fault等问题的解决方法
在网上搜了很多关于2.6内核系统调用劫持的文章,流传的最多的可能就是那个以mkdir系统调用为例子的文章,自己按照源码敲进去,写好Makefile后也编译通过了,但是加载时却出现了Segment fault的错误,后来调试了一下,发现sys_call_table找得不对,后面却用了返回的一个非法地址,结果出现访问错误。看来这个segment fault是由于非法访问内存引起的,添加了返回值判断后,
2009-12-26 16:55:00 513
转载 (转)在Linux2.6内核下实现进程隐藏
很早以前的小程序,比较简单但是觉得有趣原理很简单,Linux查看进程的命令ps是通过系统调用sys_getdents实现,sys_getdents用户获取一个指定路径下的目录条目,实际上就是枚举/proc/ 下的pid,这样我们只需要hook一下sys_getdents,把相应的要隐藏的pid信息去掉即可。以下是LKM代码,在Linux-2.6.14测试并运行成功 #include
2009-12-26 16:28:00 398
转载 sys_call_table undefined 及 如何替换系统调用
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://chenm.blogbus.com/logs/52077181.html2.4的内核中可以通过修改sys_call_table来很轻松的替换系统调用,来完成很多trick,很多的rootkit就是基于这种手法来完成的。到了2.6的内核,事情就不是这么回事了,sys_call_table不再被export出来了,这样的
2009-12-26 12:01:00 1047
转载 函数ERR_PTR,PTR_ERR还有IS_ERR理解
ERR_PTR()和PTR_ERR()都是很简单的类型转换,没有什么可说的。 IS_ERR()有一些妙处。 内核中的函数常常返回指针,问题是如果出错,也希望能够通过返回的指针体现出来。 所幸的是,内核返回的指针一般是指向页面的边界(4K边界),即ptr & 0xfff == 0这样ptr的值不可能落在(0xfffff000,0xffffffff)之间, 而一般内核的出错代码也是一个小负数,
2009-12-26 10:23:00 541
转载 如何在linux/unix中设置线程的优先级
如何在linux/unix中设置线程的优先级int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);来创建线程,但是如何设置线程的优先级呢?在讨论这个问题的时候,我们先要确定当前线程使用的调度策略,posix提供了i
2009-12-25 16:57:00 312
转载 操作系统多级页表计算问题
某计算机有64位虚地址空间,页大小是2048B.每个页表项长为4B。因为所有页表都必须包含在一页中,故使用多级页表,问一共需要多少级? 最佳答案2048B=2^11 64-11=53(地址中扣除页内地址位数) 共有2^53页一页中可以装2048/4=2^9个页表项9*6>53 至少需要6级页表
2009-12-24 18:27:00 3980 3
转载 need_sched 一些讨论
我想写一个简单的设备驱动, 但对驱动模块的可重入方面不甚了解.有的书说驱动模块不会被中断, 除非主动地调用schedule()(或是隐式地调用, 如vmalloc()); 有的书则说即使schedule()被调用, 它也不会去作进程切换, 因为schedule()不对内核态进程切换.不知谁对? 望高人指点一二. 谢谢
2009-12-24 12:48:00 391
转载 (转)need_resched 是怎么使用的(ZT)
终于在《情景》&think hard地情况下,想明白了! 一 系统调用do_fork() 1 当前进程调用fork()创建子进程,进入kernel 2 当前进程分一半多时间片给子进程, 3 如果当前进程时间片剩余为0,设定当前进程need_sched=1, 4 从系统调用退出 5 到达ret_from_sys_call 6 到达ret_with_reschedule
2009-12-24 12:24:00 1116 1
转载 (转)ELF文件格式 程序加载 执行 图示 OBJDUMP
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE
2009-12-24 10:57:00 589
转载 linux下的16进制查看工具
od,在其他UNIX系统上也比较常见; hexdump/hd,是用来替代od的,可以自定义输出格式; 在vi的命令状态下:%!xxd ——将当前文本转换为16进制格式。:%!xxd -r ——将当前文件转换回文本格式。
2009-12-24 09:54:00 841
转载 echo 1 > /proc/sys/net/ipv4/ip_forward
如果内核支持ip转发 这个命令就相当激活了ip转发功能 类似路由。就上让内核做路由。
2009-12-23 21:50:00 1894
转载 2.4.18和2.6.25.4-rt在任务调度上的不同
http://www.linuxforum.net/forum/showflat.php?Cat=&Board=linuxK&Number=693202&page=&view=&sb=&o=&vc=12.4.18和2.6.25.4-rt在任务调度上的不同检查点:A) 返回用户空间/返回内核空间:----2.4 :只在返回user space的时候才会检查任务是否
2009-12-23 17:53:00 349
转载 linux 进程调度
v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);} Normal 0 false 7.8 磅
2009-12-23 15:32:00 419
转载 Linux进程管理之CFS调度器分析
------------------------------------------ 本文系本站原创,欢迎转载! 转载请注明出处:http://ericxiao.cublog.cn/ ------------------------------------------ 一:前言 CFS调度在2.6.23版本的kernel中被加入.引用Ingo Molnar的一句话:80%的设计
2009-12-23 15:29:00 991
转载 Linux 实时技术与典型实现分析
http://www.ibm.com/developerworks/cn/linux/l-lrt/part1/http://www.ibm.com/developerworks/cn/linux/l-lrt/part2/
2009-12-22 20:11:00 234
转载 ELF 文件数据分析: 全局变量(objdump 如何查找一个变量,并把它变成可阅读的)
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE
2009-12-22 14:16:00 2269
转载 crontab 的格式备忘
经常用,但是经常忘记,基本的格式能记得,但是详细的或者复杂点的格式总会忘记或者拿不准,不知道是不是年纪大了记忆力下降,干脆整理出来今后方便查看。基本格式 :* * * * * command分 时 日 月 周 命令第1列表示分钟1~59 每分钟用*或者 */1表示第2列表示小时1~23(0表示0点)第3列表示日期1~31第4列表示月份1~12第5列标识号星
2009-12-22 11:12:00 686
转载 objdump
每个“可加载的”或“可分配的”输出section通常包含两个地址: VMA(virtual memory address虚拟内存地址或程序地址空间地址)和LMA(load memory address加载内存地址或进程地址空间地址). 通常VMA和LMA是相同的. 在目标文件中, loadable或allocatable的输出section有两种地址: VMA(virtual Memory Add
2009-12-21 21:18:00 407
转载 浅析get_fs()和set_fs()设置user用户空间所能访问的最大虚拟地址
static inline mm_segment_t snd_enter_user(void){在linux内核中操作文件的方法--使用get_fs()和set_fs(KERNEL_DS)// get_fs()和set_fs()位于include/asm-generic/uaccess.h mm_segment_t fs = get_fs(); // 获取
2009-12-21 18:25:00 480
转载 在linux内核中操作文件的方法--使用get_fs()和set_fs(KERNEL_DS)(调用系统调用,可以访问用户空间)
#include #include #include #include #include #include #include #include #include #define MY_FILE "LogFile"//#define MY_FILE "/root/LogFile"asmlinkage long sys_open(const ch
2009-12-21 18:10:00 1619
转载 内核模块编程能否使用系统调用?如何使用?(未验证)
我给你一段代码,我用过的 static inline _syscall3(int,read,int,fd,char *,buf,off_t,count) static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count) void hehe(void *m,
2009-12-21 17:22:00 350
原创 如何实现当在vim中输入到80个字符时自动断行(vimrc模板)
在 ~/.vimrc 中加入以下几行:set columns=80set tw=80set fo+=Mm附,我的~/.vimrc文件:$ cp /usr/share/vim/vim64/vimrc_example.vim ~加上这几行:set nuset nobackupset shiftwidth=4set tabstop=4set columns=87set tw=80set fo+=Mmse
2009-12-20 18:57:00 585
转载 在 kernel中如何定时, 变量 HZ 和 jiffies
HZ 定义了时钟中断的频率,即每秒钟时钟中断的次数jiffies 记录了自启动后,时钟中断发生的次数例如:unsigned long timeout = jiffies + (3*HZ) ; while (hwgroup->busy) { /* ... */ if (time_after(jiffies, timeout) ) { retur
2009-12-20 18:31:00 429
转载 linux 2.6.23时钟中断与调度分析(4)
TIMER_INITIALIZER():1):TIMER_INITIALIZER()用来声明一个定时器,它的定义如下:#define TIMER_INITIALIZER(_function, _expires, _data) { / .function = (_function), /
2009-12-20 14:41:00 1216 1
转载 内核定时器的使用(好几个例子add_timer)
LINUX内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于 和 kernel/timer.c 文件中。被调度的函数肯定是异步执行的,它类似于一种“软件中断”,而且是处于非进程的上下文中,所以调度函数必须遵守以下规则:1) 没有 current 指针、不允许访问用户空间。因为没有进程上下文,相关代码和被中断的进程没有任何联系。2) 不
2009-12-20 14:26:00 3822
转载 复杂一点的add_timer
总的来说,timer的用法还是很简单的。主要需要定义一个timer_list变量timer、先初始化timer init_timer(&timer); then 对timer的相关参数赋值: timer.function = fun; timer.expires = jiffies + TIMER_DELAY; add_timer(&timer); 在定时器时间到的时候,会
2009-12-20 14:22:00 2908
转载 fcntl函数(作用就是改变文件描述符的属性struct file)
该函数可以改变已打开的文件的性质。 #include fcntl.h> int fcntl(int fields, int cmd, /**//* int arg */); //若成功则依赖于cmd,若出错则返回-1 第三个参数总是一个整数,与上面所示函数原型中的注释部分相对应。但是在作为记录锁用时,第三个参数则是指向一个结构的指针。 fcntl函数有5种功
2009-12-20 09:52:00 868
转载 (转载) 使用 Linux 系统调用的内核命令, 探究 SCI(systen call interface) 并添加自己的调用.
URL;http://www.ibm.com/developerworks/cn/linux/l-system-calls/index.html使用 Linux 系统调用的内核命令探究 SCI 并添加自己的调用 文档选项 将此页作为电子邮件发送 将此页作为电子邮件发送 级别: 中级M. Tim Jones (mtj@mtjones.com), 顾问工程师, Emule
2009-12-19 21:07:00 488
转载 fasync(在内核发生某个事情时向应用发信号, 应用需要把那个设备用fcntl改一下。)
fasync的解释 fasync(fd,file,on) 当我们呼叫fcntl()系统呼叫,并使用F_SETFL命令来设定档案的参数时,VFS就会呼叫fasync()这个函式,而当读写档案的动作完成时,行程会收到SIGIO的讯息。==========================================================================
2009-12-19 18:20:00 2076 1
转载 简单配置samba(share模式可用,user模式未验证)
第一种,share级别,共享/home/usr/sharevi /etc/smb.conf[global]段中改security = share后,加一个共享段[share]path=/home/user/sharepublic=yesbrowseable=yesnetconf 设置主机名hostname 设置主机名service smb restart即可。 notes:配置成/home
2009-12-19 10:21:00 2003
转载 2.6内核Makefile简单语法与应用
1.1 概述2.6的Makefile的写法和应用相对于2.4有了一些变化,可能对于很多人来说,因为找不到相关的文档,都是模仿内核中已有的文件来写自己的Makefile。其实,在内核的Documentation /kbuild目录下面,还是有对内核Makefile语法的详细说明的。在这里就2.6内核中Makefile最常见的简单应用情况做一个翻译和归纳介绍。2.6内核
2009-12-17 16:33:00 225
转载 两个编译2.4与2.6内核模块的Makefile 模板(支持交叉编译)
Makefile for linux 2.4 kernelTARGET := modulenameINCLUDE := -I/opt/celinux-040503/includeCFLAGS := -O2 -Wall -DMODULE -D__KERNEL__ -DLINUXCC := arm-926ejs-linux-gc
2009-12-17 14:39:00 464
转载 kernel panic Call Tree 分析方法
> google了一下,感觉网上相关的信息都很少> 很多都是2.4内核的了> panic后屏幕出现的信息包含寄存器和stack的内容还有call trace> call trace中函数名后出现的地址信息代表什么,怎么使用呢?> 谢谢> 例如> [] balloon_process+0x5c/0xba [xen_balloon]
2009-12-17 11:06:00 1849
转载 如何在程序内部获得call back trace(应用程序calltrace)
在Linux的C语言程序中,如何得到目前程序运行的堆栈轨迹,类似于java里面的printStackTrace(),目的是用于调试。 我之前使用过一种笨方法就是设一个全局链表,每次进入一个functino就将名称加入链表,退出在del掉,因为使用宏和Linux的list_head结构,其实效率损失的不是太多(当然仅用于调试时了)。但是这方法实在有点太低级了,羞于见人阿。
2009-12-17 10:33:00 1288
Intel 64 and IA-32 Architectures ,Software Developer's Manual
2007-07-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人