- 博客(11)
- 资源 (2)
- 收藏
- 关注
原创 temp
<br />#pragma once #include <iostream> #include <map> using namespace std; class CRootClass { public: virtual void Display() = 0; }; typedef CRootClass* (*CREATECLASSOBJECT)(); class CClassType { public: CClassType(char* szClassName, CREATE
2011-03-28 19:52:00 390 1
原创 thunk原理
<br /> <br />通常程序执行的都是代码段上的二进制流,堆栈上存储了函数调用过程中用到的变量,EIP很少有机会能指到堆栈上来,但是使用thunk技术可以在堆栈上以数据的形式加入一段可执行代码,并通过函数调用执行。就像这样:<br /> <br />#include <iostream> #include <windows.h> using namespace std; #pragma pack(push, 1) class Thunk { public: unsigned char
2011-01-22 22:42:00 607
原创 modern c++ design01
<br /> <br />基于Policy的Class设计<br /> <br /> <br />软件设计的核心理念是设计原则,设计原则讲的是为了使软件易维护,易扩展同时保持健壮性的一些“公理”。之所以说是公理是因为它是软件行业诞生以来的若干人经验的积累,经过检验符合客观实际,我猜也许最根本的是符合人们的思维习惯和认知规律。<br /> <br />同许多公理一样,软件设计的公理(设计原则)也是内涵简洁,外延无限大的东西。乍看之下很容易盲从,如果没有那么多的设计模式来支撑它,我们对它的认识也许永远只停留在内
2011-01-20 01:07:00 582
原创 modern c++ design系列
<br /><br /><modern c++ design>是我学C++以来一直仰视的书,之所以说仰视是因为里面对模板的使用可以用匪夷所思来形容,它同时结合了另一门让我仰视的技术——设计模式,仰视+仰视=崇拜,所以长久以来我一直没有把它读懂的信心。但它就在我手边,心里一直都惦记着它,经过两年多的工作积累,今天已经可以翻一翻它了,虽然还是有很多的绊脚石,但勉强可以继续下去。初读一遍已经能理解所要表达的意思,能体会到它的好处,能明白涉及到的知识点,我想书读到这里离读懂也就不算太远了。<br />对于一个陌生
2011-01-20 00:41:00 746 1
原创 动态创建2
<br />上一篇提到了一种“分散式”型别保存方式,即每个具体产品里面保存了型别信息。类似于MFC的CRuntimeClass。这样做的缺点就是不容易管理,类别分布在各个类中,如果中间某个链接“断裂”,那么有可能导致整个型别网不可用。<br /> <br />在Modern C++ Design中提到了一种使用工厂来管理所有类别的解决方案,类别都保存在一个map里,每个具体的产品类向该工厂注册。创建对象时通过调用CreateObject(int iTypeID)就可以得到相应的类别。同前一种比起来,这种方法
2011-01-10 18:12:00 327
原创 动态创建1
如果把对象保存在文件上,读取的时候就会面临一个问题,如何解析文件中的数据?怎样才能把文件中的数据和具体的型别对应起来?这就是动态创建问题。最直接的想法是给每个类一个编号。假如有三个类,CDuckClass, CCockClass, CMonkeyClass他们都派生自CRootClass,下面是一种可行的方案。void LoadFile(char* pszFileName) { ifstream infile(pszFileName); int iType; infile >> iTyp
2011-01-08 21:33:00 257
原创 查看进程实例个数
查看进程实例个数需要用到两条语句#pragma daga_seg(“Shared”)volatile unsigned int gInstanceCount = 0;#pragma data_seg定义了一个Share段,这个段里只有一个全局变量gInstanceCount#pragma comment (linker, "/Section:Shared,RWS")让Shared称为共享段,也就是说所有该程序的实例都不会因为gInstanceCount而分配一个新的page,也就是说不会因为gInstanc
2010-10-28 00:45:00 687
原创 三种循环反汇编代码比较
for循环for (i = 0; i{ c = c+i;}1. 为循环变量赋值 mov dword ptr [i], 02. 跳转到循环变量比较处 jmp [比较地址]3. 修改循环变量 mov eax, dword ptr[i] add ,eax ,1
2010-08-13 10:01:00 676
原创 学习计划
辞职期间学习计划 项目书籍方式比重基础知识,windows编程程序设计>核心编程>深入浅出MFC>编程实例>技术内幕>阅读开源代码notepad++,将书中经典实例消化吸收形成自己的代码库。50%操作系统相关知识自己动手写操作系
2010-04-01 16:50:00 392 1
原创 对中断和异常的理解
对中断和异常的理解1. Dos中从0000h开始到0400h用户保存中断向量表。2. Dos中断向量表每4个字节作为一个指针,指向中断处理程序。3. 用户应该可以自己扩展中断向量表,否则CIH病毒怎么实现?4. Windows下用户没有类似于int n的指令执行中断程序,原来的一些中断服务现在是通过dll实现了。
2010-03-01 12:49:00 426 1
原创 80386保护模式下的分页机制
80386从硬件上支持分页机制,分页是由CR0寄存器的PG位控制的, 如果该位为1则表示启用分页机制,否则不启用。如果不启用线性地址就对应于实际的物理地址,如果启用就需要通过页目录、页表进行转换,最后找到物理地址。页目录,页表这两个概念以前一直没搞太明白,今天硬啃了一通,现在就来理顺一下思路:1. 一个线性地址被分为三部分,高10 位(31-22),中间10
2010-02-26 14:11:00 551
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人