关于作者

用户名:k_badboy
笔名:k_badboy
地区:
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



Programs

Game

BBS

BLOG

访问统计:
文章个数:15
评论个数:14
留言条数:0




Powered by BlogDriver 2.1

鬼龙.舞天下

 

文章

真是烦人呀

在XP上写好的代码,一来到98里就问题重重,烦了一整天,看了又看,改了又改,才发现原来是堆栈失衡与没有保护寄存器,


  在XP上写好的代码,一来到98里就问题重重,烦了一整天,看了又看,改了又改,才发现原来是堆栈失衡与没有保护寄存器,汗...
    总结一下我的经验:

    在检查堆栈的平衡时不仅是push/pop的配对问题,还要检查中间的代码,比如,跳转(jxx)与返回(ret),如果这些代码中包含了宏,也一定要进去看看.
    当需要返回2个值时,最好用eax,edx,尽量不要用其它
    esi,edi,ebx三个寄存器的值一定要保护,最好在过程名中用uses伪指令来让编译器完成这项工作

  堆栈的失衡和没有保存寄存器导致的后果是严重的,它们带来的结果往往都是"非法操作",而且都是发生在系统核心进程里..所以,如果程序的出错模块不是在程序的本身,你就要考虑堆栈的平衡与寄存器的保护工作了^_^

- 作者: k_badboy 2004年12月7日, 星期二 08:43  回复(0) |  引用(0) 加入博采

Windows快捷键详细列表[转]
F1           显示当前程序或者windows的帮助内容。
F2           当你选中一个文件的话,这意味着"重命名"
F3           当你在桌面上的时候是打开"查找:所有文件"
            对话框
F10或ALT        激活当前程序的菜单栏
windows键或CTRL+ESC   打开开始菜单

F1           显示当前程序或者windows的帮助内容。
F2           当你选中一个文件的话,这意味着"重命名"
F3           当你在桌面上的时候是打开"查找:所有文件"
            对话框
F10或ALT        激活当前程序的菜单栏
windows键或CTRL+ESC   打开开始菜单
CTRL+ALT+DELETE     在win9x中打开关闭程序对话框
DELETE         删除被选择的选择项目,如果是文件,将被放
            入回收站
SHIFT+DELETE      删除被选择的选择项目,如果是文件,将被直
            接删除而不是放入回收站
CTRL+N         新建一个新的文件
CTRL+O         打开"打开文件"对话框
CTRL+P         打开"打印"对话框
CTRL+S         保存当前操作的文件
CTRL+X         剪切被选择的项目到剪贴板
CTRL+INSERT 或 CTRL+C  复制被选择的项目到剪贴板
SHIFT+INSERT 或 CTRL+V 粘贴剪贴板中的内容到当前位置
ALT+BACKSPACE 或 CTRL+Z 撤销上一步的操作
ALT+SHIFT+BACKSPACE   重做上一步被撤销的操作
Windows键+M       最小化所有被打开的窗口。
Windows键+CTRL+M    重新将恢复上一项操作前窗口的大小和位置
Windows键+E       打开资源管理器
Windows键+F       打开"查找:所有文件"对话框
Windows键+R       打开"运行"对话框
Windows键+BREAK     打开"系统属性"对话框
Windows键+CTRL+F    打开"查找:计算机"对话框
SHIFT+F10或鼠标右击   打开当前活动项目的快捷菜单
SHIFT          在放入CD的时候按下不放,可以跳过自动播放
            CD。在打开word的时候按下不放,可以跳过自
            启动的宏
ALT+F4         关闭当前应用程序
ALT+SPACEBAR      打开程序最左上角的菜单
ALT+TAB         切换当前程序
ALT+ESC         切换当前程序
ALT+ENTER        将windows下运行的MSDOS窗口在窗口和全屏幕
            状态间切换
PRINT SCREEN      将当前屏幕以图象方式拷贝到剪贴板
ALT+PRINT SCREEN    将当前活动程序窗口以图象方式拷贝到剪贴板
CTRL+F4         关闭当前应用程序中的当前文本(如word中)
CTRL+F6         切换到当前应用程序中的下一个文本(加shift
            可以跳到前一个窗口)

在IE中:

ALT+RIGHT ARROW     显示前一页(前进键)
ALT+LEFT ARROW     显示后一页(后退键)
CTRL+TAB        在页面上的各框架中切换(加shift反向)
F5           刷新
CTRL+F5         强行刷新

  目的快捷键

  激活程序中的菜单栏 F10

  执行菜单上相应的命令 ALT+菜单上带下划线的字母

  关闭多文档界面程序中的当

  前窗口 CTRL+ F4

  关闭当前窗口或退出程序 ALT+ F4

  复制 CTRL+ C

  剪切 CTRL+ X

  删除 DELETE

  显示所选对话框项目的帮助 F1

  显示当前窗口的系统菜单 ALT+空格键

  显示所选项目的快捷菜单 SHIFT+ F10

  显示"开始"菜单 CTRL+ ESC

  显示多文档界面程序的系统

  菜单 ALT+连字号(-)

  粘贴 CTR L+ V

  切换到上次使用的窗口或者

  按住 ALT然后重复按TAB,

  切换到另一个窗口 ALT+ TAB

  撤消 CTRL+ Z

  二、使用"Windows资源管理器"的快捷键

  目的快捷键

  如果当前选择展开了,要折

  叠或者选择父文件夹左箭头

  折叠所选的文件夹 NUM LOCK+负号(-)

  如果当前选择折叠了,要展开

  或者选择第一个子文件夹右箭头

  展开当前选择下的所有文件夹 NUM LOCK+*

  展开所选的文件夹 NUM LOCK+加号(+)

  在左右窗格间切换 F6

  三、使用 WINDOWS键

  可以使用 Microsoft自然键盘或含有 Windows徽标键的其他任何兼容键盘的以下快捷键。

  目的快捷键

  在任务栏上的按钮间循环 WINDOWS+ TAB

  显示"查找:所有文件" WINDOWS+ F

  显示"查找:计算机" CTRL+ WINDOWS+ F

  显示"帮助" WINDOWS+ F1

  显示"运行"命令 WINDOWS+ R

  显示"开始"菜单 WINDOWS

  显示"系统属性"对话框 WINDOWS+ BREAK

  显示"Windows资源管理器" WINDOWS+ E

  最小化或还原所有窗口 WINDOWS+ D

  撤消最小化所有窗口 SHIFT+ WINDOWS+ M

  四、使用"我的电脑"和"Windows资源管理器"的快捷键

  目的快捷键

  关闭所选文件夹及其所有父

  文件夹按住 SHIFT键再单击"关闭按钮(仅适用于"我的电脑")

  向后移动到上一个视图 ALT+左箭头

  向前移动到上一个视图 ALT+右箭头

  查看上一级文件夹 BACKSPACE

  五、使用对话框中的快捷键

  目的快捷键

  取消当前任务 ESC

  如果当前控件是个按钮,要

  单击该按钮或者如果当前控

  件是个复选框,要选择或清

  除该复选框或者如果当前控

  件是个选项按钮,要单击该

  选项空格键

  单击相应的命令 ALT+带下划线的字母

  单击所选按钮 ENTER

  在选项上向后移动 SHIFT+ TAB

  在选项卡上向后移动 CTRL+ SHIFT+ TAB

  在选项上向前移动 TAB

  在选项卡上向前移动 CTRL+ TAB

  如果在"另存为"或"打开"

  对话框中选择了某文件夹,

  要打开上一级文件夹 BACKSPACE

  在"另存为"或"打开"对

  话框中打开"保存到"或

  "查阅" F4

  刷新"另存为"或"打开"

  对话框 F5

  六、使用"桌面"、"我的电脑"和"Windows资源管理器"快捷键

  选择项目时,可以使用以下快捷键。

  目的快捷键

  插入光盘时不用"自动播放"

  功能按住 SHIFT插入 CD-ROM

  复制文件按住 CTRL拖动文件

  创建快捷方式按住 CTRL+SHIFT拖动文件

  立即删除某项目而不将其放入 SHIFT+DELETE

  "回收站"

  显示"查找:所有文件" F3

  显示项目的快捷菜单 APPLICATION键

  刷新窗口的内容 F5

  重命名项目 F2

  选择所有项目 CTRL+ A

  查看项目的属性 ALT+ ENTER或 ALT+双击

  可将 APPLICATION键用于 Microsoft自然键盘或含有 APPLICATION键的其他兼容键

  七、Microsoft放大程序的快捷键

  这里运用Windows徽标键和其他键的组合。

  快捷键目的

  Windows徽标+PRINT SCREEN将屏幕复制到剪贴板(包括鼠标光标)

  Windows徽标+SCROLL LOCK将屏幕复制到剪贴板(不包括鼠标光标)

  Windows徽标+ PAGE UP切换反色。

  Windows徽标+ PAGE DOWN切换跟随鼠标光标

  Windows徽标+向上箭头增加放大率

  Windows徽标+向下箭头减小放大率

  八、使用辅助选项快捷键

  目的快捷键

  切换筛选键开关右SHIFT八秒

  切换高对比度开关左ALT+左SHIFT+PRINT SCREEN

  切换鼠标键开关左ALT+左SHIFT+NUM LOCK

  切换粘滞键开关 SHIFT键五次

  切换切换键开关 NUM LOCK五秒

- 作者: k_badboy 2004年11月29日, 星期一 17:05  回复(0) |  引用(0) 加入博采

真是个懒堕的家伙

  发现竟然10天不更新BLOG了,真是个懒堕的家伙

      这些天一直在写一个简单的C++ IDE,语法高亮,自动完成都实现,但在块注释的时候遇到了问题


      发现竟然10天不更新BLOG了,真是个懒堕的家伙

      这些天一直在写一个简单的C++ IDE,语法高亮,自动完成都实现,但在块注释的时候遇到了问题

  我的分析算法是从第一可见行开始分析的,所以,如果块注释的开始标志不可见,那么就分析就失败。想了很久,都不知如何写才能做到高效的刷新效果,真是个烦人的问题。

  语法高亮方面,主要通过取字符的坐标然后用TextOut画上去的,为了美观,特意加入了"阴影",个人感觉不错^_^,不过,也可能是这个原因(取字符的坐标),导致大文件时比较慢(毕竟我只是加亮可见部分,这和文件的大小无关的),我的唯一理由就是EM_POSFROMCHAR的工作原理。。

  郁闷ing.......

- 作者: k_badboy 2004年11月28日, 星期日 11:12  回复(0) |  引用(0) 加入博采

笑话三则

IT的意思

两个老太婆闲聊什么是IT。
  A说:"IT是'它'的意思,常用来指动物。"
  B说:"不对吧,好像搞电脑的人老说自己是属于IT行业的。"


IT的意思

两个老太婆闲聊什么是IT。
  A说:"IT是'它'的意思,常用来指动物。"
  B说:"不对吧,好像搞电脑的人老说自己是属于IT行业的。"
  A说:"没错了,搞电脑的人开口闭口就说鼠呀,猫呀,死鸡呀,大虾呀什么的,不是一群动物是什么!?"
  B:?!


关心

  教授是个和善而幽默的老头,班上有个高大强壮的体育生叫JACK。每次上课当教授的声音响起时,JACK就开始睡觉,直至下课准时醒来。有一天他迟到了,教授亲切地对他说:"JACK,以后请不要迟到,这会影响你正常睡眠的。"
 
逃 跑

   一个战俘得了一种病,左手被截掉了。他请求敌人把他的左手送回他的祖国,对方很感动,就照做了。
   不久,他的右手也被截掉了,他再次请求将右手送回祖国,获得批准。
   再后来,他的左腿也被截掉了,当他要求把腿送回祖国时却遭到拒绝。
   战俘问:"为什么前两次可以,这次不行?"
   对方很郑重地说:"我们怀疑你是在分期分批地逃跑。"

- 作者: k_badboy 2004年11月17日, 星期三 16:47  回复(0) |  引用(0) 加入博采

12个小球的问题

     在12个小球中,其中一个的质量是有问题的,它的重量与其它11个不同(或重或轻),要求用天平在3次内把那只有问题的小球找出来


12个小球的问题
'题目:
'有12个小球,其中一个是质量是有问题的,它的重量也其它11个有出入(或重或轻)
'要求用一把天平在3次内把质量的问题的那个球找出来

'解题思路

'把12个球分成3份(a,b,c),每份4个
'如果a=b 则表示 坏球在c里,这很容易
'如果a<>b 则表示坏球在a 或 b 里,这也是本题的关键所在
'我主要是根据第一次的比较结果来确定,这也不难理解,只要你动一下笔的说^_^

'--------------------------------------------------------------

Option Explicit

Private Sub Form_Load()
    Dim a(11) As Long
    Dim i As Long, b As Long, Result As Long
10:
    Randomize
    
    '正品的重量为5,次品为6或4
    For i = 0 To 11
        a(i) = 5
    Next
    b = Rnd * 11
    a(b) = IIf(Rnd * 3 > 2, 6, 4)
    
    
    
    Dim c1&, c2&, c3& '分别为第一次,第二次,第三次的比较结果
    
    
    c1 = Cmp(a(0) + a(1) + a(2) + a(3), a(4) + a(5) + a(6) + a(7))
    If c1 = 0 Then
        '在8,9,10,11(这时0-7是好的)
        c2 = Cmp(a(8), a(10))
        If c2 = 0 Then
            '8和10相等,则表示在 9 或 11
            c3 = Cmp(a(9), a(0))
            If c3 = 0 Then
                Result = 11
            Else
                Result = 9
            End If
        Else '在8 或 10
            c3 = Cmp(a(8), a(0))
            If c3 = 0 Then
                Result = 10
            Else
                Result = 8
            End If
        End If
    Else
        '在0,1,2,3,4,5,6,7
        
        c2 = Cmp(a(0) + a(5) + a(6) + a(7), a(4) + a(8) + a(9) + a(10))
        If c2 = 0 Then
            '在1,2,3
            c3 = Cmp(a(1), a(2))
            If c3 = 0 Then
                '如果1和2相等,则表示第3个球是有问题的
                Result = 3
                
            ElseIf (c3 = c1) Then
                '好好想一下,我都不知如何表达是好....
                Result = 1
                
            Else
                Result = 2
            End If
        ElseIf c2 <> c1 Then
            '由于移动了5,6,7,而8,9,10是好的,所以得出坏球在 5,6,7
            c3 = Cmp(a(5), a(6))
            If c3 = 0 Then
                Result = 7
            ElseIf c3 = c1 Then
                '5,6,7一开始是在右边的,这里与1,2,3稍有不同
                Result = 6
            Else
                Result = 5
            End If
        Else
            '在0,4
            c3 = Cmp(a(0), a(8))
            If c3 = 0 Then
                Result = 4
            Else
                Result = 0
            End If
        End If
    End If
        
    Dim s As String
    s = "次品:" & b & vbCrLf
    s = s & "结果:" & Result & vbCrLf & vbCrLf
    s = s & "清单:" & vbCrLf
     For i = 0 To 11
        s = s & Format(i, "(00)") & a(i) & vbCrLf
    Next
    s = s & "要继续吗?"
    If MsgBox(s, vbYesNo + vbInformation) = vbYes Then
        GoTo 10
    End If
    Unload Me
End Sub
'--------------------------------------------------------------
'Cmp函数当作一把天平,如果左边重返回1,右边重返回-1,相等返回0
Private Function Cmp(ByVal a As Long, ByVal b As Long) As Long
    If a > b Then
        Cmp = 1
    ElseIf a < b Then
        Cmp = -1
    Else
        Cmp = 0
    End If
End Function

本代码由xTiNt自动着色 http://kbadboy.yeah.net

- 作者: k_badboy 2004年11月13日, 星期六 23:11  回复(3) |  引用(0) 加入博采

在汇编中使用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

- 作者: k_badboy 2004年11月10日, 星期三 18:19  回复(0) |  引用(0) 加入博采

笑话-电脑配件论惨
显示器说:我好惨阿,每天给人看。
键盘说:我更惨呢,每天给人打。
鼠标说:我才惨呢,每天给人摸

显示器说:我好惨阿,每天给人看。
键盘说:我更惨呢,每天给人打。
鼠标说:我才惨呢,每天给人摸。
机箱说:你们有我惨嘛每天给人按肚脐眼。
光驱说:我好惨,每天给人插。
软驱说:我更惨,现在都没人插我了。
u盘说:谁有我惨?这边插完就去那边插,一不小心还要被感染。
主板:不要以为我被很多东西插会很爽,其实我最惨,他们插进来后一般就都不动了,那叫一个难受啊。
声卡:我插上主板不动不说还得整天叫。
插头转换器:你们~~~哎~~~我前面在插别人,后面还要被人插,看谁掺啊~!

- 作者: k_badboy 2004年11月7日, 星期日 18:42  回复(0) |  引用(0) 加入博采

VC实现像Winamp一样的浏览文件夹

大家都用过Winamp吧?它的打开目录的功能是可以定位在上一次打开的位置(即是说可以指定位置),

并且有一个"包含文件夹"的功能...


大家都用过Winamp吧?它的打开目录的功能是可以定位在上一次打开的位置(即是说可以指定位置),

并且有一个"包含文件夹"的功能

虽然浏览文件夹方面的资料看过不少,但实现winamp类似功能的却也不多(我好像未看过呢..真是没见识)

只好自己在MSDN上搜索一翻,其实方法很简单,查看全部源代码

- 作者: k_badboy 2004年11月7日, 星期日 00:58  回复(2) |  引用(0) 加入博采

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)

- 作者: k_badboy 2004年11月4日, 星期四 00:39  回复(2) |  引用(0) 加入博采

见到贝多芬
    昨天睡了一个下午的午睡,导致晚上在床上翻来翻去,数完绵羊数美女,数完美女数Money,都是无法进入梦乡,凌晨3点31分,起床打了约40分钟的KOF,再回到床上,总算睡着了.真是个倒霉的星期日.
    昨天睡了一个下午的午睡,导致晚上在床上翻来翻去,数完绵羊数美女,数完美女数Money,都是无法进入梦乡,凌晨3点31分,起床打了约40分钟的KOF,再回到床上,总算睡着了.真是个倒霉的星期日.
    今天更倒霉,09:50起床,连眼都睁不开,没精神没力气.不过,上帝总有仁慈的一面,这个星期上夜班,下午5点才是上班时间,thanks,God.
    星期一的阳光总觉得带有几分温暖,好想到外面走走.
    到了楼下,向右拐再向右拐,到了一间面包店,一位不是很PL的服务员MM走过来,"请问老板要什么包?"(靠,如今这年头,都是叫'帅哥','靓仔'的,她竟然还叫'老板'这么老土,难怪这里的生意非常的嘛嘛地)
    "给我2个酥皮"
    我发现酥皮这东西非常的值,一个才5毛,味道也不错.真是世间少有,将来我要是开面包店,肯定要给它留上一个席位,并赐美名曰:"鬼龙酥皮".鬼,意味精灵鬼,很讨人喜欢,龙则表示生龙活虎,龙腾虎跃.好名字,真是好名字!开始有点佩服自己了^_^
    "找你四块",那位MM把钱扔在柜台上.拿过找回来的钱后,真想送她一句刘德华的名言"今时今日,甘个服务态度未够驾".
    看着MM转身离开,不禁叹了一口气,"如今的背多分真是到处可见呀!"

- 作者: k_badboy 2004年11月1日, 星期一 22:22  回复(0) |  引用(0) 加入博采