Archive for December, 2005

2005盘点

Saturday, December 31st, 2005

本来我每年的年终总结都是放在春节时候的,因为那时候放假闲一些,不过今年改改,赫赫,
怕明天很多新功能和修改的东西上线,估计要熬夜了,今天先占个地,慢慢修改。

网络词典小工具.

Wednesday, December 28th, 2005

由于英语水平很差,我很喜欢dict.cn提供的在线词典服务,不过每次想查一个词都要开一次这个网站查一下很是不方便,于是突发其想,能不能搞个像金山词霸那样的屏幕取词然后自动反回在dict上结果的小程序呢。(为什么不装个金山词霸?首先是没安装程序,用盗版不是很爽,用免费版的很多词找不到或是解释过于简单。再说我的硬盘由于装了个fedora core基本没空间了,装个600M的字典很是不划算)
花了一小个晚上的时间解决了屏幕取词的功能,以及显示结果的停留时间的方式,基本上做到跟金山词霸相同的效果了,基本符合我的初期要求,本来还想再进一点优化及其它功能的,等忙完这一段时间再出发布版本,赫赫。(现在屏幕取词还有一点问题,等待解决.)
其间因为要处理dict.cn返回的html结果,最初用strpos,copy之类的函数,后来实在不爽,找到个正则表达式的库,感觉后来的解决方法和程序代码看起来非常舒服,真是越来越喜欢这东西了,最近晚上慢慢的在读:MasteringRegx
抓两个图(上面那个button1是没用的,原来想做成点一下把当前的词拿到google或是baidu搜索的,以后完成):

老虎机……

Monday, December 26th, 2005

最近实在是忙得不行,赶进度中….
周6晚上,平安夜吧,其实我没X’mas这个概念,不过实在是不想干活了,一个人又无聊,于是打了个车到兰州我唯一知道的华联百货游戏中心玩了一整个晚上的老虎机,从7:30一直玩到了第二天凌晨一点,其间所赢的得分达到了我的历史最高水平有2000多分,旁边的哥们一个达到了1万多一个8千多,当然还有更多的人一直输啦,不过现在的这个游戏机难度提高了不少,总共由原来的8个选择提高到了12个选择,使得一向自称”老虎机不败”的我总赢利后来也慢慢丢回去了,到后来还剩几百的时候,看时间已经一点多了,实在是累了,还听说不能退钱,只能换奖品(kao,还来这一套),看看那些垃圾奖品也没兴趣,于是疯狂了几把,全还给他们了,走人,吃晚饭去了。
赌是人的天性,不过我看到的每一个人,当他的赌本越积越大的时候他的自信心也越来越膨胀赌注也越下越大,而往往这样子到最后都会输个精光,所以赌也不能盲目的胡来,要用头脑思考。不过我也这样,所以总不能一直赢。
昨天看到http://oliver.swordi.com/archives/2005/12/eaeaeeblogginga.html 说福州东街口大洋百货,门口大大的圣诞树属于公益活动,原来也看那棵树两三年了吧,还真不知道”所有钱将会捐赠作为公益善款”,如果明年这时候在福州的话一定去挂一个。

节日快乐。

Friday, December 23rd, 2005

最近好多节日啊,冬至,在这边吃了饺子,听说不吃会掉耳朵的,赫赫,福建应该吃汤圆吧。。
圣诞, 不过一个人过啊,一个人住一个大房子,晚上还真有点怕怕的,千万别跟说我鬼故事啊。。
元旦,还是一个人过。。
在这里祝大家节日快乐啦。。。好久没发过卡片了。
最近真是太忙了,加班加班。。。要不偶就回不去了。。。
wei8080兄,给你的Mail收到没?赫赫,发了好久了。。。有空常联系。

浅淡C语言程序安全(一)

Wednesday, December 21st, 2005

一年半前写的东西,呵呵,随便翻出来的。——————-

今天终于把前几天那个Bug找出来了,找了好久,原来strncpy时多拷了两位,往栈的高位写了两个字节,结果刚好将一个关键变量的内容覆写了,晕….说到堆栈想起前段时间说的缓冲区溢出来,小议一下。说实话以下说的内容其实我自己也没做到,总觉自己老是在说什么这也不是那也不是的有些过意不去,特别是自己都没做到的时候。不过单纯从学习技术的角度上来看,简单的说说也是有必要的。
堆栈溢出非常的常见,比如往一个字符数组中写入一个大于定义长度的字符串时:char sCont[5];strcpy(sCont,”AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA”);就产生一次溢出,比较常见的结果是出现Segmentation fault错误。当这个函数局部变量较多的时候甚至没有出错提示,比如我开篇时说的就是这那情况。
下文在X86平台下以C语言为例进行说明。
先从基础说起.
一.堆栈:堆栈是一片连续的内存空间,是一种后进先出结构,其生长方向与内存的生长方向相反,内存由低位往高位生长,而堆栈由高位往低位生长。入栈操作push=ESP-4,出栈操作pop=ESP+4. 也就是说执行push eax;push ebx;序列后,eax的存放的地址比ebx的存放地址要小.这是堆栈溢出的理论依据。二.函数调用:执行一次函数调用时,将在堆栈中依次压入:参数(由右至左),返回地址,EBP,及可能有的局部变量,在函数执行结束后局部变量丢失,在函数返回的时候,弹出返回地址给EIP,以继续执行程序。
现在看看一下简单的溢出过程.
void OverflowTest(){char sCont[5];strcpy(sCont,”AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA”);}
调用OverflowTest时堆栈如下分配:–栈底(低位) —— 栈顶(高位)局部变量 EBP 返回地址 参数[…[XXXXX(注:sCont[5])] [0x…] [0x…] [没有参数]……]当我们正常往sCont写字符串值时内存应该是这样子的:–栈底(低位) ——栈顶(高位)局部变量 EBP 返回地址 参数[…[abcd\0] [0x….] [0x….] [没有参数]……]
这样的的结果是正确的,但是当我们写入一个大于5位的值时,因为sCont中存放不下所写的内容所以, 只好向内存顶部继续写执行strcpy(sCont,”AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA”);这条语句后内存的情况是这样子的:–栈底(低位) —— 栈顶(高位)局部变量 EBP 返回地址 参数[…[AAAAA] [AAAA] [AAAA] AAAAA…]
可以看出EBP和返回地址的值被改成成了AAAA,当函数执行结束要返回的时候,CPU将”AAAA”的ASCII码:0×41414141作为返回地址,CPU会试图执行0×41414141处的指令,CPU访问不存在的指令,结果出现错误。这就是一次堆栈溢出。Segmentation fault。
你可能已经注意到了,当溢出发生时我们改变了程序的执行过程,如果返回地址是一个有效的指令地址时,CPU将转向这个地址去执行从这个地址开始的指令序列,当你精心构造一个要执行的指令序列(当然要存放在进程的4Gb地址空间中)并将返回地址指向这个序列时,以实现缓冲区溢出攻击了,在UINX系统中,我们的指令可以执行一个shell,这个shell将获得和被我们堆栈溢出的程序相同的权限。如果这个程序是setuid的,那么我们就可以获得root shell。而这个指令序列就是我们常说的shell code。
这不是一篇缓冲区溢出的攻击教程,我也不打算详细说明如何去做下面的事情。相反我想通一些例子代码来说明如何编写缓冲区安全的程序。
HJLEOCHEN 2004/04/28

回头想想我已经好久没写过程序了.

Monday, December 19th, 2005

呀,似乎从6月以来就没写过几行代码了,顶多就写几个脚本来处理几个文件或是生成个报表什么的,或是写个xslt转换个xml展现出来,这算程序吗?不知道了,或许吧。人家说语言不重要重要的是思想,真的这样子吗?似乎不是,用某种语言的时候你就是用它来思考,就像写C你不会想如何用java来写这一行,而想的东西不会是对像,而是数据流,不是吗?脚本呢?更多的是方便日常的生活,也许最大的收获就是发现越来越多的事情可以通过正则表达式来完成,正则表达式,多好的东西啊,赫赫,今天搞了个Mastering Regx来看看。既然没写程序,那我现在的工作是什么呢?鬼知道。反正最近想着努力的把这些功能上线了,能够好好的过个春节吧。
一些流水帐:
没想到今年年初自己选的WebWork现在越来越受欢迎,出现在Java Web Alignment Group里了,据说还出了个struts ti是以webwork为核心开发的。估计这东西会越来越多的人在用。有时间看看webwork in action.(昨天自我感觉良好的搜索了一下以前写的两个关于webwork的文章,发现还挺多转载的,wahahahaha) 相关链接:WebWork joining Struts
ruby on rails 1.0 is out,第一时间升级了一下,还没试,今天发现了一个rails开发工具http://www.radrails.org/ 看起来不错。
准备公开自己写的那个rails收藏管理站的源代码(因为没备案,我自己把upulife.cn关了),不过犹豫中,写得实在太差了,怕丢人。赫赫。看起来似乎比我五年前写的代码还差。。怎么会这样??
发现RSS这东西害我不浅,现在每天只要打开GreatNews就会深迷在那近百个的Feed及它们的相关链接里?有没有RSS防沉迷系统?
最近突然间有一种想法:什么叫成长?成长就是小时候那些所谓的理想、希望,一个个被强奸的过程。不是吗?wahahahahaha,不知道什么时候我也能说出这么有深度的话来了。
最近学习robot如何从网上抓东西,于是用perl写了个简单的robot放在主机上,从网上狂down了近3万的手机铃声,需要的call我噢。

我们为什么认识?

Saturday, December 17th, 2005

除了血缘关系的亲人外,我们为什么认识呢?同学是因为我们在一起学习,同事是因为我们在一起工作,而现在网上的很多社区,是因为我们对某一种技术或是应用共同感觉兴趣,相信在网上呆过几年的朋友大多有成百上千的网友,而现阶段一直联系的却只是很少部分,这部分要么是现在的同事,要么是现阶段与你志趣相投的朋友,而其它的人更多的只是闲暇时打个招呼问个好,不论是以前的同事,同学或是各种渠道认识的朋友,慢慢的随着你的兴趣的变化,你的最近联系人中总是只有那些有共同兴趣(现阶段)或是目标的人们才会出现,不是吗?至少我是这样的。而不是因为这些原因交识的朋友关系应该是比较脆弱的,就像在飞机上递给你名片的那些人,后面再联系的可能性似乎很小了。一些不成熟的个人见解。
是什么把我们关联在一起的呢?是”事”,这种关系叫什么呢?今天刚听说:事脉
更多信息见 smarthings
“人脉因事脉而建立和维持”

出离的愤怒

Friday, December 16th, 2005

飞机在始发地因为起落架问题延误了四个小时,中转站因为乘客拒绝登机又停止了两个小时,而航空公司对于我们这些好说话的乘客,连句解释都没说,而那些吵得厉害的人却都给了赔偿,而且按上机的前后赔得不一样,最早上的没有,再晚一点的100再晚一点的200最后上的500,这么大的一家企业对于顾客却是如此,太难以令人想像了,我想迫不得以的情况下我是不会再乘坐这家公司的航班了。难道这个社会就是要让人学得刻薄?似乎像我们这些早上机的人们太宽容了,不止是钱的问题,难道好对付就不需要管了吗?一天没吃饭,居然说是不是他们的责任,难道是我们的责任?要不然,那个时间我早就坐在饭店里吃呼啦羊蹄了还会向你要那种垃圾食品?
更气人的是,在过西安时,不让我们下机,美其名曰:加快速度。后来才明白原来怕这些人下去了,跟外面拒绝登机的人混到一块去了。结果又让我们傻坐了两个小时。简直无耻。
是不是我们也应该学学那些拒绝登机的人?难道真要学着刻薄点,太好对付了也不行,算了,不多说了。
机上看到他们的杂志:看到吹他们自己如何如何好,如何如何准点,还有一篇:

Y的,你他妈的做婊子就别出来立牌坊。我骂人了,我就骂人了怎么招?

larbin使用说明

Wednesday, December 14th, 2005

larbin是一种爬虫工具,我也是前段时间网上看到 Larbin 一种高效的搜索引擎爬虫工具 一文时才知道有这么个东西,初步认定,我比较喜欢这个工具(比起nutch的crawl来说),因为它是C++写的,类似C嘛,我熟,可以自己改改,顺便学习一下C++(几年来的经验告诉我说:改别人的东西来学一种技术比从头写helloworld快很多)。于是开始了我艰辛的larbin试用之旅。回头看看自己遇到的问题都是由于没认真看文档引起的,唉,老毛病了。下次即使是E文的也得好好看,不能盲目的试,浪费时间。
larbin官方地址:http://larbin.sourceforge.net/index-eng.html
一,编译 这也好说,whahahaha,那是!因为从官方网站下下来的代码不能编译通过(linux gcc下)./configuremakegcc -O3 -Wall -D_REENTRANT -c -o parse.o parse.cparse.c:115: error: conflicting types for ‘adns__parse_domain’internal.h:571: error: previous declaration of ‘adns__parse_domain’ was hereparse.c:115: error: conflicting types for ‘adns__parse_domain’internal.h:571: error: previous declaration of ‘adns__parse_domain’ was heregmake[1]: *** [parse.o] 错误 1gmake[1]: Leaving directory `/home/leo/leo/larbin-2.6.3/adns’make: *** [all] 错误 2 函数原型和定义不一致这个好改:打开./adns/internal.h文件,把568-571行直接注释掉就行了。
二,运行这个就不说了,./larbin就运行了,larbin.conf中先进行配置就可以了,这个配置就不说了。。运行后可以http://host:8081看运行状态,不错的想法。larbin.conf中有个:inputPort 1976配置,就是可以运行时增加要抓取的URL,这个想法非常好,可是?怎么加呢?象起初那样:http://host:1976那样是不行的,报错???试了好久没结果,最后GDB跟踪了一下,唉,原来直接telnet host 1976进行增加就可以了。后来看到文档里写的亲亲楚楚,晕倒。。。。。
三,结果哈哈,下班后找了台机子跑了起来,那晚睡觉的时候都梦见自己的搜索引擎赶GOOGLE超BAIDU了,那个兴奋啊。第二天上班的时候取看结果,发现目录下除了些fifo*文件外什么都没有,那个郁闷。没办法啊,再看文档 How to customize […]

Subverion环境的配置(unix like Svnserve Based Server)

Monday, December 12th, 2005

1.到http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=260&expandFolder=74下载最新版本。wget http://subversion.tigris.org/tarballs/subversion-1.1.4.tar.gz2.解压下载的文件:tar zxf subversion-1.1.4.tar.gz3.编译安装:cd subversion-1.1.4&&./configure&&makemake install (需要root)4.增加执行用户。adduser svnrootpasswd svnroot5.建立资源库:mkdir /svnsvnadmin create /svnchown svnroot:svnroot -R /svn6.配置:vi /svn/conf/svnserve.conf去掉:#[general] 前的注释去掉:#anon-access = read #表示匿名可读#auth-access = write # 表示需要验证才可写。#password-db = passwd 表示验证人用户名,密码 user = passwd 格式。前的注释
然后在svnserve.conf的同一个目录小建立passwd文件(即:password-db后的值)内容为:[users]user1 = passwd1user2 = passwd2
根据文档中还要去掉:#realm = 前的注释,可选。
启动服务器:su - svnrootsvnserve -d -r /svn
客户端(on windows):安装:TortoiseSVN重启计算机。例一:进入d:盘右键blog目录选择:TortoiseSVN->ImportURL写:svn://服务器IP/blog blog为你要建立的库。选择OK,blog目录就初始化了。enjoy it.