
masefee透视C++
文章平均质量分 94
本专栏主要针对C++进行细节和底层剖析,从本质上,从后台去诠释。以至通透之目的。
masefee
PC网络游戏开发。。
展开
-
C++/Debug模式查看EFL(标志寄存器)详解
在比如使用汇编指令如:ADC, SBB等指令时,我们为了心里那份好奇感就不得不去了解下FLAG寄存器(EFL)里面的东西。通过二进制详细的查看各标志位的值。然后这些需要用到标志寄存器的指令等就一目了然了。 - -迫不及待写了段测试代码来看看其中的秘密:#include int main( void ){ __asm { mov al, 0xff原创 2009-04-20 13:00:00 · 10111 阅读 · 8 评论 -
new操作符内部原理(一)
写了这样一段代码,我们来做分析:#include int main( void ){ int* ptr = new int[ 5 ]; for ( int i = 0; i { ptr[ i ] = i + 1; std::cout }} 我们new了5个数据的int类型空间,我们然后来看内存里面的分布:原创 2009-03-23 18:25:00 · 5814 阅读 · 6 评论 -
new操作符内部原理(二) 及 delete和free
前面我们说了new在分配空间的一些细节,这里作一些补充。其实我们在调用new时,在他的地层重载运算符里面是这样实现的:void *p; while ((p = malloc(size)) == 0) if (_callnewh(size) == 0) _STD _Nomemory(); return (p); 可以看出它是直接调用了我们C语言中常用的malloc函数来实现。由此我原创 2009-03-24 09:17:00 · 6291 阅读 · 0 评论 -
C/C++ HOOK API(原理深入剖析之-LoadLibraryA)
9月都快结束了,之前一直忙到写自己的东西加上上班。基本没有时间研究下汇编和C C++方面的感兴趣的东西。再怎么说嘛,9月还是得写一篇撒,以后每月至少一篇吧。给自己定了,希望大家监督。嘿嘿!这篇文章就来谈谈平常很常见的HOOK技术,这里呢。写得比较简单,方法很多。只讲原理!希望大鸟们别吐我口水哈 - -。好!切入正题。首先是概念吧。什么是钩子(HOOK)? 钩子(Hook),是Win原创 2009-09-18 12:36:00 · 28017 阅读 · 13 评论 -
深入C/C++之基于Cookie的安全检查(VS2005)
昨天在试着逆向一个有时间期限的LIB时,发现一些特别的检查函数,在之前的VC2003中是没有的,这些函数可谓是重量级函数。由于个人比较看不惯自己不懂的东西,出于不愤之情绪研究了下这些函数。首先在这里介绍个人认为较之其他几个更为重要的一种安全检查方式——基于Cookie的缓冲区溢出安全检查! 为了在发布版本中也能检测到缓冲区溢出,防止程序因缓冲区而受到攻击,VS2005(VC8)便增加了基于原创 2009-10-05 09:36:00 · 6694 阅读 · 11 评论 -
深入C/C++之基于CheckStackVars的安全检查(VS2008)
最近一直忙毕业的相关事情,加上工作,转眼间,又到月底了,之前承诺的每月一篇博文,前几天就一直在寻找到底要写什么,近两天又突然发现有很多东西可以写。本篇就先延续之前的一篇基于Cookie的安全检查机制(深入C/C++之基于Cookie的安全检查(VS2005))来介绍下另外一种在DEBUG版本下的安全检查,也就是CheckStackVars检查,话不多说,直接进入正题。 在VS2008下,函原创 2010-05-28 11:12:00 · 13565 阅读 · 13 评论 -
【GOF设计模式之路】-- Singleton
之前一直徘徊第一篇该写哪一种设计模式,最后决定还是以Singleton模式开始吧。之所以以它开始,原因在我于个人认为,相对来说它在设计上比较单一,比较简单一些。在通常情况下,它是最容易理解的。同样也正因为它容易理解,细节才更值得注意,越是简单的东西,往往会被我们忽略一些细节。关于Singleton模式的讨论和实现也非常的多,GOF设计模式也只对它进行了简单的描述,本文则打算相对全面的介绍一下Singleton模式,目的在于挖掘设计的思想。Singleton模式又称单件模式,我们都知道全局变量,Singlet原创 2010-09-23 19:36:00 · 15949 阅读 · 72 评论 -
【GOF设计模式之路】-- Factory
自从开始工作,就感觉精力相比在大学时有很大幅度的下降。大二那一年精力最旺盛,自从大二结束开始工作到现在,两年时间,似乎精力都已经不受自己控制了。如果对一些技术研究工作不是很感兴趣,下班之后基本上到晚上10点左右就想睡觉。工作两年加上大二的一年,一直到现在都坚持每天必须有新的东西进入脑子,进步倒是明显感受到了,但真担心现在的精力还能坚持几年的技术研究。但愿不要像大家说的到了30岁以后就不适合做技术研原创 2010-11-13 15:53:00 · 12865 阅读 · 47 评论 -
【GOF设计模式之路】-- Observer
差不多已经有3个月没有更新博客了,不知道都忙什么去了。我一直以来有一个不知道什么时候开始有的准则,要写博文就得写好,在每次的写作中应该总结上次的一些写法,弥补一些不足,同时要看到进步。所以在这3个月期间做了很多次打算要写本篇的,可总是被一些事和当时的心情所影响,为了追求质量,因此跳票到现在了,在此跟大家说声对不起。之前的一个月一篇的承诺没有实现,以后改正。好了,回到正题,在瞎扯淡就又该说原创 2011-02-27 14:47:00 · 11960 阅读 · 32 评论 -
C/C++条件(三目)运算符巧妙原理解析
最近一直研究一个对个人而言很有价值的一个LIB库的逆向。在今天下班后突然灵感闪现,这个断断续续逆了接近一周的核心管理类。终于在今天给逆完了。在最后一个函数里,碰到了之前基本没有用过的一条指令。(呵呵,高手见笑了!)当然光看单句的汇编指令,是没有办法看出具体的作用的,而且还很可能会认为原作者本来就是用汇编来实现的!呵呵,先不废话,先贴出反汇编代码一睹为快: mov dw原创 2009-11-09 21:30:00 · 8545 阅读 · 18 评论 -
C++中的【菱形虚继承】深入剖析
转眼间有过了一个月了,自从【C/C++语言入门篇】连载结束后,已经很久没有写博了。最近一直忙着本科毕业论文和工作上的任务,加上一个对于我来说非常重要的事情正在进行中。所以近段时间脑子一直处于绷紧状态,发现自己的脑细胞还真是不够用。加油! 今天有朋友问到一个问题,那就是在C++的多重继承中,出现菱形状继承的情况下,在构造对象时的内存分布及构造函数的调用流程上出现了问题。最后跟他解释清楚之后原创 2010-04-09 20:25:00 · 11998 阅读 · 11 评论 -
Inline HOOK API 改进版(hot-patching)
记得在之前写过一篇hook api的文章(C/C++ HOOK API(原理深入剖析之-LoadLibraryA)),那篇文章主要原理是构造一块代码字节,将LoadLibraryA函数的前面16个字节给修改,然后跳转到自定义的函数中。要调用正常的函数时,又将其unHook,这样一来再一次调用中,有一次unhook和一次hook,操作显得过于频繁。而且hook与unhook当时设计成了thiscall,因此维护传递this的寄存器(通常是ecx)就成了必然,再加上参数的传递,__Inline_Hook_Fun原创 2010-06-11 15:56:00 · 16018 阅读 · 13 评论 -
Inline Hook 之(监视任意函数)
前面已经写过两次inline hook的博文了,第一篇为:《C/C++ HOOK API(原理深入剖析之-LoadLibraryA)》,这篇博文的方法是通过修改任意函数的前面N个字节,实现跳转并进入到我们自定义的hook函数里,执行完毕我们的hook函数之后,再直接调用被hook的函数。第一篇的方法没有考虑多线程的情况,所以在多线程环境下会有问题。第二篇为:《Inline HOOK API 改进版(hot-patching)》,这篇的初衷是为了解决多线程的问题,因为这种方式是一直hook的,直到程序结束。原创 2011-04-15 21:05:00 · 41564 阅读 · 26 评论 -
【诡异的精简C语言程序】main函数隐藏
哎,几个月以来没有写博客了,时间太紧,精力又有限。今天正好有这个时间,打算写一篇今天在网上讨论的一个问题。我想大家应该都听过“国际C语言混乱代码大赛(IOCCC, The International Obfuscated C Code Contest)”吧,今天无意间在网上讨论到原创 2011-07-14 21:49:21 · 24060 阅读 · 81 评论 -
【动态分配栈内存】之alloca内幕
哎,下班回家就开始大扫除,一直到凌晨才搞定,真的累了。但是计划的是今天必须将本文写完,不写完睡不着觉。那就尽快切入正题吧! 我们经常使用malloc或者new等函数或操作符来动态分配内存,这里的内存说的是堆内存,并且需要程序员手工释放分配的内存。malloc对应原创 2011-09-30 03:38:19 · 34674 阅读 · 32 评论 -
【C/C++语言入门篇】-- 文件操作
最近实在是太忙了,这篇整整就推迟了1个月了,实在是对不起。之前本打算这个模块就结束了,文件操作就不写了,但是文件操作又是一个很重要的东西,而且也刚好能够总结之前我们学习的所有知识。同时也为了将文件操作这个初学者认为很神秘的东西给本质化。因此,本篇将逐一介绍C语言的文件操作。(本模块的命名本来是想C/C++一块儿讲解的,但是由于工作、毕业论文、业余时间的充电、还有要完成那个未知的梦等,因此因为时间问原创 2010-03-03 12:11:00 · 47781 阅读 · 238 评论 -
【C/C++语言入门篇】-- 剖析浮点数
前面一篇我们讲了位运算后,基本C语言的大块都提及了,一些细节和用法暂时不再本模块介绍了。希望我的心愿能够在我毕业之前给我的大学生涯划上一个圆满的句号。加油努力。 在本模块的第三篇就已经讲了基本的数据类型,其中把浮点数刻意留在了后面来介绍。我的理解是在我们理解了内存,指针,位运算等后,再来介绍浮点这个特殊而又普通的数据类型比较好理解。浮点数和基本类型数据的存储差别比较大,这里不是说存储形式的原创 2010-01-30 14:58:00 · 23760 阅读 · 72 评论 -
【C/C++语言入门篇】-- 位运算
回顾之前的篇幅,C语言的主体部分基本已经介绍完了。之所以没有介绍C++的相关特性是因为在之前的文章中C和C++在这些方面都有共性,所以在面向对象之前。我们先把这些共性给介绍完。也就是说在介绍面向对象之前,所有的文章都是CC++中都能使用的。从这点上来看,现在正极力奋斗于C++战线上的初学者还是很有用处的。 本篇继续沿着这条路线,到本篇为止包括本篇都还不会急于去介绍C++的面向对象的特性。那原创 2010-01-26 16:25:00 · 23847 阅读 · 79 评论 -
【C/C++语言入门篇】-- 结构体
前面两篇基本把指针给介绍完了,相信大家对指针已经不是那么陌生了。也不会因为指针和数组之间的关系而导致混淆了。大家可能也迫不及待想了解下后来的知识。今天我们就介绍下结构体。 对于结构体,既然叫结构体,形象上我们可以理解其就是一堆数据集合在一起形成一个结构。就比如一个学生的信息包括:学号、姓名、班级、年龄等等。这些信息都是属于这个学生的,因此我们就可以将这些信息统一绑定在一起。形成一个学生实体原创 2010-01-17 20:46:00 · 8974 阅读 · 39 评论 -
【C/C++语言入门篇】-- 数组与指针
前面一篇我们介绍了指针,相信大家对指针不再是那么陌生,虽然在一些大胆的指针强制类型转换上有的读者还不习惯。但是至少大家心里有个数,指针式如此的灵活,以至于你可以操作得比较底层或者根本越过一些语法的限制。这可能也是众多程序员抨击CC++不安全的因素之一。安不安全不是本文想要表达的,这里只需要记住一点,如果你有足够把握,那么你绝对可以毫不犹豫的运用。 本文依然不会离开指针的影子,前面一篇还有没原创 2010-01-13 21:04:00 · 9135 阅读 · 40 评论 -
【C/C++语言入门篇】-- 深入指针
再上一篇,我们介绍了基本调试。之前也说了,之所以把调试放在前面讲是因为后面的文章基本都会用到调试。观察我们的程序到底发生了什么。让我们能够直接明了的看清楚问题的本质。本篇将深入一点介绍指针这个让无数初学者畏惧的东西。希望大家再看完本篇之后能对指针有新的认识,之后不再惧怕它。觉得它就那么回事。那下面我们就努力攻克这个令我们“惧怕”的东西。 我们可能进入大学读计算机相关专业,基本第一门编程语言原创 2010-01-08 21:33:00 · 12507 阅读 · 54 评论 -
【C/C++语言入门篇】-- 调试基础
通过前面两篇,相信大家已经基本了解了我们的研究思路。既然是研究,那么必须的研究工具就得熟练掌握了。这里我所指的研究工具就是VC,我所使用的VC版本是2005。本文也将根据VC2005进行探讨。可能很多朋友或者初学者还是使用的VC6.0。在这里本人不推荐使用VC6.0。原因很简单,VC6.0已经过时了,后面的版本比VC6.0更强大方便。可能也是因为众多经典的程序设计书籍使用的都是VC6.0。有的朋友原创 2010-01-04 21:59:00 · 13795 阅读 · 48 评论 -
【C/C++语言入门篇】-- 基本数据类型
前一篇我们介绍了一个简单不过的helloworld程序引出相关问题。趁着还没有忘掉那些思考方式的记忆,本篇继续延续这种思维方式的理念,介绍一下CC++中的基本数据类型。数据类型不清楚的话在以后的编程中会有很多谜团和问题。甚至一个程序的BUG找半天也没有找出来时为什么,结果才发现是加减溢出了。更加严重的还有写越界、读越界等。同样比如网络传输时的消息结构对待每个字节,每个成员的大小及类型都有很严格的追原创 2009-12-30 23:01:00 · 11397 阅读 · 23 评论 -
【C/C++语言入门篇】-- HelloWorld思考
第一篇文章终于落笔了,本文将从思考的角度去重新认识一下Helloworld。在例子之后会提出不同的问题,引导大家去思考每一句乃至每个细节。同时希望能够让大家以后能够以不断思考不断提问的方式去看待自己的程序。我相信大家会发现很多新的东西,好了切入正题。 我们每学一种新的语言基本都会从helloworld开始,基本每种语言都喜欢将helloworld作为示例直接的表现在读者的面前,让读者在感官原创 2009-12-28 23:36:00 · 17197 阅读 · 61 评论 -
【C/C++语言入门篇】--序言
之前的定位可能主要为了研究底层及一些较复杂的问题上,而忽略了一些初学的朋友。导致他们可能一进来就有点“望而生畏”的感觉(自诩了哈,拍砖!)。应怪兽群里兄弟及一些朋友的建议,同时也为了把自己的经验及编程方面的一些想法分享给大家。因此打算写一些CC++语言基础入门的博文。从本模块中,大家可以了解到一些什么?1. 本模块定位为基础篇,主要还是一些语法上由浅入深,不会涉及很复杂的东西。着重从基础中原创 2009-12-28 14:08:00 · 10752 阅读 · 30 评论