1、C++类代码的特点

寄存器ECX传参时一般用作this指针(对象地址)或是计数器。

有ecx传参的call,是成员函数,构造函数,析构函数

能访问成员变量的函数都会有ecx传参

静态函数、全局函数无ecx(this指针)

返回值

寄存器eax一般用作返回值

识别构造函数的OD反汇编代码

特点:

(1) 代码特点:没有返回值、用于初始化

(2)反汇编特点:有返回值,而且是this指针

根据反汇编可以看出成员变量的顺序,因为在内存数据中的排布顺序是由代码中成员变量定义顺序决定的。

识别构造函数的办法:

(1)构造函数调用时,会使用ECX用于this指针

(2)构造函数在反汇编层有返回值,是eax存放this指针

(3)构造函数用于初始化,一般内存如果是未初始化的比如CCCCCCC,经过构造函数会完成初始化。

(4)如果一个函数有对前4字节初始化为一个指针地址,那么可能是在初始化虚函数表指针。

如果一个类有虚函数,那么对象的内存数据里会有虚函数指针的定义。构造函数会初始化虚函数表指针,而类中定义多少个虚函数也只有一个虚函数表指针。

识别成员函数的OD反汇编代码

特点:

(1)ECX传递this指针,调用成员函数

(2)成员函数中会访问exc所指向的内存空间

成员函数与虚函数本身没有什么区别,所以反汇编出来的代码都差不多。

识别成员函数:

(1)如果找到了构造函数,那么下面调用的应该都是成员函数

(2)成员函数有this指针

(3)成员函数会访问成员变量,即this指针指向的内存空间

识别析构函数的OD反汇编代码

特点与识别:

(1)有ECX

(2)用于释放资源,可能有delete,free等

(3)一般是在函数返回时,编译器生成的调用。

全局构造与析构函数

初始化全局对象的构造函数,是在main函数之前,C运行库初始化的代码中_initterm函数

操作:

在return下断点,main函数执行完毕后F11继续执行,继续F11return会返回到上一个调用函数。

exit(xxx) 调用析构函数

有虚函数的派生类

派生类对象的构造初始化

大致流程:

派生类的构造函数
{
基类的构造函数(函数中会初始化虚函数表指针) 初始化虚函数表指针 初始化数据
}

虚函数表创建

虚函数表是在程序编译时就生成了,而且存储在程序的只读区段中

程序中如果创建了多个对象,只会有一个虚函数表,共用一个虚函数表。

C++中的多态实现

	//多态的实现
A* pObj = &obj;
pObj->printfD();

模拟反汇编的调用流程

A* pObj = &obj;

测试代码

#include "stdafx.h"

class A
{
public:
A::A() {
c = 3;
m = 1;
n = 2; }; virtual void printA() { printf(" A::A\n "); };
virtual void printB() { printf(" A::B\n "); };
virtual void printC() { printf(" A::C\n "); }; void printfD() { printf("(%d,%d)\n",m,n);
printf("hahahahaah"); }; A::~A() { printf(" A::~A\n "); };
protected:
private:
int n;
int c;
int m;
};
int main()
{
A obj;
obj.printA();
obj.printfD();
printf(" %d\n ",sizeof(obj));
printf(" 3333333333333333333333333\n ");
return 0;
}

【逆向知识】动态调试技巧-C++代码逆向的更多相关文章

  1. [转]Android逆向之动态调试总结

    一.在SO中关键函数上下断点 刚学逆向调试时.大多都满足于在SO中某关键函数上下断点.然后通过操作应用程序,去触发这个断点,然后进行调试 详细的步骤可以参见非虫大大的<Android软件安全与逆 ...

  2. apk逆向 - smali动态调试

    author: Dlive date: 2016/10/6 0x00 前言 ​ 之前有人问过smali的动态调试方法,其实网上已经有很多文章讲这些内容,但是为了方便大家学习,我还是写一下让大家少走点坑 ...

  3. iOS逆向系列-动态调试

    Xcode调试App原理 Mac安装了Xcode Xcode的安装包中包含了debugserver 可执行类型的Mach-O文件,iPhone第一次连接Xcode调试会将Xcode中的debugser ...

  4. 【Android 逆向】动态调试AliCrackme_1

    1 试玩 apk # 安装APK到真机 adb install AliCrackme_1.apk 打开apk,投石问路,输入123试一下 2 将apk 拖入androidKiller,得到反编译的sm ...

  5. 【逆向知识】GitHub:Awesome-Hacking(黑客技能列表-逆向)

    0 初衷 GitHub这一份黑客技能列表很不错,包含了多个方向的安全.但目前我关注只有逆向工程与恶意代码,所以其他的被暂时略过. 虽然很感谢作者的辛勤付出,但并不打算复制粘贴全套转载.逐条整理是为了从 ...

  6. 【逆向怎么玩】 动态调试一款牛逼C++ IDE实录

    声明 本篇只从逆向兴趣出发,研究其程序运行原理. CLion程序版权为jetBrains所有. 注册码授权为jetBrains及其付费用户所有. 不会释出任何完整的源代码. 涉及能直接推算出注册码的地 ...

  7. 【转】安卓逆向实践5——IDA动态调试so源码

    之前的安卓逆向都是在Java层上面的,但是当前大多数App,为了安全或者效率问题,会把一些重要功能放到native层,所以这里通过例子记录一下使用IDA对so文件进行调试的过程并对要点进行总结. 一. ...

  8. Anroid逆向学习从编写so到静动态调试分析arm的一次总结

    Anroid逆向学习从编写so到静动态调试分析arm的一次总结 一.前言 最近跟着教我兄弟学逆向这篇教程学习Android逆向,在第七课后作业反复折腾了好几天,正好在折腾的时候对前面的学习总结一波,动 ...

  9. 逆向分析-IDA动态调试WanaCrypt0r的wcry.exe程序

    0x00 前言 2017年5月12日全球爆发大规模蠕虫勒索软件WanaCrypt0r感染事件,各大厂商对该软件做了深入分析,但针对初学者的分析教程还比较少,复现过程需要解决的问题有很多,而且没有文章具 ...

随机推荐

  1. [luogu4265][USACO18FEB]Snow Boots silver

    题目大意 求出最少需要丢去多少双靴子才能到达终点. 解法 解法一: 看到数据的范围,非常清楚\(O(n^3)\)能过掉所有的数据,那么我们就果断暴力. 解法二: 比较容易会想到用DP做,我一开始定义\ ...

  2. SharePoint 2013 APP 开发示例 (五)跨域访问 Web Service (REST API)

          虽然 JQuery 也能通过授权header实现跨域, 但SharePoint 提供了更简单的方法,它被实现在SP.RequestExecutor里 .它能访问跨域的服务包括REST AP ...

  3. C# 面向对象零碎知识点

    obgect: 所有数据类型都是obgect类型: 万能类型 var :原来的变量不变,替换成var: 动态类型 dynamic :类似object,遍历需要转: is  as: 类型转换运算符: ( ...

  4. 洛谷P2446 大陆争霸

    这是一道dijkstra拓展......不知道为什么被评成了紫题. 有一个很朴素的想法就是每次松弛的时候判断一下那个点是否被保护.如果被保护就不入队. 然后发现写起来要改的地方巨多无比...... 改 ...

  5. 运行vb写的程序,有些电脑上会弹出一个与office相关的窗口

    到网上搜索了一下,找了几个解决方案,不过我的电脑上没出现过,所以先收藏一下,或许以后能用上. 来自:http://bbs.csdn.net/topics/380204412 今天将注册表的项一个个删除 ...

  6. Java中FTPClient上传中文目录、中文文件名乱码问题解决方法【好用】

    转: Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录 ...

  7. P1450 [HAOI2008]硬币购物

    题目描述 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. di,s<=100000 ...

  8. Array map()方法

    这里的map不是“地图”的意思,而是“映射”.“映射”就是原数组被“映射”成对应新数组. [].map()基本用法跟forEach类似. map()方法返回一个新数组,数组中的元素为原始数组元素调用函 ...

  9. vscode vue代码提示错误

    在用vscode编写vue代码时,因为安装的有vetur插件,所以当代码中有v-for语法时,会提示 [vue-language-server] 'v-for' directives require ...

  10. Hadoop记录-MRv2(Yarn)运行机制

    1.MRv2结构—Yarn模式运行机制 Client---客户端提交任务 ResourceManager---资源管理 ---Scheduler调度器-资源分配Containers ----在Yarn ...