- 博客(18)
- 资源 (14)
- 收藏
- 关注
原创 ldd查看依赖关系
<br />通过readelf 或者objdump可以查看某一个可执行文件所依赖的共享库,而且这些共享库都是作为SONAME记录在ELF动态节的NEEDED上。<br />首先,我们看一下名词soname:<br />在linux上共享库都是以文件的形式来存放,而每一个共享库都被赋予了一个特别的名称,linux称之为soname。它包括了共享库的名称和版本号.然而这个soname只是一个软连接,它指向的文件才是真正的库文件。例如/lib/libc.so.6就是一个soname,它指向了 libc-2.10.
2010-09-29 00:50:00 7026 1
原创 用od转储二进制文件
od就是octal dump的意思,缺省情况下用八进制输出二进制文件zecho@zecho-laptop:~$ od /etc/ld.so.cache | head -50000000 062154 071456 026557 027061 027067 000060 001650 0000000000020 000003 000000 055470 000000 055507 000000 000003 0000000000040 055537 000000 055551 000000 000
2010-09-28 00:43:00 1758 1
原创 内核模块
模块的作用不多说,它消除了宏内核的限制,通过使用模块可以预先编译大量的驱动程序,不会使内核膨胀。同时也可以使试验性的代码打包到模块中。 初始化和清理函数 模块的初始化函数和清理函数,保存在.gnu.linkonce.module段中的module实中。根据.gnu.linkonce.module段,内核来判断二进制文件是否为模块。定义如下: struct module __this_module __attribute__((section(".gnu.lin
2010-09-25 00:49:00 847
原创 指针和数组的效率对比
我们知道指针表达式和下标表达式是等价的,比如: array[10] = 10; *(array + 10) = 10; 或者有时候我们这样写: 2[array] 但因为它表示成指针表达式为*(2 + array) ,所以这种古怪的写法和array[2]是相等的。 那么你应该用哪一个呢? 很多人会选择下标表示,我想他们更多是考虑下标的可读性和容易理解,但如果从性能上讲的话,这个选择可能会影响运行时的效率。 我们来做个实验: 1 #incl
2010-08-30 01:16:00 1300
原创 ubuntu--qemu调试linux内核环境搭建
<br />下载qemu源码:http://wiki.qemu.org/Download<br />我下的是qemu-0.12.4.tar.gz<br /> <br /> <br />zecho@zecho-laptop:~$ tar zxvf qemu-0.12.4.tar.gzzecho@zecho-laptop:~$ cd qemu-0.12.4 <br /> <br /> <br />需要在configure之前安装几个组件<br />zecho@zecho-laptop:~$ sudo
2010-06-13 12:37:00 4211
原创 永久地址映射
首先要看几个重要的数据结构和概念: #ifdef CONFIG_X86_PAE#define LAST_PKMAP 512#else#define LAST_PKMAP 1024 #define LAST_PKMAP_MASK (LAST_PKMAP - 1)#endif定义了永久地址映射的,页表的数量,从这里我们也可以知道,
2010-05-19 21:49:00 7527
原创 临时地址映射
如有问题,欢迎一起讨论:-) 临时地址映射了建立了compile-time特殊的虚地址,分配的虚地址是从0xfffff000向后使用 和永久地址映射不同,它可以在中断或可延迟的上下文中使用而不会睡眠,在高端内存任一页框都可以通过窗口映射到次内核地址空间 首先看一些重要的数据结构和宏定义#define __FIXADDR_TOP 0xfffff000
2010-05-19 21:47:00 821
原创 伙伴系统算法
如有问题,欢迎一起讨论:-) struct free_area{ struct list_head free_list; /*用于连接某一大小的空闲页框*/ unsigned long *map; /*涉及到上面大小的位图,每两个的对象之间共享一位*/};static struct page *__rmqueue(struct zone *
2010-05-18 00:08:00 4445
原创 bootmem
如有问题,欢迎一起讨论:-) 为了对页面管理机制作初步准备,Linux使用了一种叫bootmem分配器的机制,它仅仅用在系统引导时,为整个物理内存建立一个页面位图,位图建立开始于start_pfn,即内核映像终点_end,结束是max_low_pfn,主要用来管理0-896MB的范围。目的:在这个范围有的页面可能保留,有些页面可能是空洞,要搞清楚哪些物理页面是可以动态分配的。
2010-05-16 18:00:00 1046
原创 内联汇编
偶尔想看一下memcpy的源码,发现在linux里它是用内联汇编写的,所以就学了下,以前看linux源码时也曾碰到过很多内联汇编,但一直没有总结它的语法和使用,现在分析下,如有什么问题,欢迎留言讨论:-) 它的基本格式是: asm("assembly code"); 1、汇编指令必须在括号的引号里 2、如果有多条汇编指令,则需要用换号
2010-03-27 20:30:00 998
原创 数据类型另思
C语言中包括了丰富的数据类型,包括了声明中显式定义的类型和用做表达式中间类型的导出类型。例如: int *p, x; *p = x; 从这里我们可以知道x的地址类型(它的左值)是一个指向整数的指针。x值的类型(它的右值)是一个整数。 C语言的类型其实可以用前缀形式表示,什么是前缀形式呢,看下面的例子: 我们用一个表达式: a
2010-03-21 01:12:00 453
原创 Unsigned or Signed
C语言允许整数直接进行比较,对于有符合数之间进行,则会扩展小一些类型的数;对于整数之间的一个顺序是:long long > long > int > short > char; 同样的,如果是无符号数之间的运算,则会扩展小一些类型的无符号数,这种扩展也被称为0扩展(Zero extend),但如果是有符合数和无符号之间呢,则规则就有些不确定。 unsigned int
2010-03-20 18:55:00 417
原创 Perl引用简单使用
#!/usr/bin/perlmy @all_with_name;sub initialize_provisions_list{ my @skipper = qw(bule_shirt hat jacket preserver sunscreen); my @skipper_with_name = (The Skipper, /@skipper);
2010-03-19 23:47:00 684
翻译 CHAPTER 5 References and Scoping
我们可以像标量那样复制和传递引用。而且在任何时候,Perl都知道引用数据的数量。Perl也可以创建对匿名数据结构的引用(这种数据结构没有显式的名字)而且可以为了满足特定操作而创建引用。 数据的多个引用 在Chapter4已经探究了对数组的引用和把这种引用放到一个新的标量上 my @skipper = qw(blue_shirt
2010-03-18 23:01:00 592
原创 存储管理
今天我们看一下lcc的存储管理,在我们写的一些复杂的程序中,都需要用到动态内存的分配,即使用malloc,但我们都知道使用malloc就需要显式的使用free来释放掉。问题是有很多程序员会忘记释放空间,造成内存泄漏。 lcc在管理内存的思想是统一释放,这主要是来自于我们常遇到的窗口,就是在你关闭窗口时,所分配的按钮,滚动条等都释放了。 lcc主要是使用
2010-03-12 00:44:00 556
翻译 CHAPTER 3 Using Modules
模块是为我们的程序建立好的块.它提供了子程序,变量和面向对象的类的重用。这一节,我们既能显示了如何建立自己的模块,有能看到如何使用别人已经写好的模块. 标准模块发布 Perl已经自带了很多模块.事实上,最近发布的版本中有50+MB都是模块.1996年10月,Perl 5.003_07有98个模块.今天,也就是2006年初,Perl 5.8.8有了359个.这
2010-03-01 22:30:00 764
翻译 CHAPTER2 Intermediate Foundations
在我们开始享受这本书之前,我想介绍一些中级层次的Perl习惯用语,这些用语也将会贯穿整本书。而且它们是Perl程序员初学和进阶的分水岭。 列表操作符 你可能已经知道Perl中的几个列表操作符,但是你可能还没考虑过它们在列表中所发挥的作用。最常见的列表操作符或许就是print。我们提供给一个或多个参数,它将会把它们结合在一起. print Two
2010-02-26 21:48:00 795
翻译 Intermediate Perl 翻译
Intermediate Perl一直都没有看到中文版, 在看完Learning Perl后,想去试着翻译一下Intermediate Perl,当然因为对Perl的理解还没有达到一定程度,也是觉得对其有点儿感兴趣,才决定好好去学学,如果翻译的有什么问题,非常欢迎各位Perl高手们批评指点。 Intermediate Perl 提供了对Perl中级编程的介绍,是由畅销书
2010-02-26 21:33:00 1778
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人