自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(26)
  • 资源 (4)
  • 收藏
  • 关注

转载 转 怎样才算熟练掌握数据结构、常用算法?

节约版------------------------------------------------------bigbug9002:不可能都完全记住那么多的算法.  常用算法,拿过来就可以写出来  不常用的,拿起书来,看10分钟,就能理解算法(因为以前记过).  对以前没有记过的算法,就不好说了,难的可能要研究好几天.  这样就可以了.  应该熟练掌握的常用的算法应该有:  各种排序算法(插入排序、冒泡排序、选择排序,快速排序,堆排序,归并排序)  线性表(一般的线性表,栈,队列)的插入和删除  二叉树

2010-11-28 00:50:00 2228 2

原创 图邻接表C语言实现 拓扑排序

ALGpraph.h#pragma once/************************************************************************/ /* 图的邻接表存储结构 */ /************************************************************************/ #define

2010-11-26 14:40:00 4367

原创 图的邻接矩阵存储 深度优先遍历 广度优先遍历 C语言实现

<br />MGraph. h<br />#pragma once#include "Queue.h"#define MaxVertexNum 100typedef char VertexType;typedef int EdgeType;typedef struct { VertexType vexs[MaxVertexNum]; EdgeType edges[MaxVertexNum][MaxVertexNum]; int n; //当前图顶点数 int e; /

2010-11-26 11:08:00 9839

原创 图的邻接表存储 深度优先遍历 广度优先遍历 C语言实现

<br />ALGraph.h<br />#pragma once#include "Queue.h"/************************************************************************/ /* 图的邻接表存储结构 */ /*****************************************************

2010-11-26 11:06:00 8231 2

原创 strcpy、wcscpy与_tcscpy关系 strcpy_s与strcpy比较

C++标准库函数提供了字符和字符串的操作函数,并提供了其UNICODE版本,如:char *strcpy(char *strDestination, const char *strSource);  wchar_t *wcscpy(wchar_t *strDestination, const wchar_t *strSource); wcscpy()即为strcpy()的宽字符版本,与_T类似的,Visual C++提供了类似的同名函数:#ifdef  UNICODE       #define _tcsc

2010-11-25 19:04:00 11515

转载 匈牙利命名规范 WIN32开发常识

匈牙利命名规范几年以前,Charles Simonyi(他后来成为微软的著名程序员)设计了一种以前缀为基础的命名方法,这种方法后来称为"匈牙利表示法"以记念他.他的思想是根据每个标识符所代表的含义给它一个前缀.微软后来采用了这个思想,给每个标识符一个前缀以说明它的数据类型.因此,整型变量的前缀是n,长整型变量是nl,字符型数组变量是ca,以及字符串(以空类型结尾的字符数组)以sz为前缀.这些名字可能会非常古怪.比如说:lpszFoo表示"Foo"是一个指向以空字符为结尾的字符串的长整型指针.这种方法的优点是

2010-11-25 13:03:00 1257

转载 这些道理不懂,你注定就是穷打工的命

首先声明:如果你是“愤青”或“类愤青”,对不起,请放下此书,因为文中的观点可能会伤害你的心灵(不是对“愤青”有偏见,而是“愤青”们多数都是“纯洁”得不识人间烟火的主儿,成天充满“乌托邦”式的幻想,实在不适合在职场上发展。我相信“愤青”肯定有“愤”的理由。有人说历史上的每一次进步都是由“愤青们”推动的,比如屈原、鲁迅,并以此来反驳我。对于这种观点,我的看法是:如果你还没有“愤”到能够推动历史车轮前进的地步,那么,你最好正视目前的现实生活,做一个“奋青”更为实际。时势造英雄。要怪,就怪没有生在那个可以让“愤青”

2010-11-24 15:09:00 756

原创 [c/c++] 时间、日期处理

类型:time_t相关函数: time()  http://baike.baidu.com/view/10368.html#2difftime() http://baike.baidu.com/view/656621.htmmktime()  http://baike.baidu.com/view/2884575.htm类型:struct tm相关函数:localtime() http://baike.baidu.com/view/1080853.htmgmtime() http://baike.baidu

2010-11-20 15:10:00 798

转载 C语言变量声明内存分配

一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。2、堆区(heap) — 在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—编译器编译时即分配内存。全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态

2010-11-18 00:56:00 796

原创 [C/C++] 构造最优二叉树-赫夫曼(哈夫曼、Huffman)树算法实现

一、基本概念1、赫夫曼(Huffman)树又称最优二叉树或最优搜索树,是一种带权路径长度最短的二叉树。在许多应用中,常常赋给树中结点一个有某种意义的实数,称此实数为该结点的权。从树根结点到该结点之间的路径长度与该结点上权的乘积称为结点的带权路径长度(WPL),树中所有叶子结点的带权路径长度之和称为该树的带权路径长度,通常记为:2、两结点间的路径:从一结点到另一结点所经过的结点序列;路径长度:从根结点到相应结点路径上的分支数目;树的路径长度:从根到每一结点的路径长度之和。3、深度为k,结点数为n的二叉树,当且

2010-11-16 10:23:00 7986 3

原创 [c/c++] typedef和define的区别

typedef和define都可以用来给对象取一个别名,但是两者却有着很大不同。1. 首先,二者执行时间不同关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能。Define则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。#define用法例子:#define f(x) x*xmain( ){ int a=6,b=2,c; c=f(a) / f(b); printf("%d /n",c);}程序的输出结果是: 36,根本原因

2010-11-13 14:28:00 846

转载 vc中socket编程步骤及实例

sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。在这个程序中,将两个工程添加到一个工作区。要链接一个ws2_32.lib的库文件。服务器端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket());2:绑定套接字到一个IP地址和一个端口上(bind());3:将套接字设置为监听模式等待连接请求(listen());4:请求到来后,接受连接

2010-11-12 12:24:00 1277

原创 [C/C++] 先序建立二叉树| 先序、中序、后序遍历二叉树| 求二叉树深度、节点数、叶节点数 算法实现

/* *   BinTree.h */#define TRUE        1#define False       0#define OK          1#define ERROR       0#define INFEASIBLE -1#define OVERFLOW   -2typedef int Status;   //Status是函数的类型,其值是函数结果状态代码/* 定义二叉树结点类型 */typedef char ElemType;/* 定义二叉树的数据结构 */typedef st

2010-11-09 08:39:00 4418

原创 C/C++中near和far的区别

在80286以前的微处理器(CPU)组成的确16位机上,Windows操作系统(包括DOS)对于内存是分段使用的(分段内存模式,Segment   Memory   Mode)。运行在这些16位CPU微机上的Windows(Windows   1.0-3.1)被称为“Win16”。从80386开始的32位CPU开始,为了兼容,也采用上述分段内存模式,这就导致了near(short)、 far(long)指针的出现。    从Windows   95开始的32位机上,Windows支持32位平面内存模式(与“

2010-11-07 11:28:00 1852

转载 关于PE病毒编写的学习(十)——追加病毒的编写(下)

 原本这一篇应该和上一篇同时发,但是我的原来代码写得很烂,而且由于我的目标是编写一个“追加病毒”框架,代码又要具备良好的模块特征。这两天改来改去,已经头脑混乱了,所以还是先发文章把原来的代码挂上,有时间再改,我会配上说明。  另外提一句,我把一个bug写再AddSection这个函数里,很多教学码也故意写这个错误,这个错误本意是修改由于PE文件头的修改使“xx值”应适当变化,实际写入的是空位置,这个值不应该变化,这个画蛇添足的行为会导致被感染文件出现一个对齐问题的错误,使系统认为它不是一个有效文件。自己独立

2010-11-07 08:35:00 766

转载 关于PE病毒编写的学习(八)——定位API的N种方法(2010年10月25更新)

由于大部分的文件感染型病毒框架都不可以像“前置病毒”那样拥有自己的输入表,因此需要自行定位API说一千道一万,想要定位API,大方向是要定位Kernel32.dll的基地址。总结所以这些方法,可以分为是五个小方向,它们又产生很多变种。一、定位kernel32.dll基地址的方法(1)硬编码方式    由于kernel32.dll的基地址在相同版本windows下,基本上它的位置是固定的。这种方法在早期的PE病毒中很常见,现在已经很少使用了。(2)利用程序初始化时,首先寄存器或堆栈中保留的kernel32.d

2010-11-07 08:34:00 736

转载 关于PE病毒编写的学习(九)——追加病毒的编写(上)

 OK,兑现我的承诺,从本章开始讲述“追加病毒”的编写方法。我们将实现一个只弹出对话框的良性病毒,但是考虑到这个代码可能造成的危害,我会在感染模块中写入一个小Bug。不过,对于大家的学习是毫无影响的。  回到正题,先介绍一下“追加病毒”,在DOS时代中,这种病毒相当常见。由于.com文件的入口点是固定的,而且我们知道DOS平台程序可以随意使用中断,因此追加病毒只要将病毒代码追加到宿主文件尾,然后修改入口点代码成“jmp [病毒入口点]”,病毒执行完成后,再jmp到宿主程序。  到了win32平台下,这种方法

2010-11-07 08:34:00 700

转载 关于PE病毒编写的学习(六)——关于PE文件结构操作的程序编写

对PE文件结构的各个值定义和作用,这里不提了,网上资源很多,百度一下就好了。所以,本章只说一下,作为代码编写者对PE文件结构操作的方法和技巧。还是通过改进代码,来体会一下吧。  你应该记得前面的BOOL IsPEFile(HANDLE hFIle) 这个函数吧,它的作用是判断文件是否为PE格式文件。它把文件句柄作为参数,虽然许多函数需要文件句柄这个参数,但是作为对PE文件结构操作的函数,这样做是不恰当的,因为如果这样做就要频繁的使用SetFilePointer()、ReadFile()、WriteFile(

2010-11-07 08:33:00 633

转载 关于PE病毒编写的学习(七)——重定位的谬误和它的正确写法

1.为何需要重定位?病毒的生存空间就是宿主程序,而因为宿主程序的不同。所以病毒每次插入到宿主程序中的位置也不同。那么病毒需要用到的变量的位置就无法确定。所以这就是病毒首先要重定位的原因。在我们编写程序的时候,所用到的变量的位置都是相对与程序某一个位置的偏移,正常的程序加载的地址是唯一的,所以它们不需要重定位。而病毒的加载是随机的所以就有了重定位的过程。虽然加载的位置不一定,但是变量到某一个位置的偏移却是固定的。所以重定位的基本原理就是找到这个特殊的位置。具体的方法有很多种。这里说几种常见的。前面介绍的“前置

2010-11-07 08:33:00 1745

转载 关于PE病毒编写的学习(五)——病毒如何做标记和记录信息

<br /><br />1.做标记和记录信息的区别<br />   做标记:它是为了其它病毒识别自己,而在固定或符合一定规则的位置上记录的符号信息。<br />   记录信息:它是为了病毒本身正确运行,而存储的某些信息,甚至是部分代码,比如解密程序的随机密匙、所感染宿主文件的某些信息<br />2.那些地方可以做标记和记录信息<br />   (1)可标记的位置<br />       1/程序的入口区域和尾部区域;并非一定是开头和结尾,比如<br />              VirusStart:<b

2010-11-07 08:32:00 654

转载 关于PE病毒编写的学习(四)——关于历遍磁盘的讨论

在上一章中的“前置病毒”中,由于它只是一个测试病毒,因此该病毒只是搜索病毒文件所在文件夹的exe文件。显然,为了让它具有更好传染性,能够历遍整个磁盘或某些重要文件夹的特性,是十分重要的。开始讨论历遍之前,先让我们来改进原来的代码首先在上一章的代码中,只要结尾是“.exe”的文件就被判断为"可执行程序",这种方法在大多数情况下是正确的,但是如果程序经过压缩或加密后,该文件的PE结构会有改变,虽然它实际上让然能履行可执行程序的功能,但针对PE文件的操作可能出错。因此,确定.exe后缀之后,做更加详细的文件类型检

2010-11-07 08:31:00 617

转载 关于PE病毒编写的学习(三)

<br /><br />历史上,在windows95发布后,用高级语言编写的外壳病毒,经过简单地改造编译,就能从DOS平台迁移到windows平台上。<br />并且在这当中很多“前置病毒”,仅仅需要重新编译。<br />另外之所以用“前置病毒”作为第一分析样本,理由如下:<br />1.它具有基本病毒功能模块,这些模块在文件型病毒中是通用的<br />2.其框架结构,所需病毒技巧极少<br />3.拓展方便,通过不断地加入新功能,循序渐进的学习各种病毒技巧<br />4.加载新模块方便,适合测试其它病毒的

2010-11-06 23:01:00 550

转载 关于PE病毒编写的学习(二)

这篇说一下,PE病毒需要那些技术积累,以及这些技术的学习方法和重点是什么。1.先说汇编吧      其实我说的汇编关于两个方面:汇编语言设计 和 微机原理      汇编语言设计,它也是两方面: 常规教材讲的 和 病毒的技巧      常规教材上讲的基本都得学会,最基本的8086/8088肯定都得会,各种书籍视频很丰富,学起来不难。80x86也是必须得学,建议看一下《80x86汇编语言程序设计》(杨季文著,清华大学出版),这本书的后半本写的很精彩,至于罗云杉的那本,明白意思就行了,因为使用Radasm,简化

2010-11-06 22:45:00 616

转载 关于PE病毒编写的学习

首先声明,因为害怕被删帖,我肯定不会展示正确完整病毒代码,但是会介绍可行的学习方法。网上有很多关于介绍PE病毒编写的帖子,但基本上都是分析源码FunLove和《计算机病毒分析与对抗》中PE病毒的代码翻版。事实上这两个代码是用于原理展示,前者根本通不过编译,后者编译后并不能正确运行,虽然有部分帖子对其做了修改,受到正统汇编教材代码的影响,导致其修改方法是错误的。关于病毒编写充满了各种各样的迷信和谬论,因此在学习的过程中,我走了不少弯路,让我来一一说明:误区1:PE病毒一定要用汇编来写,其生成文件小,效率高,病

2010-11-06 22:38:00 806

原创 const static 区别

1、使用const  这一点在很多经典的关于C 和C++的书籍中是必谈的要点。在《Exceptional C++》一书中,对这点有很精彩的描述,现摘录如下:“没有正确的安全意识的枪手在世界上是不可能活的很长的。const 观念不正确的程序员也是一样和没有时间戴紧帽子的正确,没有时间检查带电电线的电工一样不会活的很长。”在C 语言中,const 修饰符表示告诉编译器此函数将不会改变被修饰的变量的指向的任何值(除了强制类型转换)。当把指针作为参数传递时,总是合适地使用const,不仅可以防止你无意中错误的赋值,

2010-11-04 16:31:00 816

转载 窗口刷新问题(WM_PAINT、BeginPaint、EndPaint的说明)

1. 系统何时发送WM_PAINT消息?  系统会在多个不同的时机发送WM_PAINT消息:当第一次创建一个窗口时,当改变窗口的大小时,当把窗口从另一个窗口背后移出时,当最大化或最小化窗口时,等等,这些动作都是由 系统管理的,应用只是被动地接收该消息,在消息处理函数中进行绘制操作;大多数的时候应用也需要能够主动引发窗口中的绘制操作,比如当窗口显示的数据改变的时候,这一般是通过InvalidateRect和 InvalidateRgn函数来完成的。InvalidateRect和InvalidateRgn把指定

2010-11-02 12:56:00 876

中国移动通信CMPP3.0 SP端模拟器 C++实现(附测试用ISMG)

中国移动通信CMPP3.0 SP端模拟器 C++编写 实现了SP与ISMG之间所有消息

2011-03-08

大学生攻克Linux系统教程(又名天下没有难学的Linux)

大学生攻克Linux系统教程(又名天下没有难学的Linux)

2010-11-06

Nostarch.The.Art.of.Debugging.with.GDB.DDD.and.Eclipse.2008

Nostarch.The.Art.of.Debugging.with.GDB.DDD.and.Eclipse.2008

2010-11-06

Windows环境下32位汇编语言

Windows环境下32位汇编语言

2010-11-06

空空如也

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

TA关注的人

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