Loading...
在前一篇文章中,对编译器正整数除法优化进行了分析,其思路是转化为与magic number的乘法以及右移运算。其核心公式为:$\lceil\frac{n}{d}\rceil = \lceil\frac{ n\times m } {2^{N+l}}\rceil$。但是我们的关注点,是将二进制代码转化为伪代码。因此,对于其二进制代码的还原,有如下几种类型:1.直接右移表现形式:shr ecx,...
一、起因在反汇编查看某个程序时,被其中出现的一个magic number所困扰,然后使用IDA的F5插件分析的代码也具有一定欺骗性,就有了这篇文章。反汇编代码:.text:0000000000406C4E mov r13d, 1374389535 //magic number: 1374389535 .text:0000000000406C5F ...
声明一、与游戏lua交互1.调用游戏接口调用API前文已对frame_excuteScripte进行了阐述,这里不再细数。2.注册自定义函数到游戏lua通过对比lua源码与游戏反汇编代码,得到其如下结构:typedef enum luaType { Tnil = 0, Tboolean,// 1 Tlightuserdata,// 2 Tn...
情景原本C代码中,申请char*内存空间,是使用的calloc(1, size)。在使用c++11对代码进行重构时,使用new来获取可用堆空间,其部分代码及上下文如下:***前面的省略*** fileBuf = new char(fileSize + 1) if (fileBuf == NULL) { m_logger->error("new memory {} by...
前言为实现通过主线程调用游戏Frame_excute(),来执行自定义脚本,来对新版本增加的 retaddr 检测进行逆向分析。背景知识函数调用过程中,除了参数赋值,执行Call跳转外,还有个很重要的事,就是将Call 指令下一条指令地址(通常来说就是函数执行完成返回后,执行的第一条指令所在地址,也就是返回地址)push到堆栈中。这样一来,可以通过rbp/rsp指针获取返回地址,并对返回地址...