C/C++ inline汇编语言
文章平均质量分 94
masefee
PC网络游戏开发。。
展开
-
C++内嵌汇编 兼 速度测试
顺便内联汇编写了个strcpy,做个例子并测试了下速度。。char* strcpy( char* des, const char* src, unsigned __int32 count ){ if ( des == NULL ) { return 0; } if ( src == NULL ) { des[ 0 ] = 0;原创 2009-02-27 16:25:00 · 1900 阅读 · 1 评论 -
C++中的【菱形虚继承】深入剖析
转眼间有过了一个月了,自从【C/C++语言入门篇】连载结束后,已经很久没有写博了。最近一直忙着本科毕业论文和工作上的任务,加上一个对于我来说非常重要的事情正在进行中。所以近段时间脑子一直处于绷紧状态,发现自己的脑细胞还真是不够用。加油! 今天有朋友问到一个问题,那就是在C++的多重继承中,出现菱形状继承的情况下,在构造对象时的内存分布及构造函数的调用流程上出现了问题。最后跟他解释清楚之后原创 2010-04-09 20:25:00 · 11970 阅读 · 11 评论 -
深入C/C++之基于CheckStackVars的安全检查(VS2008)
最近一直忙毕业的相关事情,加上工作,转眼间,又到月底了,之前承诺的每月一篇博文,前几天就一直在寻找到底要写什么,近两天又突然发现有很多东西可以写。本篇就先延续之前的一篇基于Cookie的安全检查机制(深入C/C++之基于Cookie的安全检查(VS2005))来介绍下另外一种在DEBUG版本下的安全检查,也就是CheckStackVars检查,话不多说,直接进入正题。 在VS2008下,函原创 2010-05-28 11:12:00 · 13387 阅读 · 13 评论 -
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 · 15949 阅读 · 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 · 41136 阅读 · 26 评论 -
【诡异的精简C语言程序】main函数隐藏
哎,几个月以来没有写博客了,时间太紧,精力又有限。今天正好有这个时间,打算写一篇今天在网上讨论的一个问题。我想大家应该都听过“国际C语言混乱代码大赛(IOCCC, The International Obfuscated C Code Contest)”吧,今天无意间在网上讨论到原创 2011-07-14 21:49:21 · 23953 阅读 · 81 评论 -
【动态分配栈内存】之alloca内幕
哎,下班回家就开始大扫除,一直到凌晨才搞定,真的累了。但是计划的是今天必须将本文写完,不写完睡不着觉。那就尽快切入正题吧! 我们经常使用malloc或者new等函数或操作符来动态分配内存,这里的内存说的是堆内存,并且需要程序员手工释放分配的内存。malloc对应原创 2011-09-30 03:38:19 · 34550 阅读 · 32 评论 -
【揭秘VC CRT库Intel模块】-- 开篇
在本博客开启时,就有打算写这块的冲动,直到现在,直到今晚,突然一股劲让我开了这个系列,写下开篇。 近段时间一直忙于工作,潜下心来做自己的研究也少了很多,每天下班回家都10点多了,很累。一般就洗洗睡觉了,远远比不得几年前的精力和状态了。看来我得好好调整一下时间,让时间用在刀刃上。 切入正题,本系列主要针对vc的crt库中的intel版本asm源码进行逐个剖析,前面原创 2011-12-05 23:59:50 · 6936 阅读 · 2 评论 -
【揭秘VC CRT库Intel模块】-- strlen
既然是开篇后的第一篇,就先来一个简单且实用的函数吧,以增强你我的信心,然后再一步一步到复杂,这样从前至后,也就很顺其自然了。 还记得初学C的时候,对于字符串操作一类函数的记忆显得尤为深刻,各种考试会考strlen、strlen等函数的实现,到了毕业找工作,很多公司的笔试题里,也包含有strlen、strcpy等函数的实现。可见字符串操作类函数是受到了老师和公司出题者的青睐啊。那么原创 2011-12-06 00:00:25 · 11795 阅读 · 20 评论 -
C++ Inline ASM 内联汇编祥解
一、 优点 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤。在 Visual C++ 中,内联汇编是内置的编译器,因此不需要配置诸如 MASM 一类的独立汇编工具。这里,我们就以 Visual Studio .NET 2003 为背景,介绍在 Visual C++ 中使用内联汇的相关知识(如果是早期的版本,可能会有些许出入)。 内联汇编代转载 2009-02-27 16:06:00 · 15620 阅读 · 6 评论 -
Win32 结构化异常处理(SEH)探秘
原著:Matt Pietrek翻译:VCKBASE译注:本文都翻译了一大半了,才发现网上已经有一篇董岩的译本(http://www.diybl.com/course/3_program/c++/cppsl/200866/122881.html),看完他的译文,感觉所有涉及关键技术的地方董岩翻译得非常到位,所以自己就没有再花时间往下译,本文后面的部分基本上都是采用了董岩的译文。此外,董岩在译转载 2009-11-16 19:36:00 · 4593 阅读 · 4 评论 -
C/C++条件(三目)运算符巧妙原理解析
最近一直研究一个对个人而言很有价值的一个LIB库的逆向。在今天下班后突然灵感闪现,这个断断续续逆了接近一周的核心管理类。终于在今天给逆完了。在最后一个函数里,碰到了之前基本没有用过的一条指令。(呵呵,高手见笑了!)当然光看单句的汇编指令,是没有办法看出具体的作用的,而且还很可能会认为原作者本来就是用汇编来实现的!呵呵,先不废话,先贴出反汇编代码一睹为快: mov dw原创 2009-11-09 21:30:00 · 8444 阅读 · 18 评论 -
深入C/C++之基于Cookie的安全检查(VS2005)
昨天在试着逆向一个有时间期限的LIB时,发现一些特别的检查函数,在之前的VC2003中是没有的,这些函数可谓是重量级函数。由于个人比较看不惯自己不懂的东西,出于不愤之情绪研究了下这些函数。首先在这里介绍个人认为较之其他几个更为重要的一种安全检查方式——基于Cookie的缓冲区溢出安全检查! 为了在发布版本中也能检测到缓冲区溢出,防止程序因缓冲区而受到攻击,VS2005(VC8)便增加了基于原创 2009-10-05 09:36:00 · 6606 阅读 · 11 评论 -
基本完成山寨汇编IDE环境
最近一直加班,回家基本就累得不想写东西了。一直就拖到现在,本来几天就能完成主体功能的,结果一直拖到现在。。。惭愧啊! 嘿嘿! 写到这里,我也暂时搁下了。。能基本的工程管理和编译就可以了。。得抓紧写ALGA。。。。原创 2009-03-17 09:19:00 · 2967 阅读 · 5 评论 -
volatile关键字
将一个变量说明为volatile表示这个变量是“易变的”。如果一个变量会被其它引用改变,或在其它并行的任务中会被改变(例如中断服务程序),都要显式地说明为“volatile”,否则在编译器优化阶段会作出错误的判断,例如将这个变量读入寄存器以后,在没有对这个变量赋值以前,会一直使用寄存器中的值,而实际上这个变量的值可能已经被一个指针引用改变了,或者是在中断服务程序中被改变了,下面这个例原创 2009-03-20 10:09:00 · 1799 阅读 · 2 评论 -
C++中模板元编程原理及速度测试
这两天一直被这个模板元编程给迷住了,觉得它真是一个很好的东西!于是好奇就仔细的研究了下,之前看过几篇文章大概的意思就是“编可以编程的程序”。听起来很神奇吧。 其基本原理也就是让编译器在编译期间就计算好一些我们需要计算的值。在程序运行期间就不需要再去计算这些值了,从而提高程序的运行性能。当然这样做会让程序编译起来很慢,一般不常用。不过在一些需要的地方我们还是舍得编译的效率问题的。。原创 2009-04-17 12:52:00 · 5434 阅读 · 6 评论 -
C++中一些不常用的前缀介绍
1. placement new 方法 如:pi = new ( ptr ) int; //placement new 括号里的参数是一个指针,它指向一个内存缓冲器,new操作将在这个缓冲器上分配一个对象。Placement new的返回值是这个被构造对象的地址(比如扣号中的传递参数)。placement new主要适用于:在对时间要求非常高的应用程序中,因为这些原创 2009-04-09 11:31:00 · 3035 阅读 · 0 评论 -
C++中获得CPU高精度时间戳( 纳秒级 )
对关注性能的程序开发人员而言,一个好的计时部件既是益友,也是良师。计时器既可以作为程序组件帮助程序员精确的控制程序进程,又是一件有力的调试武器,在有经验的程序员手里可以尽快的确定程序的性能瓶颈,或者对不同的算法作出有说服力的性能比较。 在Windows平台下,常用的计时器有两种,一种是timeGetTime多媒体计时器,它可以提供毫秒级的计时。但这个精度对很多应用场合而言还是太粗糙了。另一种是Q原创 2009-04-09 12:41:00 · 11603 阅读 · 10 评论 -
C++强制转换不同声明或类型的函数指针隐患
之前碰到一个问题,没有注意看函数指针的定义。造成一个错误,写到这里给自己一个提醒。也给大家看看我这个不小心的人犯的错误。嘿嘿! 先看段测试代码:void test( int param ){ int ret = 0; for ( int i = 0; i { ret += i; } ret >>= 16; ret |= (原创 2009-07-16 23:29:00 · 3285 阅读 · 2 评论 -
Shell Code 原理深入剖析
这两天都一直在解析3D模型数据。今天闲暇之余写了段测试代码。分析下黑客们用的缓冲区溢出攻击原理及Shell code原理。好,直接进入正题。有什么说得不对的地方还望大家纠正。嘿嘿!首先来这么一段小小的测试代码:void test( void ){ cout }int main( void ){ int a[ 1 ]; a[ 3 ] = ( int )test; return原创 2009-08-06 20:08:00 · 5323 阅读 · 23 评论 -
利用C++的operator new实现同一对象多次调用构造函数
struct STest{ STest( void ) { ++iCount; } int iCount;} int main( void ){ Stest obj; obj.iCount = 0; new( static_cast( &obj ) ) Stest();原创 2009-08-18 22:51:00 · 7850 阅读 · 10 评论 -
C/C++ HOOK API(原理深入剖析之-LoadLibraryA)
9月都快结束了,之前一直忙到写自己的东西加上上班。基本没有时间研究下汇编和C C++方面的感兴趣的东西。再怎么说嘛,9月还是得写一篇撒,以后每月至少一篇吧。给自己定了,希望大家监督。嘿嘿!这篇文章就来谈谈平常很常见的HOOK技术,这里呢。写得比较简单,方法很多。只讲原理!希望大鸟们别吐我口水哈 - -。好!切入正题。首先是概念吧。什么是钩子(HOOK)? 钩子(Hook),是Win原创 2009-09-18 12:36:00 · 27518 阅读 · 13 评论 -
C++/Debug模式查看EFL(标志寄存器)详解
在比如使用汇编指令如:ADC, SBB等指令时,我们为了心里那份好奇感就不得不去了解下FLAG寄存器(EFL)里面的东西。通过二进制详细的查看各标志位的值。然后这些需要用到标志寄存器的指令等就一目了然了。 - -迫不及待写了段测试代码来看看其中的秘密:#include int main( void ){ __asm { mov al, 0xff原创 2009-04-20 13:00:00 · 10012 阅读 · 8 评论