05 2010 档案

摘要:在微软的c/c++ 编译器中,增加了对于栈溢出进行检测的参数 “/GS”,在调试shellcode 的时候,发现vs2005 产生的code 和 vc6 产生的code 有些不同,才让我注意到这个问题。 写了这样的一个测试程序: void foo(const char * datas) { char szbuf[32]; strcpy(szbuf, datas); } 汇编的代码如下:00411F70 push ebp 00411F71 mov ebp,esp 00411F73 sub esp,0ECh 00411F79 push ebx 00411F7A push esi 00411F7B 阅读全文
posted @ 2010-05-09 15:07 麒麟子MrKylin 阅读(835) 评论(0) 推荐(0) 编辑
摘要:先看这样的代码1voidMyNew(int*p)2{3p=newint;4}56intmain()7{8int*p=NULL;9MyNew(p);10}开始写了一篇函数中分配内存的问题,通过说明他们产生了拷贝,而导致p不能成功分配。但并未提出事实根据,下面我们来仔细看看具体原因。我们需要弄清两点:1、main函数中的p与MyNew函数中的p是不是一样;2、如果不一样,是怎么导致了不一样的。第一点很好看,我们可以在编译器(VC环境,我用的是VS 2005)的监视窗口中跟踪p的地址。 在监视窗口中增加一个对 &p的监视,然后我们在int*p = NULL处添加一个断点。单步执行,停在MyNew函 阅读全文
posted @ 2010-05-05 09:03 麒麟子MrKylin 阅读(407) 评论(0) 推荐(0) 编辑
摘要:冒泡排序与选择排序的不同、快速排序与选择排序的结合 冒泡排序可以说是最简单的排序了。我们学习C语言循环的时候都会提到。可见这是一种浅而易懂的排序算法!但不见得这种算法就没用处。首先,他很容易理解,这样在各种教材中比较适合拿来“开门见山”。其次是他很稳定。 若明确知道即将排的数字很混乱,随机性很强,则用冒泡排序也未偿不可。 谁让他始终是O(n^2)呢。冒泡排序法代码:1voidBubbleSort(inta[],intl)2{3for(inti=0;il;++i)4{5for(intj=i+1;jl;++j)6{7if(a[j]a[i])8{9intt=a[i];10a[i]=a[j];1 阅读全文
posted @ 2010-05-04 23:59 麒麟子MrKylin 阅读(511) 评论(0) 推荐(0) 编辑
摘要:内存池实现有许多种,各有不同的优缺点。这里不是主要说内存池,只是觉得这个内存池中的指针用得很飘逸!template class T,int AllocSize = 50class MemPool{public: static void* operator new(size_t allocLength) { if(!mStartPotinter) { MyAlloc(); } //将当前指向空闲内存起始地址作为反回地址 unsigned char* p = mStartPotinter; //取出空闲区域前4字节的值,赋值给空闲地址 //因为前四字节中存放了下一个BLOCK 阅读全文
posted @ 2010-05-03 15:06 麒麟子MrKylin 阅读(336) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示