自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 android下so文件的注入和hook

上周主要在弄android下的so文件注入和函数hook起初想法很简单,

2014-10-27 18:10:17 3698 3

原创 lua_tinker浅析

Lua也用了有段时间了,lua跟c++的交互以前用的是lua_bind,但是需要boost库,太大了,我的需求也没那么多。所以项目引入lua的时候,我决定找个简单点的库,这时候发现了lua_tinker,很小巧,就两个文件一个.h和.cpp,引入也很方便。网上看了看教程,我要的功能都有了,就是它了。用了这么长时间,也没仔细研究研究,也就是机械的用而已,这样可不行。花了两天时间研究它,下

2014-10-21 21:56:24 1064

原创 利用__PRETTY_FUNCTION__宏实现服务器消息机制

游戏服务器总是会与clie通信的

2014-10-17 12:33:35 1103

原创 hello world!

hello world!是我刚学习c/c++shih

2014-10-17 11:24:58 409

原创 简单的内存泄露检查工具

最近工作挺忙,博客也好久没更新,这可不是什么好事,写博客的习惯还是得坚持的。前几天无聊,就写了一个简单的内存泄露检测工具。原理很简单,直接上代码吧。.h文件#ifndef _Z_NEW_H_#define _Z_NEW_H_#if defined MEM_DEBUG#include #include #include class MemRec{

2011-12-05 18:58:43 482

原创 CEGUI中的消息提示类messagebox

前段时间一直在看CEGUI,研究samples的时候,想随便改改代码,发现类似windows中的消息提示函数或类,是没有的,需要自己写。就简单的写了一个.h文件代码//start of namespace MYTESTnamespace MYTEST{ //

2011-10-17 13:31:58 710

原创 算法导论 二叉查找树

在二叉查找树进行基本操作的时间与树的高度成正比。二叉查找树基本性质:设x为树中某个结点。如果y是x的左子树中的一个结点,则key[y] 二叉查找树基本操作:1.在二叉查找树中查找某个给定的key,有递归和非递归的版本。递归:根据二叉查找树的性质,在某个结点左子

2011-07-05 21:23:51 358

原创 算法导论 计数排序

不管所堆排序,还是快速排序,排序的本质都所基于各个元素之间的比较。而可以证明的是,所有基于比较的排序算法,在最坏情况下的时间复杂度的下界是O(nlgn)。 而,计数排序不所基于元素之间的比较,而是,对于一个输入x,在整个输入中确定出小于x的元素个数,这样就可以把元素x直接放在它在最终输出数组中的确定位子上。 基本思想:所有输入放入数组A中(元素下标从1开始)最终输出在数组B

2011-06-15 22:01:00 324

原创 算法导论 习题 6.5-8

题:请给出一个时间为O(nlgk)、用来将k个已排序链表合并为一个排序链表的算法。此处n为所有输入链表中元素的总数。(提示:用一个最小堆来做k路合并) k个已排序链表,假设每一个链表的第一个元素为root(i)  (i = 1,2,3...k)。那么可以为这k个元素root(i)构造一个最小堆Heap_Min,其时间复杂度为O(lgk)。此时堆顶元素假设为root(x),根

2011-06-03 22:06:00 543

原创 算法导论 堆排序

 堆的基本概念:堆是一个完全二叉树,用数组来存储这个结构的时候,A[1...length[A]]可以表示有效值,但heap_size[A]以外的值都不是属于堆的,可以视为无效值。 对于数组中下标为i的元素,根据二叉树的性质可以得到:其父节点下标为,P = n/2(下取整)左孩子: L = 2*i右孩子: R = 2*i + 1 最大堆:除了根节点外的每个节点i,

2011-06-03 15:50:00 489

原创 算法导论 习题 5.4-4

<br />题:<br />一个聚会需要邀请多少人,才能让其中很可能有3人的生日相同?<br /> <br />解:<br />设房间人数为m,一年有n天<br />1<= i <= m,1<= r <= n<br /> <br />Pr{bi=r} = 1/n;<br />Pr{bi=r and bj=r and bk=r} = Pr{bi=r} * Pr{bj=r} * Pr{bk=r} = 1/n^3;<br />Pr{bi=bj=bk} = ∑Pr{bi=r and bj=r and bk=r} (

2011-05-31 13:49:00 884

原创 算法导论 习题 5.4-1

<br />题:<br />一个房间里必须要有多少人,才能让某人和你生日相同的概率至少为1/2?必须要有多少人,才能让至少两个人生日为7月4日的概率大于1/2?<br /> <br />解:<br />1.假设一年有n(365)天,房间里面有x人(不算自己)<br />为求某人与自己生日相同,可求其反面,即房间里面没人跟自己生日相同,他们每个人生日可以在n天中选择除去我生日剩下的n-1天<br /> Pr{bi=r}= (n-1)/n;<br /> Pt = IIPr{bi} (i = 1,2,...x);

2011-05-31 12:57:00 1453

原创 汇编中的结构体表示

<br />我认为,汇编中一切皆地址。<br />在c/c++使用很多的结构体,在汇编中是如何表示的呢?其实,在汇编中根本就没有什么结构体的概念,结构体本质就是一堆连在一起的数据。只不过有人把他们想象成一个整体,并以此产生结构体的概念,这与结构体中带有变长数组时候的情形一样:<br />struct Test{ int x; char c; int cnt; int data[0]; Test() { x = 0;

2011-05-18 20:02:00 5805

原创 汇编中的除法指令

AT&T汇编中的除法指令也分为两种:signed、unsignedunsigned:divdivisor//除数 a 8、16、32-bits register or memory value被除数隐含的放在ax、dx:ax、edx:eax中其中,除数的大小依据被除数大小有限制1.如果被除数是16bits,那么除数最大只能是8bits2.同理,被除数是32bits,那么除数最大是16bits3.同理,被除数的64bits,那么除数最大是32bitsdiv指令后缀依据divisor大小变化。除法指令的结果分为

2011-05-09 14:52:00 7425 1

原创 汇编中的乘法指令

汇编中的乘法指令分为signed、unsigned指令两种。unsigned:mulsource//the source can be a 8、16、32-bits unsigned register or memory value你可能在想,只有一个数怎么进行乘法运算呢,其实还有一个乘数已经隐含的放在eax中,其中根据mul指令后缀b、w、l大小放入al,ax,eax中。由于乘法运算后产生的数比其中任何一个都大,所以一般用2倍于source位长的空间存放计算结果。例如:1.如果source是8-bits那

2011-05-09 12:47:00 9705

原创 用select实现I/O多路转接

写网络程序服务器代码时,会遇到同时与多个client进行通信的问题,假如这些与client连接的socket都存储在SockArray[max_num]中,为了接受每个client的数据,可能会这么做:for(int i = 0;i != max_num; ++i) //伪代码{if(SockArray[i]) //array初始化为-1{ int n = recv(SockArray,....); ........}}这样做会遇到一些问题:1.recv函数默认是阻塞

2011-04-29 14:41:00 858

原创 函数返回值如何传递

一般情况下,函数返回值是通过eax进行传递的,但是eax只能存储4个字节的信息,对于那些返回值大于4个字节的函数,返回值是如何传递的呢?假设返回值大小为M字节1. M 2. 4 3. M > 8,如何传递呢?测试代码://test.cppstruct big_thing{ char str[64];};big_thing test(){ big_thing big; big.str[1] = 'c'; return big;}int

2011-04-28 14:54:00 2456

原创 游戏寻路——A*算法

A*其实是一种思想,采用启发式遍历来得到起始点到目标点的路径。A*的基本思想:f(n) = g(n) + h(n);其中,g(n)是从起始点到当前点V的实际代价,h(n)表示当前点V到目标点的代价估计,一般用两点间x,y坐标差的平方和表示。则f(n)值就表示该点的估价值了,f值越低表示该点越优。最佳路径就是一系列最优节点的集合。算法描述:1.把起始点加入到开启列表,开启列表表示将要搜索的点的集合。2.重复如下的工作:a.寻找开启列表中F值最低的点,我们把它称为当前点V。b.把它添加到关闭列表,并把它从开启列

2011-04-25 12:01:00 624

原创 在C/C++中使用lua

<br /><br />(1)编译、安装lua<br />1、在lua官网下载lua源码 xxx..tar.gz<br />解压 tar -xzvf   xxx..tar.gz<br />cd xxx  //进入解压后的目录<br />ls    //可以看见有一个makefile文件<br />2、编译<br />输入 make  zzzz     //其中zzz为platform 如linux、aix,mac os等<br />3、编译完成 安装<br />输入 make install<br />完成

2011-04-23 12:11:00 480

原创 游戏寻路——深度优先搜索

基本思想: 从起始点开始开始遍历,首先访问起始点V,再访问与V相邻的点W,接着访问与W相邻且没访问过的点,以此类推,直至某个被访问的顶点的所有相邻顶点均被访问为止。 然后退回到尚有相邻顶点未被访问的顶点R,再从R的一个未被访问的顶点出发,重复上述步骤,直至图中所有和V有路径相通的顶点都被访问过。 若图中尚有顶点未被访问,则另选图中一个未被访问的顶点做起始点,重复上述过程直至图中所有顶点都被访问为止。代码://deepsearch.h#ifndef _DEEPSEARCH_H#define _DEEP

2011-04-23 11:17:00 831

原创 如何在窗口中画直线

<br /><br />如何画直线,看起来似乎很简单,拿个直线方程,遍历X求出Y,再把对应点画出来不就行了么,嘿嘿,没那么简单~<br />平时我们所说的直线是在实数域的,也就是说对应的Y可能是小数,而在屏幕上,所画直线是基于正整数域的,那么根据直线方程如何画直线呢?<br />先考虑斜率 0 < k < 1的情况<br />1.Bresenham算法<br />该算法由Bresenham在1965年发明,它到底做了什么事呢?其实想法很简单,就是每X移动一个像素,则考虑Y应该是如何移动。<br />由于由(

2011-04-23 10:57:00 869

原创 一个简易的配置类及其实现

<br /><br />配置文件基本格式:<br />//test.ini<br />[hello]<br />name    =    zhangsan<br />sex    =    M<br />[world]<br />//this is a comment<br />key    =    value<br />配置文件由<br />段名:如,hello等<br />键名:如,name等<br />值,如,zhangsan等构成<br />其中"="左右为制表符分隔<br />由"//"打头的注

2011-04-23 10:55:00 444

空空如也

空空如也

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

TA关注的人

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