VC/MFC
平平谈谈才是真
这个作者很懒,什么都没留下…
展开
-
DLL
Visual C++DLL编程实现一、前言 自从微软推出16位的Windows操作系统起,此后每种版本的Windows操作系统都非常依赖于动态链接库(DLL)中的函数和数据,实际上Windows操作系统中几乎所有的内容都由DLL以一种或另外一种形式代表着,例如显示的字体和图标存储在GDI DLL中、显示Windows桌面和处理用户的输入所需要的代码被存储在一个User DLL中、Windows编程所需要的大量的API函数也被包含在Kernel DLL中。 在Windows操作系统中使用DLL有很多优转载 2010-07-22 16:01:00 · 371 阅读 · 0 评论 -
[Win32]一个调试器的实现(六)显示源代码
上一篇文章介绍了调试符号以及DbgHelp的加载和清理,这回我们使用它来实现一个显示源代码的功能。该功能的实际使用效果如下图所示:该功能不仅仅是显示源代码,还要显示每一行代码对应的地址。实现该功能大概需要进行以下的步骤:①获取下一条要执行的指令的地址。②通过调试符号获取该地址对应哪个源文件的哪一行。③对于其它的行,通过调试符号获取它对应的地址。 第一步可以通过获取E转载 2012-12-10 22:02:45 · 578 阅读 · 0 评论 -
[Win32]一个调试器的实现(十一)显示函数调用栈
本文讲解如何在调试器中显示函数调用栈,如下图所示: 原理首先我们来看一下显示调用栈所依据的原理。每个线程都有一个栈结构,用来记录函数的调用过程,这个栈是由高地址向低地址增长的,即栈底的地址比栈顶的地址大。ESP寄存器的值是栈顶的地址,通过增加或减小ESP的值可以缩减或扩大栈的大小。上一篇文章已经简略地介绍过在调用函数时线程栈上会发生什么事情,现在我们再来详细地看看这个过程:转载 2012-12-10 23:07:46 · 600 阅读 · 0 评论 -
[Win32]一个调试器的实现(十)显示变量
上回介绍了微软的符号模型,有了这个基础知识,这回我们向MiniDebugger中添加两个新功能,分别是显示变量列表和以指定类型显示内存内容。显示变量列表用于列出当前函数内的局部变量或者全局变量;以指定类型显示内存内容用于读取指定地址处的内存内容,然后将这些二进制数据按照类型的格式解析成可读的内容并显示出来。如下面的截图所示: 使用lv命令显示局部变量时,每一列从左到右分别是:类型,名称转载 2012-12-10 23:04:55 · 786 阅读 · 0 评论 -
[Win32]一个调试器的实现(九)符号模型
在接下来的文章中会讲解如何在调试器中显示局部变量和全局变量的类型和值。实现这个功能一定要有调试符号的支持,因为调试符号记录了每个变量的名称,类型,地址,长度等信息。这不是一件轻松的事情,因为你首先要对符号模型有一定的了解。所以本文的主要目的就是介绍DbgHelp中的符号模型。 符号模型这里所说的“符号模型”指的是各种符号之间的逻辑关系,虽然微软定义了各种不同格式的符号文件,但是它们使用转载 2012-12-10 22:59:02 · 1007 阅读 · 0 评论 -
[Win32]一个调试器的实现(八)单步执行
上回讲解了如何实现断点功能,这回讲解如何实现与断点紧密相关的单步执行功能。单步执行有三种类型:StepIn,StepOver和StepOut,它们的实现方式比较多样化,单独实现它们的话并不困难,但是将它们整合到一起就比较困难了,特别是加上断点功能之后,程序的逻辑更加难以理解。本文首先单独讲解每种单步执行的原理,最后讲解如何将它们整合到一起。这都是我个人的实现方法,大家可以用来参考。(注意:本文所讲转载 2012-12-10 22:07:09 · 699 阅读 · 0 评论 -
[Win32]一个调试器的实现(七)断点
断点是最基本和最重要的调试技术之一,本文讲解了如何在调试器中实现断点功能。 什么是断点在进行调试的时候,只有被调试进程暂停执行时调试器才可以对它执行操作,例如观察内存内容等。如果被调试进程不停下来的话,调试器是什么也做不了的。要使被调试进程停下来,除了几个在特定时刻才发生的调试事件外,唯一的途径就是引发异常。 断点正是用来达到上述目的的异常,在第三篇文章的异常代码表中,有一种E转载 2012-12-10 22:04:02 · 690 阅读 · 0 评论 -
[Win32]一个调试器的实现(五)调试符号
一个调试器应该可以跟踪被调试程序执行到了什么地方,显示下一条将要执行的语句,显示各个变量的值,设置断点,进行单步执行等等,这些功能都需要一个基础设施的支持,那就是调试符号。 什么是调试符号我们知道,在exe、dll等可执行文件中保存的数据大部分都是二进制指令,CPU直接读取这些指令并执行。那么调试器是如何知道每条指令对应哪个源文件的哪一行代码呢?它又是如何知道每个变量和函数的名称,并显转载 2012-12-10 22:01:29 · 934 阅读 · 0 评论 -
[Win32]一个调试器的实现(四)读取寄存器和内存
在前几篇文章中,我实现的那个调试器只能被动接收调试事件并输出这些事件的信息。现在,我要将它修改成可以接收命令,并根据命令对被调试进程进行各种操作。首先从最基本的操作开始。 获取寄存器的值每个线程都有一个上下文环境,它包含了有关线程的大部分信息,例如线程栈的地址,线程当前正在执行的指令地址等。上下文环境保存在寄存器中,系统进行线程调度的时候会发生上下文切换,实际上就是将一个线程的上下文环转载 2012-12-10 21:59:33 · 894 阅读 · 0 评论 -
[Win32]一个调试器的实现(三)异常
这回接着处理上一篇文章留下的问题:如何处理EXCEPTION_DEBUG_EVENT这类调试事件。这类调试事件是调试器与被调试进程进行交互的最主要手段,在后面的文章中你会看到调试器如何使用它完成断点、单步执行等操作。所以,关于这类调试事件的处理很自由,调试器的作者可以根据需要进行不同的处理。但是,在对其进行处理之前必须要了解一些关于异常的知识,这也是本文的重点。(本文的内容参考了《软件调试》一书)转载 2012-12-10 21:56:11 · 918 阅读 · 0 评论 -
[Win32]一个调试器的实现(二)调试事件的处理
上一篇文章说到了调试循环的写法,这回讲一下调试器应该如何处理各种调试事件。 RIP_EVENT关于这种调试事件的文档资料非常少,即使提到也只是用“系统错误”或者“内部错误”一笔带过。既然如此,我们也不需要对其进行什么处理,只要输出一条信息或者干脆忽略它即可。 OUTPUT_DEBUG_STRING_EVENT当被调试进程调用OutputDebugString时就会引发该类调转载 2012-12-10 21:52:26 · 532 阅读 · 0 评论 -
BCB 静态编译
要编译成静态连接库,可以在所有机上运行的程序,只要这样做:打开【project】的【Options】,把packages页中的‘build with runtime packages’的勾去掉,linker页中的‘use dynamic Rtl’的勾去掉,再在compiler页中按release键。转载 2012-03-13 14:54:13 · 1331 阅读 · 0 评论 -
VC命令行下重定向
BOOL CDOSDlg::ExecDosCmd(){ #define EXECDOSCMD "dir c:" //可以换成你的命令SECURITY_ATTRIBUTES sa;HANDLE hRead,hWrite;sa.nLength = sizeof(SECURITY_ATTRIBUTES);sa.lpSecurityDescriptor = NULL;sa转载 2012-02-06 17:57:18 · 556 阅读 · 0 评论 -
仿制金山毒霸专杀工具界面
金山毒霸2002自推出以来,广受用户的喜爱。今天在这里我要谈的不是金山毒霸的功能,而是其别具一格的界面。本人早就对金山毒霸的界面垂涎三尺,如果自己的程序里能用上金山毒霸那样的界面,那该多爽! 说干就干,本着由浅入深的原则,我选择了金山毒霸的一个附带工具:Duba_GOP.exe来开刀。该工具在金山毒霸的网站上可以下载到,其 界面如图所示:好,开始准备工具:提取资源工具:freeRes编程工具:VC++还有一个Vc自带的小工具:spy++之所以不用大家都熟悉的eXeScope,是因为Duba_GOP.exe已转载 2010-11-15 13:03:00 · 547 阅读 · 0 评论 -
托盘编程全接触
一、托盘简介 所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。其实,托盘区的编程很简单,下面简要阐述一下子喽^_^ 二、托盘编程相关函数 其实呢,把程序放到托盘上的本质就是先在托盘区绘制一个图标,然后把程序隐藏不见,再对托盘的图标进行消息处理,就可以了。 绘制图标以及确定图标所传送消息的函数只有一个,那就是—————— WINSHELLAPI BOOL WINAPI Sh转载 2010-11-12 15:13:00 · 330 阅读 · 0 评论 -
软件破解简单上手 OllyDbg调试器应用
现在破解者们可能都在用OllyDbg调试器对软件进行动态的分析,因为目前多数的软件都工作在WINDOWS XP的平台上,并且OllyDbg调试器结合了动态和静态调试的特性,简单易用。 针对这次要破解的小程序,熟悉一下OllyDbg调试器的用法。工作前的准备 OllyDbg调试器的下载: http://www.pediy.com/tool转载 2012-12-10 23:09:50 · 1123 阅读 · 0 评论