2007年4月7日星期六
2007年4月3日星期二
Bufbomb可爱的缓冲区溢出
多的时间里,我经常遇到每一个前辈都犯过的错误--缓冲区溢出。每一次溢出都
是不同的,调试也是苦难的,数不清的BUG潜伏在我的程序里,我无能为力。。。
可是今天,缓冲区溢出成了我的任务@_@。CS:APP
<http://csapp.cs.cmu.edu/>的第三章的课后题3.38,给了我一个机会,第一次去
尝试有意的缓冲区溢出,全新的挑战啊!
getbuf的代码摘要如下:
int getbuf()
{
char buf[12];
getxs(buf);
return 1;
}
:-) objdump -d a.out
080484ae <getbuf>:
80484ae: 55 push %ebp
80484af: 89 e5 mov %esp,%ebp
80484b1: 83 ec 18 sub $0x18,%esp
80484b4: 8d 45 f4 lea 0xfffffff4(%ebp),%eax
80484b7: 89 04 24 mov %eax,(%esp)
80484ba: e8 25 ff ff ff call 80483e4 <getxs>
80484bf: b8 01 00 00 00 mov $0x1,%eax
80484c4: c9 leave
80484c5: c3 ret
分析getbuf的栈帧结构:
返回地址.1
%ebp.1
%eax ;buf首地址
返回地址.2
%ebp.2
可以看到,我们的输入必须在%eax往上(地址增加)的栈上,我们的功能代码应该是
*mov $0xdeadbeef, %eax*
*push $ip(返回地址1)*
* ret
最后为了保护%ebp.1和跳转到%eax执行代码
我们的输入应该是这样的形式
功能代码的机器码 00(填充12字节的剩余部分) %ebp %eax的地址
*
2007年3月30日星期五
四月是收获的季节?
This April,I will go back to my study after three years ago I left .I will do my best so that the next April will be a harvest season for me!I believe...
God bless me!
Amen 阿弥陀佛 安拉赞美我
@_@...
2007年3月28日星期三
本欲乘风归去
身边有好多的同学都在使用;我寒假前注册了一个帐号,发了一个短文,在网站里
里外外逛了一大圈,确实不错:功能很多,给我们用户的权限也很大,使着确实挺
爽。唯一的难处,太难折腾了,有些麻烦。说来很奇怪,我不怕折腾,但是偏偏不
喜欢网络上的折腾:我是个急性子,懒得等。。。放假回来以后,就没有怎么去
看;今天突然想起来了,一去看,OMG,居然有19个回复,我高兴坏了,心想这人
气真NB啊!一点击,我崩溃了,基本都是广告,多数还是国外的,郁闷。。。
我不想折腾密码啥的,还是回来用blogger吧,慢点儿我也忍了。另外一个blog不打算用了,
id实在是难听,我自己怎 么能想这么个名字呢?纳闷儿。。。
2006年12月31日星期日
ibmtc小结
这个上半年过得很快,以至于我都没有什么印象,它就过去了。大概回忆一下,这个上半年我一直在做科技创新的前期调查论证工作,科技创新工作也是我这一年工作的重点,至少时间上的安排是这样的。上半年的工作感觉没有太多的内容,至少没有太多看得见摸得着的东西,也许就只有那为数不多的分析报告吧。不过,也算体验了这么一个研究的过程吧,感觉还是有一些收获的。7-8月那一个半月的开发阶段倒是给我留下了深刻的印象,从来没有在这么长的一段时间,集中精力地做那么一件时间,连续不受打扰的,感觉特别棒,而且对于php的使用也达到一个入门的水平,感觉还行。不过那一段的艰苦也是很特别的。科技创新的答辩令大家失望了,我很遗憾,没有得到满意的结果。
科技创新的工作完成后,我参与到Linux Framebuffer小组的工作中来。客观的说,这一段的工作对于我技术上的帮助应该是远远大于科技创新活动的。通过阅读源码,明白了Linux的部分机理,对于使用Linux接近一年的我来说,我觉得是特别必要的。不过阅读代码的工作也是很艰苦的,对此我们都深有体会。
总的说来,我是比较喜欢这后边三个月的工作的,感觉在这三个月里边,技术上的东西接触的比较多,而在上半年,大多数时候都在接触一些概念性的东西,在技术的积累上没有严格要求自己,没有学习到太多的东西,比较可惜,再想到上半年比较空闲的日子,真是在浪费生命啊!
纵观过去一年,我在实验室待的时间比较长,即使不是最长的,也是最长的那么几个之一。不过个人感觉,自己进步的程度没有其他同学高,个人分析,主要是不能潜心研究,总是三心二意,容易被外界干扰。这是我学习过程中遇到的最重要的非技术问题,我想应该想办法了结它了,再也不能看会儿书就灌bbs了。。。
2006年12月23日星期六
令人郁闷的马哲
哎,还是想想明天考试完了做什么吧。对了,tty_io.c的代码看得差不多了,该写个报告什么的了,然后做个ppt,星期二给实验室的伙计们讲一下,听听大家的意见。还有接口技术的作业没有做,身份证没有办,这些琐事怎么就这么多呢?
2006年12月20日星期三
TTY的read从何而来?(beta)
2006年12月18日星期一
A tool for call graphs--Egypt
Egypt is a simple tool for creating call graphs of C programs.
egypt [--omit function,function,...] [--include-external]
egypt [--omit function,function,...] [--include-external]
omit
Omit the given functions from the call graph. Multiple function names may be given separated by commas.
include-external
Include calls to external functions in the call graph. A function is considered external if it is not defined in any of the input files. For example, functions in the standard C library are external. By default, such calls are not shown. Even with this option, only direct calls will be shown; there is no way to show indirect calls to external functions.
Generating the RTL file
make clean
make CFLAGS=-dr
Viewing the CALL GRAPH
egypt foo.c.00.rtl | dotty -
优点和缺点:使用gcc分析source code,使用 dotty生成图像,使用简单;但是必须要生成相应的rtf文件,对于很大的工程,也许相当麻烦。
2006年12月17日星期日
tty_open和init_dev流程分析
- 根据目标设备文件节点inode->i_rdev(device)初始化局部变量 struct tty_driver* driver; int noctty;
- init_dev函数初始化设备
- 建立从当前进程到目标设备的连接 flip->private_data=tty; 同时,把指向此设备的file结构挂入tty_struct结构中的队列tty_files file_move(flip,&tty->tty_files);
- 通过函数指针调用与链路规则相关的open操作
- 修改当前进程current 和 tty 相关信息
init_dev大致流程:
- check wherher we're reopening an exiting tty
- 否,alloc_tty_struct() 分配空间
- 数据结构初始化 initialize_tty_struct(tty);
- 若想打开pty,则还需要建立o_tty(从设备),初始化之并建立主从设备之间的相互连接
- 在建立好设备以后,还需要设置若干termios结构,不太明白怎么回事(termios在某种程度上可以看作ldisc的补充,定义对字符的处理和波特率,不过这儿初始化的时候太多的判断了,不太清楚)
- 使用相应的链路规则open tty和o_tty(假如存在的话)
- 最后是一些错误处理的代码(不在流程里了)