上一页 1 ··· 12 13 14 15 16
摘要: 宏全部使用大写字母--------宏大写结构体名字全部使用typedef,typedef之后的名字为大写-------结构体别名大写函数名全部使用小写字母,单词之间使用下划线分割-------函数名小写,单词之间下划线(1)函数名第一个单词全小写,后面单词的首字母大写,单词之间使用下划线---------函数名首单词小写,后面单词首字母大写(2)变量名也是全部使用小写,单词之间使用下划线分割-------变量名小写,单词之间下划线(1)变量名第一个单词全小写,后面单词的首字母大写,单词之间使用下划线---------变量名单词小写,后面单词首字母大写(2)变量的命名前后缀规则如下(这是匈牙利命 阅读全文
posted @ 2011-09-07 23:49 Jack204 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 最近在写操作系统的时候,学习了作者的C代码中头文件的布置风格,记录于此。可以有一个文件专门存放全局变量(也有可能是一类文件),然后对全局变量的头文件声明,使用extern关键字。普通c文件对应的头文件.h中,主要存放结构体和宏。(能定义成宏的尽量到相应的头文件中定义成宏,这有利于代码的可读性。注意头文件中要使用#ifndef等的预处理命令,防止重复定义。)而c文件中存放一些私有函数和公有函数。这样的话,将一些属于一大类的函数声明放到同一个头文件中。有一个文件专门存放typedef。有一些零碎的宏,可以使用一个比如名叫const.h来集中存放。如果在头文件中的声明、宏、结构体等等引用到了其他头文 阅读全文
posted @ 2011-09-07 21:37 Jack204 阅读(338) 评论(0) 推荐(0) 编辑
摘要: [仅供自己参考]1 第一个进程的书写思路:前提:申请好相应gdt,idt,tss的内存(可用C写),并进行必要的初始化。申请好proc_table的内存,proc_table包涵了stack_frame(进程切换时候用于存放cpu状态的地方)和ldt表(这个进程对应的ldt)和 ldt_sel(GDT表中的selector)。对proc_table进行必要的初始化(这个进程第一次运行之前当然得初始化我们希望进程开始时候的cpu状态)调入一个叫restart的函数,它做得主要工作是:将此进程的ldt赋值为p_proc_ready的ldt_sel.将tss中的esp赋值为自己的proc_table 阅读全文
posted @ 2011-09-06 22:13 Jack204 阅读(419) 评论(0) 推荐(0) 编辑
摘要: One of the "big picture" issues in looking at compiled C code is thefunction-calling conventions. These are the methods that a callingfunction and a called function agree on how parameters and return valuesshould be passed between them, and how the stack is used by the functionitself. The 阅读全文
posted @ 2011-09-06 11:21 Jack204 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 1 首先要说明的是 “一致代码段和非一致代码段” 的概念。“一致”的意思是这样的:当转移的目标是一个特权级更高的一致代码段(CPL<=DPL,RPL<=DPL(级别的高低,不是数字的大小)),当前的特权级会被延续下去,CPL不变。而向特权级更高的非一致代码段的转移会引起常规保护错误。说明:代码段是否为一致代码段的属性是在规定GDT表的Descriptor的属性选项规定的。数据段都是非一致的。利用call和jmp总结:向非一致代码段访问,只能访问同一特权级别的,要真想访问其他级别的,使用调用门和retd。向一致代码段访问,只能Low->High or Same Privileg 阅读全文
posted @ 2011-09-04 20:54 Jack204 阅读(1179) 评论(0) 推荐(0) 编辑
摘要: 将多个.o文件链接成可执行文件的时候。如果链接的顺序不对,会产生错误。《An introduction of gcc》里面有下面一段话:On Unix-like systems, the traditional behavior of compilers and linkersis to search for external functions from left to right in the object filesspecified on the command line. This means that the object file whichcontains the defini 阅读全文
posted @ 2011-09-03 14:44 Jack204 阅读(817) 评论(0) 推荐(0) 编辑
摘要: 今天在写kernel的时候碰见这么一个错误,undefined reference to `__stack_chk_fail'出现错误的地方是在 void disp_Int(int num)调用了,void itoa(char* str, int num).如果不想使用gcc的堆栈溢出保护可以使用:CFLAGS add -fno-stack-protector when compile下面是添加保护的代码: What is it? The GCC SSP protects the stack from buffer overflows. If a buffer overflow occ 阅读全文
posted @ 2011-09-03 10:24 Jack204 阅读(3009) 评论(0) 推荐(0) 编辑
摘要: [红字之间部分---对我自己的指引]最重要的最具启发性的部分:指针和数组。对经典话语的摘抄在此:对于数组int a[5]; int b[3][6];a是个const的type为array of 5 ints变量,&a为取出array of 5 ints的首地址,但a的值在C中规定是数组首地址,不要乱联系。&a在进行运算的时候取出的是类型array of ints的首地址,所以类型是pointer of array of ints.a在进行运算的时候取出的是类型int的首地址,所以类型是pointer of int.*p-----第一步取出存在p中地址,判断存在p中的当前的地址是 阅读全文
posted @ 2011-09-02 23:39 Jack204 阅读(446) 评论(0) 推荐(0) 编辑
摘要: 1 进行多行替换前首先要决定在哪几行替换?先选定多行,再按':',则默认命令是在选中的行进行操作。比如先‘v’进入visual模式,选定这几行。然后按‘:’进入命令模式,再象下面说的打上要进行的替换操作,点击‘RET’。先点击‘:’,进入命令模式再手动写需要操作哪几行。比如:1,4---代表对1到4行进行替换。4,$----代表对4到行尾进行替换。2 如何进行替换?基本命令形式:range s/.../.../g -----其中‘...’代表省略号。高级的用法需要学习Linux里面的正则表达式。下面说几种比较特殊常用的形式:替换行首:s/^/.../g ---------在行首 阅读全文
posted @ 2011-09-02 16:20 Jack204 阅读(7055) 评论(0) 推荐(0) 编辑
上一页 1 ··· 12 13 14 15 16