自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 X.509证书格式。

Structure of a certificate<br />The structure of an X.509 v3 digital certificate is as follows:Certificate Version Serial Number Algorithm ID Issuer Validity Not Before Not After Subject Subject Public Key Info Public Key Algorithm Subject Public Key

2010-12-03 10:53:00 3404

原创 自己动手实现Crash时候Dump.

程序在运行时,难免会有一些异常情况发生,特别是在条件不容许去挂调试器的时候,如何快速的定位错误的方法就显得很重要。日志一直都是一种很重要的定位错误的方法,出得好的日志可以方便程序员快速的定位问题所在。但日志有时也显不足:日志有时只能定位大体错误范围,却无法确认问题所在,比如程序抓到一个未知的异常。 程序有时没有机会来出日志,或者能出日志的时候已经无法获得和错误相关的信息,比如程序崩溃的时候。 在日志明显不足的时候,把进程中相关数据DUMP下来分析就是一个比较实用方便的方法。很多应用都会提供这类功能,以便在程

2010-11-30 12:13:00 2765

原创 WINDBG配置。

VS2005的配置:1、下载ddkwizard_setup,ddkbuild_bat.zip,ddkbuild_cmd.zip。下载网址(http://ddkwizard.assarbad.net/)2、拷贝ddkbuild.bat,ddkbuild.cmd到DDK的安装目录。(C:/WinDDK)3、配置环境变量:系统变量——Path中加入C:/WinDDK,新建一个系统变量为WLHBASE,其值为C:/WinDDK/6000。4、配置VS2005,在Tools——Options——Projects an

2010-11-25 16:07:00 2039

原创 PKCS标准详解。

<br />PKI标准可以分为第一代和第二代标准[12]。<br />第一代PKI标准主要包括美国RSA公司的公钥加密标准(Public Key Cryptography Standards,PKCS)系列、国际电信联盟的ITU-T X.509、IETF组织的公钥基础设施X.509(Public Key Infrastructure X.509,PKIX)标准系列、无线应用协议(Wireless Application Protocol ,WAP)论坛的无线公钥基础设施(Wireless Public Ke

2010-11-25 11:48:00 2874

原创 通过异或交换数据内容。

<br />int  selStart = m_selStart, selEnd = m_selEnd;<br /> <br /> <br />反汇编结果。<br />0041AE05  mov         eax,dword ptr [ebp-18h] <br />0041AE08  mov         ecx,dword ptr [eax+9Ch] <br />0041AE0E  mov         dword ptr [selStart],ecx <br />0041AE14  mov  

2010-10-22 11:57:00 510

原创 CString概述。

概括说明:   MFC对CString类的封装可能的确不如std::string完善,但是也的确不错,功能也足够强大,使用上还很体贴。其基本特征为:   ☆CString类没有基类。   ☆CString类和LPCTSTR的关系:MSDN上说“CString objects follow "value semantics." Think of a CString object as an actual string, not as a pointer to a string.”也就是说用的时候除了考虑使用它

2010-10-15 14:27:00 642

原创 MFC应用程序中指针的使用。(有空阅读整理下)

MFC应用程序中指针的使用 1)   在View中获得Doc指针 2)   在App中获得MainFrame指针 3)   在View中获得MainFrame指针 4)   获得View(已建立)指针 5)   获得当前文档指针 6)   获得状态栏与工具栏指针 7)   获得状态栏与工具栏变量 8)   在Mainframe获得菜单指针 9)   在任何类中获得应用程序类 10)   从文档类取得视图类的指针(1) 11)   在App中获得文档模板指针 12)   从文档模板获得文档类指针 13)  

2010-10-15 11:06:00 691

原创 MFC中访问应用程序的其他类。

访问应用程序的其它类 获得CWinApp: -在CMainFrame,CChildFrame,CDocument,CView中直接调用AfxGetApp()或用theApp -在其它类中只能用AfxGetApp() 获得CMainFrame: -在CMinApp中用AfxGetMainWnd()或者m_pMainWnd -在CChildFrame中可用GetParentFrame() -在其它类中用AfxGetMainWnd() 获得CChildFrame: -在CView中用GetParentFrame(

2010-10-15 11:03:00 1335 1

原创 UNICODE常用字符串函数。

<br /><br />Windows CE是一种Unicode环境,使用wchar_t来描述字符型变量。注意,这并不是说它不支持char型字符,char* p = "你好"同样是合法的,只不过在显示的时候必须转换成wchar_t类型。<br />来看看WinCE下的字符串操作函数:<br />wcscat<br />wcschr<br />wcscmp<br />wcscpy<br />wcscspn<br />wcslen<br />wcsncat<br />wcsncmp<br />wcsncpy<b

2010-10-15 09:45:00 4403 1

原创 OPENSSL中的MD5接口。

以MD5为例,标准接口包括如下函数:    void MD5_Init(MD5_CTX *c);    void MD5_Update(MD5_CTX *c,const void *data,unsigned long len);    void MD5_Final(unsigned char *md, MD5_CTX *c);MD5_Init初始化MD5_CTX结构。MD5_Update计算摘要。MD5_Final输出摘要值。

2010-10-14 09:10:00 1677 2

转载 分组对称加密模式:ECB/CBC/CFB/OFB。

转来的。学习下。 一. AES对称加密:二. 分组密码的填充三. 流密码:四. 分组密码加密中的四种模式:3.1 ECB模式优点:1.简单;2.有利于并行计算;3.误差不会被传送;缺点:1.不能隐藏明文的模式;2.可能对明文进行主动攻击;3.2 CBC模式:优点:1.不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。缺点:1.不利于并行计算;2.误差传递;3.需要初始化向量IV3.3 CFB模式:优点:1.隐藏了明文模式;2.分组密码转化为流模式;3.可以及时加密传送小于分

2010-10-13 09:02:00 1105

原创 【面试】字符串最长不重复子串长度。

<br />#include <cstdio><br />#include <cstring><br />#include <algorithm><br />using namespace std;<br />int main()<br />{<br />    const char* str = "abcbecd";<br />    const int n = strlen(str);<br />    <br />    int dp[256], last[256];<br />    <br /> 

2010-10-02 09:19:00 1040

原创 虚继承与虚基类的本质。

<br />虚继承和虚基类的定义是非常的简单的,同时也是非常容易判断一个继承是否是虚继承<br />的,虽然这两个概念的定义是非常的简单明确的,但是在C++语言中虚继承作为一个比较生<br />僻的但是又是绝对必要的组成部份而存在着,并且其行为和模型均表现出和一般的继承体系<br />之间的巨大的差异(包括访问性能上的差异),现在我们就来彻底的从语言、模型、性能和<br />应用等多个方面对虚继承和虚基类进行研究。<br />首先还是先给出虚继承和虚基类的定义。<br />虚继承:在继承定义中包含了virt

2010-09-29 10:10:00 556

转载 Windows操作系统堆和栈的区别

 作者:中华视频网    2006-08-23                      Windows操作系统堆和栈的区别一、预备知识—程序的内存分配    一个由c/C++编译的程序占用的内存分为以下几个部分    1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。    2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。    3、

2010-09-28 16:55:00 830

原创 计算对角线原数值(不使用递归)。

<br />f(m, n) = n  if (m = 1)  <br /><br />f(m, n) = m  if (n = 1)  <br /><br />f(m, n) = f(m - 1, n) + f(m, n - 1)  if (m > 1 and n > 1) <br />非递归。<br />求值。<br /><br />题意分析。<br /><br />1, 2, 3, 4, 5, 6, 7, 8<br />2, 4, 7,11,16,22,28,36<br />3, 7, 14,<br /

2010-09-27 21:11:00 550

原创 string类的简单构造。

<br />  已知类String的原型为:<br /><br />  class String<br />  {<br />  public:<br />  String(const char *str = NULL);// 普通构造函数<br />  String(const String &other); // 拷贝构造函数<br />  ~ String(void); // 析构函数<br />  String & operator =(const String &other);// 赋值函数<br

2010-09-26 19:59:00 388

原创 句柄和指针区别。

<br />从广义上,能够从一个数值拎起一大堆数据的东西都可以叫做句柄。句柄的英文是"Handle",本义就是"柄",只是在计算机科学中,被特别地翻译成"句柄",其实还是个"柄"。从一个小东西拎起一大堆东西,这难道不像是个"柄"吗? <br /><br />然后,指针其实也是一种"句柄",只是由于指针同时拥有更特殊的含义——实实在在地对应内存里地一个地址——所以,通常不把指针说成是"句柄"。但指针也有着能从一个32位的值引用到一大堆数据的作用,这不是句柄又是什么? <br /><br />Windows系统

2010-09-26 19:39:00 518

原创 全局变量和全局static变量的区别。

<br />全局变量本身就是静态存储方式,存储方式没有什么区别。非静态全局变量的作用域是整个源程序,在程序的多个文件中都有效。但是静态之后,限制作用域。只在定义文件中有效。 

2010-09-15 14:11:00 858

原创 编辑器为空类添加的函数。

<br />一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function,如果你写 class Empty{}; 就相当于: class Empty { public: Empty(); //构造函数Empty(const Empty&); //拷贝构造函数~Empty(); //析构函数Empty& operator=(const Empty& rhs); //赋值操作符Empty* operator&(

2010-09-15 14:07:00 489

原创 内存对齐。

<br /><br />写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧.<br />/******************************分割线<br />如果体系结构是不对齐的,A中的成员将会一个挨一个存储,从而sizeof(a)为11。显然对齐更浪费了空间。那么为什么要使用对齐呢?<br />体系结构的对齐和不对齐,是在时间和空间上的一个权衡。对齐节省了时间。假设一个体系结构的字长为w,那么它同

2010-09-15 13:59:00 375

原创 Python操纵MySQL.

import MySQLdb    #建立和数据库系统的连接  conn = MySQLdb.connect(host='localhost', user='root',passwd='longforfreedom')    #获取操作游标  cursor = conn.cursor()  #执行SQL,创建一个数据库.  cursor.execute("""create database python """)    #关闭连接,释放资源  cursor.close();  import MySQLdb 

2010-09-14 13:00:00 422

原创 python中的dict.

<br />class dict(object)<br /> |  dict() -> new empty dictionary<br /> |  dict(mapping) -> new dictionary initialized from a mapping object's<br /> |      (key, value) pairs<br /> |  dict(iterable) -> new dictionary initialized as if via:<br /> |      d =

2010-09-13 14:46:00 1811

原创 递归算阶乘。冒泡排序。

<br />递归算阶乘。<br />int fun(int a)<br />{<br />  if (a==1)<br />    return 1;<br />  else<br />    return a*fun(a-1);<br />} <br />冒泡排序。<br />for (i=0;i<n-1;i++) <br />{ <br />   for (int d=i+1;d<n;d++) <br />   if(a[i]>a[d]) <br />   { <br />   t=a[i]; <br

2010-09-11 16:58:00 529

转载 VC/MFC中操纵ACCESS。好东西。留下了。

[code=C/C++]//头文件#pragma once   #include "math.h"   #import "MSADO15.DLL"   rename_namespace("ADOWE") rename("EOF","EndOfFile")   using namespace ADOWE;   class CDBAdo   {   public:       _CommandPtr     m_ptrCommand;       //命令对象       _RecordsetPtr   m_p

2010-08-18 14:20:00 913

转载 IOCP模型

IOCP(I/O Completion Port,I/O完成端口)是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。在处理多个并发的异步I/O请求时,以往的模型都是在接收请求是创建一个线程来应答请求。这样就有很多的线程并行地运行在系统中。而这些线程都是可运行的,Windows内核花费大量的时间在进行线程的上下文切换,并没有多少时间花在线程运行上。再加上创建新线程的开销比较大,所以造成了效率的低下。 调用的步骤如下:抽象出一个完成端口大概的处理流程: 1:创建一个完成端口。 2:

2010-07-25 08:59:00 715

转载 The Standard Librarian: What Are Allocators Good For?

Allocator是C++语言标准库中最神秘的部分之一。它们很少被显式使用,标准也没有明确出它们应该在什么时候被使用。今天的allocator与最初的STL建议非常不同,在此过程中还存在着另外两个设计--这两个都依赖于语言的一些特性,而直到最近才在很少的几个编译器上可用。对allocator的功能,标准似乎在一些方面追加了承诺,而在另外一些方面撤销了承诺。这篇专栏文章将讨论你能用allocator来做什么以及如何定义一个自己的版本。我只会讨论C++标准所定义的allocator:引入准标准时代的设计,或试图

2010-07-24 22:32:00 417

转载 memory std::allocator源代码及注释.

<br />//D:/Program Files/Microsoft Visual Studio 8/VC/include/xmemory <br />// xmemory internal header (from )<br />#pragma once<br />#ifndef _XMEMORY_<br />#define _XMEMORY_<br />#ifndef RC_INVOKED<br />#include <br />#include <br />#include <br />#includ

2010-07-22 22:13:00 2128

转载 C++中的.hpp

<br />hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该cpp文件即可,无需再 将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与dll,因此非常适合用来编写公用的开源库。<br />1、是Header Plus Plus 的简写。<br />2、与*.h类似,hpp是C++程序头

2010-07-22 22:04:00 3005

原创 #include和#include" "搜索路径的区别。

<br />#inlcude"  "从当前路径开始.<br />#include<  >从系统规定路径开始.

2010-07-22 09:30:00 598

转载 自己实现strcat();

<br />#include <stdio.h>char* Strcat(char *str1,char *str2){ char* tempt = str1; while(*str1!='/0') { str1++; } while(*str2!='/0') { *str1 = *str2; str1++; str2++; }

2010-07-21 18:25:00 877

转载 软件测试的重要流程:BUG的管理流程

<br />软件测试的主要目的在于发现软件存在的错误(Bug),对于如何处理测试中发现的错误,将直接影响到测试的效果。只有正确、迅速、准确地处理这些错误,才能消除软件错误,保证要发布的软件符合需求设计的目标。在实际软件测试过程中,对于每个Bug都要经过测试、确认、修复、验证等的管理过程,这是软件测试的重要环节。<br /><br />错误跟踪管理系统   <br /><br />  为了正确跟踪每个软件错误的处理过程,通常将软件测试发现的每个错误作为一条条记录输入制定的错误跟踪管理系统。<br /><br

2010-07-21 18:23:00 1274

原创 局部变量和全局变量在内存中的存储位置

<br />静态存储方式:是指在程序运行期间分配固定的存储空间的方式。<br />动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。<br /> <br />用户存储空间可以分为三个部分:<br />1)       程序区;<br />2)       静态存储区;<br />3)       动态存储区;<br /> <br /> <br />全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不动态地进行分配

2010-07-21 18:19:00 30208 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除