|
用户名:k_badboy 笔名:k_badboy 地区: 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
真是烦人呀
在XP上写好的代码,一来到98里就问题重重,烦了一整天,看了又看,改了又改,才发现原来是堆栈失衡与没有保护寄存器,
在XP上写好的代码,一来到98里就问题重重,烦了一整天,看了又看,改了又改,才发现原来是堆栈失衡与没有保护寄存器,汗...
总结一下我的经验:
在检查堆栈的平衡时不仅是push/pop的配对问题,还要检查中间的代码,比如,跳转(jxx)与返回(ret),如果这些代码中包含了宏,也一定要进去看看.
当需要返回2个值时,最好用eax,edx,尽量不要用其它
esi,edi,ebx三个寄存器的值一定要保护,最好在过程名中用uses伪指令来让编译器完成这项工作
堆栈的失衡和没有保存寄存器导致的后果是严重的,它们带来的结果往往都是"非法操作",而且都是发生在系统核心进程里..所以,如果程序的出错模块不是在程序的本身,你就要考虑堆栈的平衡与寄存器的保护工作了^_^
Windows快捷键详细列表[转]
真是个懒堕的家伙
发现竟然10天不更新BLOG了,真是个懒堕的家伙
这些天一直在写一个简单的C++ IDE,语法高亮,自动完成都实现,但在块注释的时候遇到了问题
这些天一直在写一个简单的C++ IDE,语法高亮,自动完成都实现,但在块注释的时候遇到了问题
我的分析算法是从第一可见行开始分析的,所以,如果块注释的开始标志不可见,那么就分析就失败。想了很久,都不知如何写才能做到高效的刷新效果,真是个烦人的问题。
语法高亮方面,主要通过取字符的坐标然后用TextOut画上去的,为了美观,特意加入了"阴影",个人感觉不错^_^,不过,也可能是这个原因(取字符的坐标),导致大文件时比较慢(毕竟我只是加亮可见部分,这和文件的大小无关的),我的唯一理由就是EM_POSFROMCHAR的工作原理。。
郁闷ing.......
笑话三则
IT的意思
两个老太婆闲聊什么是IT。
A说:"IT是'它'的意思,常用来指动物。"
B说:"不对吧,好像搞电脑的人老说自己是属于IT行业的。"
IT的意思
两个老太婆闲聊什么是IT。
A说:"IT是'它'的意思,常用来指动物。"
B说:"不对吧,好像搞电脑的人老说自己是属于IT行业的。"
A说:"没错了,搞电脑的人开口闭口就说鼠呀,猫呀,死鸡呀,大虾呀什么的,不是一群动物是什么!?"
B:?!
关心
教授是个和善而幽默的老头,班上有个高大强壮的体育生叫JACK。每次上课当教授的声音响起时,JACK就开始睡觉,直至下课准时醒来。有一天他迟到了,教授亲切地对他说:"JACK,以后请不要迟到,这会影响你正常睡眠的。"
逃 跑
一个战俘得了一种病,左手被截掉了。他请求敌人把他的左手送回他的祖国,对方很感动,就照做了。
不久,他的右手也被截掉了,他再次请求将右手送回祖国,获得批准。
再后来,他的左腿也被截掉了,当他要求把腿送回祖国时却遭到拒绝。
战俘问:"为什么前两次可以,这次不行?"
对方很郑重地说:"我们怀疑你是在分期分批地逃跑。"
12个小球的问题
在12个小球中,其中一个的质量是有问题的,它的重量与其它11个不同(或重或轻),要求用天平在3次内把那只有问题的小球找出来
在汇编中使用C Run Time Library
用汇编编程的朋友都知道,系统提供的特定功能的函数都比较少,很多函数都要自己写(例如要将一个字符串转换为数字),特别是当要显示一个浮点数时,要想自己写一个显示浮点数的函数,绝对不是像显示整数那么容易,浮点数的存储格式要比整数复杂上千倍.然而,用C的朋友却非常不以为然,因为有printf,sprintf这两个超级武器,显示浮点数不足为谈(相信没有多少人想过这个问题
用汇编编程的朋友都知道,系统提供的特定功能的函数都比较少,很多函数都要自己写(例如要将一个字符串转换为数字),特别是当要显示一个浮点数时,要想自己写一个显示浮点数的函数,绝对不是像显示整数那么容易,浮点数的存储格式要比整数复杂上千倍.然而,用C的朋友却非常不以为然,因为有printf,sprintf这两个超级武器,显示浮点数不足为谈(相信没有多少人想过这个问题^_^)。
不禁想想,如果在汇编中使用printf该多好呀!
这还不算什么,在汇编中调用整个C Run Time Library(以下简称为RTL)的提供的函数才叫绝呢!
RTL中提供了非常多系统API没有的函数,是一个非常强大的补充。但这不仅仅是一个补充,RTL中很多函数的效率都比API要高(如strcpy比lstrcpy要快300%左右);系统没有提供随机数的功能,如果要在汇编中实现,又得去研究随机数的产生原理-_-,这时RTL中的rand又在无数欢呼与喝彩中登场一显身手
废话不多说了,如果有兴趣的话,请下载 附件 MSVCRT.rar:http://blog.blogchina.com/upload/2004-11-10/20041110061845415095.rar
笑话-电脑配件论惨
显示器说:我好惨阿,每天给人看。
键盘说:我更惨呢,每天给人打。
鼠标说:我才惨呢,每天给人摸。
机箱说:你们有我惨嘛每天给人按肚脐眼。
光驱说:我好惨,每天给人插。
软驱说:我更惨,现在都没人插我了。
u盘说:谁有我惨?这边插完就去那边插,一不小心还要被感染。
主板:不要以为我被很多东西插会很爽,其实我最惨,他们插进来后一般就都不动了,那叫一个难受啊。
声卡:我插上主板不动不说还得整天叫。
插头转换器:你们~~~哎~~~我前面在插别人,后面还要被人插,看谁掺啊~!
VC实现像Winamp一样的浏览文件夹
大家都用过Winamp吧?它的打开目录的功能是可以定位在上一次打开的位置(即是说可以指定位置),
并且有一个"包含文件夹"的功能...
大家都用过Winamp吧?它的打开目录的功能是可以定位在上一次打开的位置(即是说可以指定位置),
并且有一个"包含文件夹"的功能
虽然浏览文件夹方面的资料看过不少,但实现winamp类似功能的却也不多(我好像未看过呢..真是没见识)
只好自己在MSDN上搜索一翻,其实方法很简单,查看全部源代码
const 与 #define 的比较
相信只要看过有关C++优化的动物都知道,那些优化条款中总会提到: 用 const 来代替 #define,我一直以来也是这么做,并且很少怀疑过,但今天却发现了一个 const 的不足之处:
相信只要看过有关C++优化的动物都知道,那些优化条款中总会提到: 用 const 来代替 #define,我一直以来也是这么做,并且很少怀疑过,但今天却发现了一个 const 的不足之处:
const int i=0;
void main()
{
printf("address of const i:%08X\n",&i);
}
对于以上的代码,我希望编译的时候提示出错,但很可惜,没有任何错误发生
再来看看,
const int i=0;
void main()
{
int *p=(int*)&i;
*p=33;
}
编译,通过!!但程序一运行就立即发生不人见人爱的非法操作..-_-
从上面的2则代码中,我们可以看出
(1) const 也需要占用内存,并且需要占用文件空间,这对程序来讲,无疑是种残酷的折磨
不过,当遇到访问这个变量时语句时,编译器会用常数而不是内存寻址的方式
(2) 在一定的程度来讲, const 会导致严重的后果,一但代码比较多,这种错误往往难以被发现
所以,我还是建议要用常量的朋友用#define(看看自带的.h,哪个不是用#define的?),如果你对#define还是觉得不怎样,那还可以试试用enum
(测试环境: VS6.0,Win98Se)
见到贝多芬