随笔分类 -  C/C++反汇编

数据结构逆向分析-Map
摘要:数据结构逆向分析-Map map是一个典型的二叉树结构,准确的来说是一个平衡二叉树或者红黑树,特点是数据存储是有序的存储。 参考侯杰老师的stl源码剖析,map里面采用的是RB-TREE也就是红黑树 map存储的数据是以键值对的形式来存储的,Key:Value 优势:查找数据效率高,因为是平衡二叉树 阅读全文
posted @ 2021-09-21 19:15 Sna1lGo 阅读(895) 评论(0) 推荐(0)
数据结构逆向分析-Vector
摘要:数据结构逆向分析-Vector 这个应该是家喻户晓了的东西把,如果说C/C++程序员Vector都不用的话,可能就是一个不太好的程序员。 Vector就是一个STL封装的动态数组,数组大家都知道是通过连续的地址空间来处理的,vector的原理就是如果原来的不够了要扩展,就会开辟一段更大的内存,然后将 阅读全文
posted @ 2021-09-21 03:08 Sna1lGo 阅读(460) 评论(0) 推荐(0)
数据结构逆向分析-List
摘要:数据结构逆向分析-List 首先STL中的List就是一个链表,但是肯定C++用了很多封装,所以这里我们来一探究竟。 开始 首先先写一些简单的分析的源代码: #include<iostream>#include<list>using namespace std;​int main(){​ list< 阅读全文
posted @ 2021-09-19 20:55 Sna1lGo 阅读(369) 评论(0) 推荐(0)
虚函数逆向分析
摘要:虚函数逆向分析 虚函数的机制 在C++中的类中有虚函数时,编译器会将该类的所有虚函数首地址保存在一张表里面,这张表被称为虚函数地址表,同时会在类中的首四个字节添加一个虚表指针来指向虚函数表的首地址。 分析构造函数可以很清楚的看到: 00F718D0 push ebp 00F718D1 mov ebp 阅读全文
posted @ 2021-02-21 15:37 Sna1lGo 阅读(281) 评论(0) 推荐(0)
调试vs2019代码的流程
摘要:改为否 改为默认值和禁用代码调试 随机地址改为否 阅读全文
posted @ 2021-02-17 10:55 Sna1lGo 阅读(207) 评论(0) 推荐(0)
反汇编-C/C++中类的反汇编-2-构造函数和析构函数
摘要:反汇编-C/C++中类的反汇编-2-构造函数和析构函数 构造函数 正向代码 #include<iostream>using namespace std;​class Base{public: Base() { printf("Base::Base()\n"); }};class Child : pu 阅读全文
posted @ 2021-02-17 10:46 Sna1lGo 阅读(191) 评论(0) 推荐(0)
反汇编-C/C++中类的反汇编-1-
摘要:类反汇编 类的内存地址对齐 参考之前写的一个博客https://www.cnblogs.com/Sna1lGo/p/14088339.html 类的this指针 每个有关于对象里面的调用,其实都用到了this指针,this指针是一个对象的首地址,然后利用首地址的偏移来访问对象中的成员或者方法(函数) 阅读全文
posted @ 2021-02-11 00:30 Sna1lGo 阅读(441) 评论(0) 推荐(0)
X64程序逆向分析
摘要:X64程序逆向分析 x64指令集 x64位程序使用的是x64指令集,64指令集有AMD64,EM64T,IA-64三种。 AMD64是最早推出,intel和惠普联合推出了IA-64但是没有用户起来 Intel直接拷贝AMD的指令集推出了IA-32E后改名为EM64T,也就是intel6。统称为x64 阅读全文
posted @ 2021-02-08 18:13 Sna1lGo 阅读(556) 评论(0) 推荐(0)
反汇编-流程控制语句-2-循环控制语句分析
摘要:反汇编-流程控制语句-2-循环控制语句分析 C/C++中有三种循环语句,分别是do/while/for循环,具体的查看C/C++的语法书 MOVZX、MOVSX指令 MOVZX和MOVSX可以理解为MOV指令的变化,但是也有区别 MOVZX 操作数1,操作数2 MOVSX 操作数1,操作数2 操作数 阅读全文
posted @ 2021-02-04 23:44 Sna1lGo 阅读(184) 评论(0) 推荐(0)
反汇编-流程控制语句-1-条件控制语句
摘要:反汇编-流程控制语句-1-条件控制语句 所谓的流程控制语句在C/C++中就是,if-else switch for while语句 也就是条件语句和循环语句的合集 if-else 纯if语句 if在c语言中只能判断真或假,真就执行if里面的东西,为假就跳过 void iftest(int a){00 阅读全文
posted @ 2021-02-04 21:39 Sna1lGo 阅读(189) 评论(0) 推荐(0)
C/C++反汇编-各种表达式
摘要:C/C++反汇编-各种表达式 基于vs2019的反汇编 优化 对于vs来说一般的优化有两种方案: O1:生成可执行文件空间小 O2:执行效率高 在vs2019中的release默认是采用的O2方案来处理也就是执行效率优先,而在debug版本中为了调试比较方便可能就会优化比较少。接下来的反汇编会在re 阅读全文
posted @ 2021-01-24 19:38 Sna1lGo 阅读(327) 评论(0) 推荐(0)
x86-函数反汇编
摘要:函数反汇编 调用过程: 1.传参:通过push指令把参数压入栈 2call指令函数地址:跳转到call的函数地址 3 push ebp 保存栈底指针 4 mov ebp,esp 提升栈底指针,和栈顶相同 5 sub esp,xxx 第3-第5步可以理解为重新给函数开辟一个栈空间 6 push 寄存器 阅读全文
posted @ 2021-01-14 11:14 Sna1lGo 阅读(244) 评论(0) 推荐(0)
C/C++反汇编-各种表达式(加减乘)
摘要:C/C++反汇编-各种表达式(加减乘) 基于vs2019的反汇编 优化 对于vs来说一般的优化有两种方案: O1:生成可执行文件空间小 O2:执行效率高 在vs2019中的release默认是采用的O2方案来处理也就是执行效率优先,而在debug版本中为了调试比较方便可能就会优化比较少。接下来的反汇 阅读全文
posted @ 2020-12-03 15:23 Sna1lGo 阅读(326) 评论(0) 推荐(0)
C/C++反汇编-1-找到启动函数和用户入口
摘要:C/C++反汇编-1-找到启动函数和用户入口 当你采用c语言来写程序的时候,无论是WinMain还是main函数其实都并不是整个程序的启动入口,而是用户入口。本文将会介绍如何找到启动函数入口和用户入口 因为所有的函数处理都是利用堆栈来进行的所以直接在调试框架下查看栈窗口就可以查看到具体的程序函数调用 阅读全文
posted @ 2020-12-02 13:22 Sna1lGo 阅读(792) 评论(0) 推荐(0)