- 博客(97)
- 收藏
- 关注
原创 PDB不一致
一、pdb文件简介英文:Program Data Base,即程序的基本数据,是VS编译链接时生成的文件。pdb文件主要存储了如下调试信息:(1)public, private,和static函数地址。(2)全局变量的名称和地址。(3)参数和局部变量的名称及它们在栈中的偏移量。(4)类型定义,包括class, structure,和 data definitions。(...
2019-09-10 00:25:25
1983
原创 脱壳常见问题
脱壳常见问题:内存dump之后图标无显示, 资源文件不见了?产生原因: 内存中的数据大小大于文件中的大小, 导致dump时, 将资源节数据后移, 而原始的资源节的指针还是指向之前的位置, 此时的数据为0.解决方案: 修改资源节的指针指向资源数据往下移动后的位置, 或者删除多余的数据, 将资源节的数据剪切到原始位置.内存dump的时机, 程序停在OEP后进行dump, 程序能够...
2019-07-26 19:56:41
410
原创 IDA中SIG文件
静态链接库(Lib): 重命名为.7z, 记录了函数的符号信息.使用dumpbin /exports XXX.lib > XXX.txtFLIRT签名识别库函数:创建模式文件: PCF XXX.lib XXXX.bat 创建符号文件:SIGMAKE XXXX.bat XXXX.sig将生成的XXXX.sig文件放到ida中sig文件夹下OD动态调试时.可以先通...
2019-07-26 19:52:49
540
原创 IDAF5常见错误
问题一: JMPOUT问题产生原因: IDA是一款静态分析工具, 从上到下进行扫描.问题二: return 函数问题产生原因: 函数返回值通常为寄存器EAX, IDA无法识别函数的调用约定.解决方案: 修改函数的调用约定, Y, USERCALL(IDA特有), 修改为函数返回值 __USERCALL 函数名称<函数返回值寄存器>(函数参数)问题三...
2019-07-26 00:01:40
3266
原创 TCP协议
TCP: 传输控制协议.基于TCP的应用层协议:HTTP: 80HTTPS: 443FTP: 21SSH: 22TELNET: 23SMPTP/POP : 25/110TCP 三次握手, 四次挥手(flags: SYN , ACK, FIN):TCP三次握手的原理:TCP四次握手:TCP可靠传输(Seq, ACK, 超时重传...
2019-07-21 21:14:30
138
原创 DHCP协议
DHCP协议: 动态主机配置协议, 用于实现对终端设备的动态IP的分配.DHCP协议的流程:DCHP Discover/Offer 数据包通常发生在某台设备新加入某个网络时, 为该设备分配IP地址.WireShark下DHCP协议解析: 可以再命令行下使用命令ipconfig /release和ipconfig /renew来抓取DHCP协议数据包.如果处于无线网卡可以先设置为固...
2019-07-21 03:32:22
180
原创 DNS协议
UDP协议:源端口: 发送者的端口目标端口: 接收端的端口数据包长度:校验和:DNS协议: 域名解析协议.用于域名与IP地址的解析.DNS-RequestDNS-Reply:端口范围: 1-65535; 通信过程中,源端口一般属于随机高端口, 目的端口一般为知名端口(1-1023)....
2019-07-20 23:54:32
1128
原创 ICMP协议
ICMP协议:互联网信息控制协议, 用于实现链路连通性和链路追踪, 可以实现链路差错报告.ICMP-Request:ICMP-Reply:Type Code: 8 0 标识ICMP请求 0 0 标识ICMP应答ID: 用于标识ICMP数据的进程Seq: 标识数据包的序号, 使用ping命令可以实现网络延迟的测试Tracert/Traceroute的使用及抓包分...
2019-07-20 22:56:05
408
原创 ARP协议
ARP(地址解析协议),用于实现从IP地址到MAC地址的映射ARP Request:ARP Reply:ARP缓存表:ARP Request/Reply图解:免费ARP: 通常发送系统引导阶段或者IP地址发生变化时发送, 用于局域网内其它主机更新ARP缓存表.ARP攻击:某ARP攻击工具的数据抓包及分析:1. 局域网扫描, 发...
2019-07-20 21:04:44
140
原创 IP协议
IP协议:用于实现数据的不可靠的面向无连接的通信IP协议中的字段:WireShark中IP协议中的数据:Version/版本号: 表示IP协议的版本头部长度: 表示IP协议头部长度DSCP/TOS: Qos服务质量用于实现流量标记总长度: 表示IP协议的总长度标识符: 用于标志分片的进程标志符: MF标志符用于告诉接收方是否还有分片, 0表示没有, 1表示有...
2019-07-20 14:51:33
275
原创 Ethernet协议
Ethernet以太网协议,用于实现链路层的数据传输和地址封装.字段含义:Destination/目的字段:标识目标通信方的MAC地址Source/源字段:标识发送端的MAC地址Type/类型值:标志上层协议MAC地址:1. 所有设备的MAC地址是全球唯一的.2. MAC地址大小为6字节3. MAC地址的前半部分被称为"OUI代码"厂商唯一标识符, 后...
2019-07-20 13:04:43
3782
原创 检查动态库文件是否存在,或者文件是否一个合法的动态库
Cant Load lib:biznomgr, Please Check is this file exist?Cant Load lib:packer, Please Check is this file exist? Level:ERROR Module:插件容器 Message:PLUGIN[biznomgr] ...
2018-11-27 18:00:06
976
原创 调用约定
__cdcel //调用方平衡堆栈可以使用复写传播进行优化, 函数内部通常为ret printf("%s\n", "hhe122h");00BE1002 xor eax,0BE2090h 00BE1007 push 0BE2100h 00BE100C push 0BE2108h ...
2018-11-21 20:25:58
167
原创 swtich...case反汇编分析
int a = 0; AB1448 mov dword ptr [a],0 //a初始化为0 scanf("%d\n", &a); ...
2018-11-21 20:24:15
197
原创 全局变量,局部变量,静态局部变量
局部变量 作用域在函数内部 变量的寻址 通过esp寻址或者ebp寻址全局变量 整个进程 通过绝对地址寻址静态局部变量可以被多次赋值, 其值为最近一次赋值的值但静态局部变量的初始化只能初始化一次, 如果对多次初始化,其实质也只会进行一次初始化, 因此其值也只是第一次初始化的值. 通过绝对地址寻址 static int sum = i;00F33A1E mov e...
2018-11-21 20:19:54
375
原创 vs如何对堆空间进行管理
//释放空间是只需要执行断链操作,当某个堆空间被释放后,再次申请堆空间时会检查这个被释放的堆空间能够满足的用户要求.如果能满足,则再次申请的堆空间的地址将会是刚释放过的堆空间地址typdef struct _CrtMemBlockHeader{ struct _CrtMemBlockHeader *pBlockHeaderNext; //下一块堆空间首地址(指向的是前一次申请的内存信...
2018-11-21 20:18:00
620
原创 do...while, while, for循环效率PK
debug版本:do{sum++;01321471 mov eax,dword ptr [sum]01321474 add eax,101321477 mov dword ptr [sum],eax} while (sum < a);0132147A mov eax,dword ptr [sum]0132147D cmp eax,dword ptr [a]...
2018-11-21 12:15:53
3532
原创 定长硬编码
定长硬编码 50 51 52 53 54 55 56 57 push eax push ecx push edx push ebx push esp push ebp push esi push edi ...
2018-08-17 11:17:09
1412
原创 远程线程注入
在win32进程中,每个进程都有自己独立的4GB地址空间,各个进程之间相互不影响,win32API中提供能够了2个函数,writeProcessMemory和readProcessMemory,这两个函数可以在指定进程的内存中进行读写操作。HANDLE CreateRemoteThread( HANDLE hProcess, LPSECURITY_ATTRIBUTES ...
2018-08-17 11:08:41
2396
原创 windows线程Context
线程;操作系统会维护该线程的CPU寄存器的状态,该结构为上下文结构。Context线程创建时可以指定线程为暂停状态,这样操作系统在调度时便不会进行调度该线程。当线程的运行坏境作出修改时,必须是线程成为可调度进程。ResumeThread如果该函数运行成功返回线程的前一个暂停计数。 每个线程内核对象都维护着一个CONTEXT结构,里面保存了线程运行的状态,线程也就是eip。使得C...
2018-08-10 09:51:13
3483
原创 事件 信号量 临界区 互斥锁
HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,// 安全属性BOOL bManualReset,// 复位方式BOOL bInitialState,// 初始状态 FALSE创建时为未通知状态 TRUE创建时为已通知状态LPCTSTR lpName // 对象名称);bManualReset 为TRUE...
2018-08-10 09:50:07
2341
原创 利用c++11tuple实现多级排序
最近在做存储过程改造为内存数据库的服务的过程中,遇到了很多需要进行排序的地方,而利用sql语言本身的特性,可以很方便的对数据库查找出来的数据进行排序,而在使用c++语言进行改造的过程中,每次需要进行排序的地方,使用lambda或者函数对象去实现相应的功能,对于存储中只针对少许字段进行排序时,还可以很方便的实现,但是当涉及到字段很多时,需要写很多的逻辑判断,而且代码的阅读性很差,因此,想着有没有什么...
2018-06-28 20:47:11
2791
2
原创 stl边遍历边删除
#include <iostream>//非序列式容器#include <set>#include <map>#include <list>//序列式容器#include <vector>#include <deque>using namespace std;int main(){ std::vect...
2018-06-05 19:31:41
845
原创 加密解密基础
信息 --- 0,1 --- 高低电平 1. 可逆算法(ex:网络通信)2. 不可逆算法(ex:密码的加密)1.字符移位加密算法y a n g l k假设秘钥为yanglk ,明文为 too young to simpley a n g l k6 1 5 2 4 3 t o o y o un g t o s im p...
2018-06-05 00:49:23
1171
原创 gdb调试基础
##调试基础获取core dump(内核转储)文件,保存了问题发生时的状态。 大多数Linux发行版默认情况下关闭了内核转储的功能。通过使用ulimit命令可以查看当前的内核转储功能是否有效。 ulimit -c 0 -c表示内核转储文件的大小限制,为0表示内核转储无效。可以使用ulimit -c ulimited,设为无限制之后,发生问题时进程的内存就可以全部转储到内核转储文件中。 通...
2018-06-01 22:53:28
183
原创 do...while(0)的使用
为什么需要使用do...whie(0),我们都知道do{...}while(condition)可以表示循环,但我们会遇见一些宏定义中可以不用循环的地方,使用到了do{...}while(0)。ex:#define foo(x) do{\statement1;\statement2;\}while(0)在初次遇见这样的宏定义的过程中会觉得比较奇怪,既然循环里面的语句只执行了一次,为什么会需要看似多...
2018-05-27 23:36:35
323
原创 map简单分析
map中数据的插入操作//方式1:map.insert(pair<T1,T2>());//方式2:map.insert(map<T1,T2>::value_type());//方式3:map[key] = value;上面两种方式和下面的方式,虽然都可以实现数据的插入操作,但在数据的插入性上涉及集合的唯一性。即当map中有这个关键字时,insert操作是插入不了数据的,...
2018-05-27 23:35:06
305
原创 GIt
1 分布式版本控制系统基本概念1.1 版本库用来存储所有历史数据的地方。大多数版本库中存储了文件的当前状态,历史修改时间,修改者以及修改的原因。Git分布式版本库,每个人都会在本地有自己的版本库,而不是服务器上公共的版本库。版本库中其他存储的常见内容有Makefile,配置文件,设计文档,使用文档,运行脚本,单元测试脚本等信息。1.2 工作目录树开发项目中所需要的全部文件,...
2018-03-26 12:23:37
211
原创 gPRC基础教程
1.什么是RPC? RPC 远过程调用.在理解远程调用之前,首先我们来了解一下本地调用,只有更好的理解了本地调用,才能更好的理解RPC.1.1 本地调用 ex:本地的函数调用 在函数调用的时候,一般会经过几个步骤 返回地址入栈 参数入栈 提升堆栈空间 函数参数的复制 执行函数调用 清空堆栈1.2.为什么需要RPC?
2018-01-05 20:02:16
11790
原创 STL学习笔记-模板知识
基础知识泛化templateclass Test{};特化templateTest{};偏特化个数偏特化templateclass Test{};templateclass Test{};范围偏特化templateclass Test{};templateclass Test{};templatec
2017-12-17 00:25:28
141
原创 STL学习笔记
容器的结构序列式容器array 连续的储存空间 且大小固定vector 连续的储存空间 起始位置固定 动态向后扩容 每次增长的大小为2倍增长动态增长的过程中 需要重新找到空间 需要转移元素deque 双向 分段连续空间 每次新增时扩充一个buffer 内部可以实现队列 和 栈 list 非连续的储存空间 双向链表
2017-12-16 21:57:11
185
原创 线程类基本封装
线程类面向对象风格:通过子类重写run方法 实现多态 从而实现依赖反转但我们要提供抽象类和接口将run()方法和startThread()方法声明的私有的 其实本没有有必要声明为公有的 我们在start------>startThread ---->runclass Thread{Thread();virtual ~Thread();void s
2017-12-15 15:38:18
981
原创 muduo学习异常类
头文件#include 获取程序的堆栈信息的函数/* Store up to SIZE return address of the current program state in ARRAY and return the exact number of values stored. */int backtrace(void **array, int size);
2017-12-15 15:36:59
265
原创 Linux下原子操作函数
Linux 下gcc内置的原子操作函数头文件#include编译时需要加上-march= cpu-type(可以设置为native 让系统自动去检测)//先获取值再操作type __sync_fetch_and_add (type *ptr, type value, ...)type __sync_fetch_and_sub (type *ptr, type
2017-12-15 15:34:18
2387
原创 Linux下时间相关
/*与时间相关的定义所在的文件夹/usr/include/time.h /usr/include/bits/time.hstruct timeval { time_t tv_sec; susecond_t tv_usec; //当前妙内的微妙数 };struct tm { int tm_sec; //当前秒 int tm_m
2017-12-15 15:33:02
306
原创 rabbitmq
最近在看后台框架的源码中,在初次看到系统的三层架构中使用了中间件rabbitmq,可能之前没有使用过相关的中间件,一时之间在看到rabbitmq中间件的使用的时候,没有看懂,于是看了相关的博客,发现很多博客都只是很抽象的描述了,但我们在看代码的过程中,里面的数据其实还是比较复杂的,导致了第一次直接看源码的时候并没有了解到其真正的含义,如果想更好的了解,其实根本不用看相关的博客,rabbitmq官网的
2017-12-11 21:05:13
310
原创 设计模式之单例模式
GOF 单例模式class Singleton{public:static Singleton * getInstance(){if(pInstance == NULL){pInstance = new Singleton();return pInstance;}}void releaseInstanc
2017-12-10 18:11:19
131
原创 ref
在C++的算法和函数之间,以类对象作为参数的情况很非常常见的问题,一般情况下传值语义是可行的,但也有很多特殊情况,作为参数的函数对象拷贝代价过高(具有复杂的内部状态),或者不希望拷贝对象(内部状态不应该被改变),甚至拷贝是不可行的(noncopyable、单件)。templateclass T> class reference_wrapper { public:
2017-12-03 23:04:46
218
原创 智能指针
1.内存泄漏2.野指针3.访问越界boost智能指针(RAII资源获取及初始化 在构造函数中初始化 在析构函数中释放资源) class RAIIClass{public:RAIIClass(){InitializeCriticalSection(&cs);EnterCriticalSection(&cs);
2017-12-03 22:58:38
208
原创 静态链接库与动态链接库
静态链接库会生成lib文件(实现)和.h文件 (声明)使用静态链接库的方法1.将这两个文件复制到项目工程目录下 包含头文件 #pragma comment(lib,".lib")2.在项目设置中,链接是将.lib文件也链接进来静态链接库只是单纯将代码全部生成在项目中,并没有实现真正的模块化。动态链接库的生成 (windows下
2017-12-03 17:43:57
153
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人