自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 资源 (3)
  • 收藏
  • 关注

转载 new和malloc

我们知道,使用malloc/calloc等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即是检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的。但是,如果你简单的把这一招应用到new上,那就不一定正确了。我经常看到类似这样的代码:    int* p = new int[SIZE];        if(p==0) //检查p是否空指针

2016-01-28 16:38:39 245

原创 随机洗牌

随机洗牌有多种思路:1、抽牌法#define NUM 54void Shuffle(){ int card[NUM]; for (int i = 0; i < NUM; i++) { card[i] = i+1; } for (int i = NUM-1; i >= 0; i--) { int n = rand() % (i+1); int num = card

2016-01-28 15:12:16 533

原创 汉诺塔

汉诺塔问题可以有几种解决方法:一、递归递归方式是最简单的也是最容易想到的一种方式。假如n个圆盘要从a 移动到 b,则需要分三步:1、最上面n-1个圆盘从a先移动到c  2、最后一个圆盘从a移动到b3、n-1个圆盘从c移动到bvoid move(int n, char cSrc, char cDest, char cMid){ if (1 == n) { print

2016-01-28 14:08:18 436

原创 C语言笔记

1、C语言动态内存char *pStr = (char*)malloc(sizeof(char)*10);memset(pStr, 0, 10*sizeof(char));malloc和memset一般是一起使用的,malloc分配的内存是不进行初始化的,如果不用memset初始化在进行右值操作时很有可能出现错误。若申请了两段内存空间pStr1和pStr2,当pStr = p

2016-01-27 12:35:43 317

原创 Git使用

Git是什么?Git是目前世界上最先进的分布式版本控制系统(没有之一)。是程序版本控制的好帮手。有了它你就可以把别人忙于版本保存修改的时间用来喝茶什么的。Git是怎么产生的呢?话说以前是没有Git的(废话。。),大多数的版本控制系统是收费的,与之相冲突的就是开源了。当时Linux就是属于开源这一类。当时Linux系统就是用BitKeeper的商业版本控制系统,但是出于人道主义的考虑,允

2016-01-26 17:01:20 379

原创 加壳实现

学习了PE文件结构一段时间了,于是想写一个简单的壳更好的掌握所学的内容。一、加壳思路加壳软件一般要编写两部分内容(加壳软件和壳软件),目的是把壳软件附加到要保护的可执行文件里面实现一些目的。目前而言壳软件用dll来实现是比较简单的方式,当然也可以用其他的方式。加壳软件:(只增加一个段的实现方式)1>加载要被加壳的文件,并分析其PE结构。2>加载DLL到内存,并分析其PE结构,得

2016-01-19 11:45:54 3576 3

原创 Kernel32加载地址查找的基本方法

搜索内存中的API有许多方法,主要的是要找到KERNEL32.DLL的加载地址,常用的基本方法也就几种。一、通过线程初始化时压入堆栈的ExitThread的地址来得到KERNEL32.DLL的地址。二、通过SEH异常链表三、通过TEB得到PEB结构的地址

2016-01-13 12:54:55 1743

原创 代码重定位

重定位就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程,也就是说在装入时对目标程序中指令和数据的修改过程。为什么需要重定位?程序员在编写程序时,在使用某些常量、全局变量时,编译器把这些数据的地址编译成一个绝对地址(比如:call 0x400100),是以ImageBase(0x400000)为基准。当程序加载到ImageBase时,程序正常运行,可是当程序加载地址为0x5000

2016-01-12 08:49:15 1769

转载 CreateFileMapping、MapViewOfFile

CreateFileMapping的MSDN翻译和使用心得  测试创建和打开文件映射的时候老是得到"句柄无效"的错误, 仔细看了MSDN以后才发觉是函数认识不透, 这里把相关的解释翻译出来HANDLE CreateFileMapping(  HANDLE hFile,                       //物理文件句柄  LPSECURITY_ATTRIBUTES

2016-01-11 09:10:47 550

转载 线程本地存储TLS(Thread Local Storage)的原理和实现——分类和原理

本文为线程本地存储TLS系列之分类和原理。一、TLS简述和分类我们知道在一个进程中,所有线程是共享同一个地址空间的。所以,如果一个变量是全局的或者是静态的,那么所有线程访问的是同一份,如果某一个线程对其进行了修改,也就会影响到其他所有的线程。不过我们可能并不希望这样,所以更多的推荐用基于堆栈的自动变量或函数参数来访问数据,因为基于堆栈的变量总是和特定的线程相联系的。不过如果

2016-01-09 08:45:03 327

转载 WM_CREATE和WM_INITDIALOG

首先引入网上搜索到的关于这两个消息比较靠谱的区别:     在响应WM_CREATE消息响应函数的时候,对话框及子控件还未创建完成,亦是说只是通知系统说要开始创建窗口啦,这个消息响应完之后,对话框和子控件才开始创建。因此在此消息响应函数中无法对控件进行修改和初始化。    而WM_INITDIALOG消息响应函数是在程序运行时,当其对话框和子控件全部创建完毕,将要显示内容的时候发送的消息。

2016-01-08 11:30:42 646

转载 Windows32编程一些问题

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

2016-01-08 11:07:24 414

转载 Unicode 与 ANSI 字符串转换

如果你经常在 Windows 平台下写程序的话,我相信你一定会遇到 Unicode 与 ANSI 字符串之间的转换(string  CString之类的)。要想实现 Unicode 和 ANSI 之间的转换,我之前的一篇文章中简单的介绍了一下:VS 系列 CString 转 string 方法,其实文中的方法是我蒙出来的,简单有效,至于原理我也不甚明了。大部分人使用的是以下两种

2016-01-07 08:51:45 568

一个简单的壳

用C++实现的一个简单壳的Demo,其中实现了代码段简单的加密。麻雀虽小,五脏俱全。包含了许多编写加壳软件的基本方法。

2016-01-19

Orange'S一个操作系统的实现

Orange'S一个操作系统的实现 这本书的配套代码,一步步用代码实现的一个简单的操作系统,全过程易于理解,上手快

2015-10-21

linux内核源码V0.12

《Linux内核完全剖析:基于0.12内核》对早期Linux内核(V0.12)全部代码文件进行了详细、全面的注释和说明,旨在帮助读者用较短的时间对Linux的工作机理获得全面而深刻的理解,为进一步学习和研究Linux打下坚实的基础。虽然选择的版本较低,但该内核已能够正常编译运行,并且其中已包括了Linux工作原理的精髓。

2014-07-15

空空如也

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

TA关注的人

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