常读常新C++Primer

项目开发日志(五)

由于工作上项目逻辑部分选择用C++实现,在业余时间重新去读了一次 C++Primer,我记得第一次读还是在大三暑假,1000多页的天书搞不懂那时候是怎么看完的.而工作后的这一次 我用了大概前前后后2个月的时间去看.基本也就一天翻20多页的状态.

我发现现在很多人很难静下心来把一本技术书或者一篇中等的文章从头读到尾,即使是我写的一些BUG记录博文,很多人遇到相应的问题还是懒得翻,躁动的网络干扰着躁动的心.需要赶快让自己读书的状态回归当年 .

这次读C++Primer的新认识

  • Object 不是 对象

继续阅读“常读常新C++Primer”

多重继承中的动态绑定

项目开发日志(四)

C++是一种自由度非常高的语言,特别是面向对象中的动态绑定特性,正确使用这种特性会你写代码非常舒畅.但是错误的使用有时候也很致命.

今天在编写战斗逻辑层代码的时候在释放技能回调的地方使用了C++的多重继承,在一个继承了几个回调基类(技能释放完毕回调,移动完毕回调等)的派生类里面出现了无法绑定到正确的基类对象的问题.仔细分析后 发现是由于在第一层类型转换的时候已经把指针转换为void*,然后在最后一层调用无法正确转换.下面把问题重现:

继续阅读“多重继承中的动态绑定”

浅析2DX-Lua原理(一)

  • 题外

目前我的团队正使用2DX的另一个实现quick-cocos2dx来制作下一款产品,又一次得益于开源社区.提到开源 作为受益者们 很多都缺乏对自由软件认知.下面针对安卓平台记录我的一些理解,如你有更深的认识 或者 发现我的误区欢迎指点.(以下分析可能存在谬误)

  • 题内 – android机器结构

由于2DX本质是使用C/C++编写 所以在安卓平台上必须使用到NDK,NDK是一种基于原生程序接口的软件开发工具。通过此工具开发的程序直接以本地语言运行,而非虚拟机。因此只有java等基于虚拟机运行的语言的程序才会有原生开发工具包。NDK与JAVA的关系 对比AIR来说 相当于ANE与AS.只是速度和深度他们都不在一个水平上.通过下图展示的是android整个系统的大题结构:

继续阅读“浅析2DX-Lua原理(一)”

用Vim写C++

(本教程属于小白入门篇,神Vim手请自觉XX)

我家的老机器终于对VS2012发起致命性反抗了.在这之前他服务了VS2005,2008,2010,可谓三朝元老,最终在第四朝的时候倚老卖老,以死谏轩辕.可悲可叹可敬!

于是我陷入了沉思,从vs2005到FlashBuilder,eclipse,xcode,androidStudio,cocoStudio,用过一个又一个远近闻名的IDE之后 总觉得好累好累了,是否有一个IDE能让我不会觉得那么沉重,在用VS2012,XCODE的很多时候我都找不到当年用MASMPlus(我居然还记得它的官网)那种轻松自然的感觉.

于是我想起了它 Vim,号称编辑器之神的编辑器.

  • 检查本机Vim版本

首先要打开你的bash.输入:

[code]
vim -version
VIM – Vi IMproved 7.3 (2010 Aug 15, compiled Oct 23 2012 13:50:52)
Garbage after option argument: "-version"
More info with: "vim -h"
[/code]

继续阅读“用Vim写C++”

Alchemy炼金术环境配置整合

关于Alchemy炼金术,之前有写过一个入门式的文章:点击跳转

这里补全关于配置Alchemy开发环境的一些事项。

首先看这里,网上早就有了的配置教程,这里找一个比较详细的:点击跳转

关于cygwin的配置网上大家可以搜索到更傻瓜式的教程,这里就不细说了。

今天要说的是对于XP用户来说 简直是福音的一个东西:Ac。

详细请点击这里:AC

如你所见到的那样,已经把之前的配置完全都可以不看。不过要记得首先安装JRE
继续阅读“Alchemy炼金术环境配置整合”

运用Alchemy与原生AS3速度对比

Alchemy简介:
从本质上来说, 这是一个构架上的问题. 而Alchemy 的出现,从构架上,改进了这个问题,你可以使用C/C++编写核心,快速的算法,让AS3进行调用, 达到加速的目标 . 这在过去,你只能使用ADOVE提供给你的内置native 程序. 现在,你可以自己干这件事情了. 既解决了平台无关的问题,又解决了效率的问题,甚至可以利用FLASH本身几十亿现有的客户端的优势,解决了渠道问题.可以这样说, Alchemy 打开了一个前所未有的时代!
说白了,Alchemy就是AS3与C/C++的一个接口实现桥梁


要准备的东西:
Alchemy,Cygwin,FlexSDK,Java(JRE),FlashCS4. (可能用到:Dev-C++,AirSDK1.5)
下载安装教程自百或者自G.CN

例子
用 C编写从0加到100W的算法函数 getNum;
用AS3 实现从0加到100W的算法代码;
两者都是实现100W次运算。我们记下他运行前后的时间 把差值计算出来进行对比:

继续阅读“运用Alchemy与原生AS3速度对比”

CrackMe#41:the CM too two

这同样有壳  去壳过程没技术含量~

不知道是作者太那啥还是所用的编译器太那啥~看下面一段代码…

004431FC  |> /A1 34584400   /mov     eax, dword ptr [445834]
00443201  |. |8B13          |mov     edx, dword ptr [ebx]
00443203  |. |0FB64410 FF   |movzx   eax, byte ptr [eax+edx-1]       ;  NameList~
00443208  |. |8D55 F8       |lea     edx, dword ptr [ebp-8]
0044320B  |. |E8 4844FCFF   |call    00407658                        ;  %d
00443210  |. |8B55 F8       |mov     edx, dword ptr [ebp-8]
00443213  |. |B8 38584400   |mov     eax, 00445838
00443218  |. |E8 0706FCFF   |call    00403824
0044321D  |. |8B03          |mov     eax, dword ptr [ebx]            ;  [ebx]
0044321F  |. |A3 44584400   |mov     dword ptr [445844], eax
00443224  |. |A1 38584400   |mov     eax, dword ptr [445838]
00443229  |. |E8 5A44FCFF   |call    00407688
0044322E  |. |F72D 44584400 |imul    dword ptr [445844]              ;  115D*[ebx]?
00443234  |. |A3 4C584400   |mov     dword ptr [44584C], eax
00443239  |. |6B03 13       |imul    eax, dword ptr [ebx], 13        ;  eax== [ebx]*0x13
0044323C  |. |8906          |mov     dword ptr [esi], eax
0044323E  |. |8B06          |mov     eax, dword ptr [esi]
00443240  |. |03C0          |add     eax, eax                        ;  eax*2
00443242  |. |83C0 03       |add     eax, 3                          ;  +3
00443245  |. |8906          |mov     dword ptr [esi], eax
00443247  |. |A1 4C584400   |mov     eax, dword ptr [44584C]
0044324C  |. |F72E          |imul    dword ptr [esi]                 ;  115D*~
0044324E  |. |A3 50584400   |mov     dword ptr [445850], eax
00443253  |. |A1 50584400   |mov     eax, dword ptr [445850]
00443258  |. |F72E          |imul    dword ptr [esi]                 ;  *~
0044325A  |. |0105 40584400 |add     dword ptr [445840], eax         ;  0x53++++
00443260  |. |FF03          |inc     dword ptr [ebx]                 ;  ++
00443262  |> |A1 34584400    mov     eax, dword ptr [445834]
00443267  |. |E8 E007FCFF   |call    00403A4C
0044326C  |. |3B03          |cmp     eax, dword ptr [ebx]
0044326E  |.^\7D 8C         \jge     short 004431FC

一点精简 效率性都没有…=.=
一组可用Key:

KeyOne:

13028-31x23e93-z14d20

KeyTwo:

ShadowKong

464411239-Oc3k

DownMe:KeyGen

关于这个CM  作者排除了几个Name  Dasm翻几下就能知道~

还有CM那里限制了只能输入0xF个Name字符~

CrackMe#37:亮点在于lods和stos

这个CM和以往的有点区别~亮点还是有的~

首先PEID查看 有壳~~

我们重点不是这 轻易脱掉

首先这并不是明码比较(很多都不是明码比较..)

其次这是一组Name 和Key混合算法

再其次这个算法的关键在于:

A[i]=F1(Name[i-1])-F2(Key[i-1]);

i=KeyLen+1;

然后循环算出A[KeyLen];

最后再比较~~

总之这个算法不需要逆 但是需要有很好的数学思维 特别是数列和解N个变量的方程函数方面的…

最后这个CM有几处代码非常漂亮:

004013C3    BF 20334000     mov     edi, 00403320
004013C8    BE 20334000     mov     esi, 00403320
004013CD    AC              lods    byte ptr [esi]
004013CE    0C 00           or      al, 0
004013D0    74 05           je      short 004013D7
004013D2    0C 20           or      al, 20
004013D4    AA              stos    byte ptr es:[edi]
004013D5  ^ EB F6           jmp     short 004013CD

如果你有点汇编基础 就看看出这段代码是多么的漂亮~

一组可用Key:

ShadowKong

rg`\e

DownMe:KeyGen

注册机并不完美 因为这算法解太多…