- 博客(93)
- 资源 (2)
- 收藏
- 关注
转载 C++单元测试框架Catch1.x简介
Getting CatchThe simplest way to get Catch is to download the latest single header version. The single header is generated by merging a set of individual headers but it is still just normal source code in a header file.The full source for Catch, includin
2021-11-23 19:54:45 352
转载 Visual C++ 里的异常处理
简介微软Visual C++是Win32最广泛使用的编译器,因此Win32反向器对其内部工作非常熟悉。能够识别编译器生成的粘合代码有助于快速集中于程序员编写的实际代码。它还有助于恢复程序的高级结构。我将集中讨论MSVC编译程序中的堆栈布局、异常处理和相关结构。假设对汇编程序、寄存器、调用约定等有一定的了解。名词解释:Stack frame — 堆栈帧,函数使用的堆栈段的片段。通常包含函数参数、返回调用方地址、保存的寄存器、局部变量和其他特定于此函数的数据。在x86(和大多数其他架构)上,调用者和被调
2021-10-22 17:33:28 1219
原创 IsBadReadPtr函数和异常处理
起因是优化代码性能,注意到这个函数,搜了一下发现是微软弃用的函数,说是有线程安全问题。经过一系列操作发现,处理大文件时这个函数会导致耗时变长,于是就研究一下这个函数。首先看函数开头:mov edi, edipush ebpmov ebp, esppush 0FFFFFFFEhpush offset stru_77991A20push offset FindResourceExA_SEHmov eax, large fs:0push ea
2021-10-21 18:48:30 2346
转载 C++ Runtime Code Reload
Quick prototyping and fast iteration times are incredibly important concepts for modern game development. Being able to hot swap an asset while the game is up and running can make the difference between a succesfull or a mediocre game simply because artist
2021-09-10 17:30:15 370
原创 https的中间人攻击和防范
https的中间人攻击和防范这里的中间人场景主要是Windows平台下的C/S架构劫持,技术指的是SSL劫持攻击,即SSL欺骗,剥离攻击暂不涉及。整体原理是伪造证书,既充当请求方的server角色,又充当真正server的请求方。以此来获取和篡改通信的明文报文数据。整体流程使用openSSL制作证书编写代理程序根证书添加到可信任发布机构设置系统代理证书制作首先装个openSSL,安装包下载地址:http://slproweb.com/products/Win32OpenSSL.html
2021-09-09 17:07:59 929
转载 maven 配置指南
maven 配置指南打开 maven 的配置文件( windows 机器一般在 maven 安装目录的 conf/settings.xml ),在<mirrors></mirrors>标签中添加 mirror 子节点:<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url&g
2021-09-02 10:53:35 126
转载 ssl证书
随着SSL证书的广泛应用,申请SSL证书的人也越来越多,但是很多使用SSL证书的用户其实并不太了解SSL证书。他们仅仅是因为要把站点从HTTP转换到HTTPS而申请使用SSL证书,而最终用户也只是获取SSL证书也是证书链的一部分而已。在本文将为大家介绍关于SSL证书的根证书和中间根证书的知识。什么是根证书?根证书是指CA机构颁发SSL证书的核心,是信任链的起始点。根证书是浏览器是否对SSL证书每个浏览器都有一个根证书库,有的浏览器是采用自主的根证书库,而一些浏览器则采取第三方的根证书库。而根证书库.
2021-06-30 09:43:53 158
原创 lacewing简介
lacewing简介liblacewing是一个跨平台的,为C/C++提供的高级网络开源库,旨在提供一个简明的类,做到能够扩展并且可以平台优化(支持IOCP/EPOLL/KQUEUE等)。Classeslacewing::eventpumpeventpump is a default implementation of pump provided by the library, power...
2019-08-20 11:39:27 482
转载 lxl 大厅协议 -- [libcef部分]
根据Reversing the League of Legends Client一文中提到的方法,我们可以通过API Monitor拦截cef_parse_url得到部分的 url 调用。这里为了方便,介绍另一种方法。工具:Fiddler+Proxifier+TCPView准备工作:在Proxifier中设置一个针对LeagueClientUx进程的访问转向,...
2019-07-17 16:27:34 642 1
转载 Android 双开沙箱 VirtualApp 源码分析(六)ContentProvider
Android 双开沙箱 VirtualApp 源码分析(六)ContentProviderProvider 注册回顾前面,Activity 启动的时候会检查 Application 是否初始化,会调用 bindApplication,里面执行了安装 Provider 的方法:private void installContentProviders(Context app, List<...
2019-06-18 18:58:06 485
转载 Android 双开沙箱 VirtualApp 源码分析(五)BroadcastReceiver
Android 双开沙箱 VirtualApp 源码分析(五)BroadcastReceiver方案猜测同 Activity 一样,Client App 在 Menifest 中注册的静态广播外部 AMS 是无法知晓的,经过前几章的分析,相信大家已经是老司机了,我们可以先尝试提出自己的观点。和 Activity 一样使用 Stub 组件占坑?仔细想一想是无法实现的,因为你无法预先确定 Cl...
2019-06-18 18:53:49 554 1
转载 Android 双开沙箱 VirtualApp 源码分析(四)启动插件 Service
Android 双开沙箱 VirtualApp 源码分析(四)启动插件 Service原生 Service 创建过程首先有必要了解一下原生 framework 对 Service 的创建,因为在 VA 中启动 Service 和 Activity 有很大的区别。首先入口 ContextWrapper.startService():@Override public Component...
2019-06-18 18:40:57 347
转载 Android 双开沙箱 VirtualApp 源码分析(三)App 启动
Android 双开沙箱 VirtualApp 源码分析(三)App 启动在这之前,我们还是要先了解一下 VA Client Framework 和 VAService 之间的通讯方式VAService 与通讯VAService首先,VAService 是指 VA 仿造 Android 原生 framework 层 Service 实现的一套副本,举例有 VActivityManagerS...
2019-06-18 18:24:44 668
转载 Android 双开沙箱 VirtualApp 源码分析(二)
Android 双开沙箱 VirtualApp 源码分析(二)VA 初始化先看一下代码:VirtualCore.startuppublic void startup(Context context) throws Throwable { if (!isStartUp) { // 确保 MainThread if (Looper...
2019-06-18 18:08:55 520
转载 Android 双开沙箱 VirtualApp 源码分析(一)
欢迎使用CSDN-markdown编辑器最近发现了一个非常好的开源项目,基本实现了一个 Android 上的沙箱环境,不过应用场景最多的还是应用双开。VA github: https://github.com/asLody/VirtualAppVA 的源码注释: https://github.com/ganyao114/VA_Doc第一章主要是分析一下项目的整体结构。包结构andro...
2019-06-18 18:03:47 1779
转载 Panorama - Custom DOTAScenePanel
IntroductionIn this tutorial we'll go through the tricks you can do with the undocumented DOTAScenePanel class in panorama.Now, you might have seen its usage if you looked through the sources in t...
2019-04-17 17:23:59 201
转载 Getting Started With Dota 2 Modding
So you're completely new to Dota 2 modding? Don't know where in the hell to begin? This is the guide for you, the future Dota 2 modder!Note: “Addon”, "mod", and “custom game” are all synonymous thro...
2019-04-17 17:21:56 152
原创 影响并发代码性能的因素
多处理系统中,使用并发的方式来提高代码的效率时,你需要了解一下有哪些因素会影响并发的效率。即使已经使用多线程对关注进行分离,还需要确定是否会对性能造成负面影响。因为,在16核机器上应用的速度与单核机器相当时,用户是不会打死你的。之后你会看到,在多线程代码中有很多因素会影响性能——对线程处理的数据做一些简单的改动(其他不变),都可能对性能产生戏剧性的效果。所以,多言无益,让我们来看一下这些因素吧,...
2019-03-04 16:49:53 1445
原创 C++11 宽窄字符转换
C++11增加了Unicode字面量的支持,可以通过L来定义宽字符:std::wstring str = L"中国人"; // 定义Unicode字符串将宽字符串转换为窄字符串需要用的codecvt库种的std::wstring_convert。std::wstring_convert需要借助以下几个Unicode转换器:std::codecvt_utf8,封装了UTF-8与U...
2019-03-01 14:52:30 1734
原创 C++11实现一个加载dll并调用其中函数的dll帮助类
在C++中调用dll中的函数比较繁琐,调用过程如下:在加载dll后还需要定义一个对应的函数指针类型,接着调用GetProcAddress获取函数地址,再转成函数指针,最后调用该函数。如下:void TestDll(){ typedef int(*pMax)(int a, int b); typedef int(*pGet)(int a); HINSTANCE hDll = Load...
2019-03-01 12:29:03 2403
转载 UML类图
平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道。实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧:一、类的属性的表示方式在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包含name,age和email这3个属性,以及modifyInfo()方法。...
2019-02-28 18:40:11 470 1
原创 把C++静态库lib封装到Lua解释器中
把C++静态库lib封装到Lua解释器中本文介绍了Lua和C/C++交互的三种方式:C代码中调用执行Lua脚本Lua脚本调用C编写的dll库把C/C++编写的静态lib库封装进Lua解释器,由Lua脚本调用前两种方式网上已经有很多现成的文章了,只做粗略的介绍,由于此次我的需求是把代码封装成lib库,再编译链接进lua解释器,最终由lua脚本直接调用,因此本文重点对第三种方式做介绍,并...
2019-02-27 18:15:22 877
转载 使用tolua++实现C++与LUA相互调用
LUA是一种目前很流行的高效精简的脚本语言。LUA一个特点是比较方便的与C通讯。然而要在脚本中使用C++类使用基本的LUA方法还是比较麻烦,纯手工暴露一个类的接口到LUA工作量还是很大的,而且都是一些简单的重复劳动。好在有tolua++这个工具,可以让程序员从简单的重复劳动解脱出来。tolua++包含两个部分,一个EXE,一个LIB,EXE用来通过package文件生成C函数的胶水函数...
2019-02-26 11:50:13 1958
转载 Running LuaJIT
原文:http://luajit.org/running.htmlLuaJIT has only a single stand-alone executable, called luajit on POSIX systems or luajit.exe on Windows. It can be used to run simple Lua statements or whole Lua ap...
2019-02-20 15:50:49 430
转载 Lua 与 C 的交互
转载:https://www.cnblogs.com/chenny7/p/3993456.htmlLua是一个嵌入式的语言,它不仅可以是一个独立运行的程序,也可以是一个用来嵌入其它应用的程序库。C API是一个C代码与Lua进行交互的函数集,它由以下几部分构成:1、 读写Lua全局变量的函数;2、 调用Lua函数的函数;3、 运行Lua代码片段的函数;4、 注册C函...
2019-02-19 18:12:26 722
转载 将exe和dll文件打包成单一的启动文件
当我们用 VS 或其它编程工具生成了可执行exe要运行它必须要保证其目录下有一大堆dll库文件,看起来很不爽,用专业的安装程序生成软件又显得繁琐,下面这个方法教你如何快速把exe文件和dll文件打包成一个可执行文件,就像我们平时看到的单一绿色软件一样,只要双击它,就能运行你的程序,简单,方便,而且只需用最常见的winrarr即可完成1.电脑上安装winrar,这个工具是最普及的压缩软件,我用的...
2019-02-18 14:10:46 500
转载 C++类头文件不暴露私有变量的一种写法
在类的头文件中不暴露私有变量,目的一般有两个:1. 提供给别人的dll对应的头文件中,不希望在头文件中暴露私有变量的名称;2. 因为私有变量的类型需要包含另一个头文件,所以不希望在头文件中包含其它头文件;一般可以用下面的方法来隐藏私有变量。TWebSocketServer.hclass TWebSocketServer{public: TWebSocketS...
2018-12-19 18:48:14 1405
转载 USB鼠标、键盘数据格式
鼠标发送给PC的数据每次4个字节 BYTE1 BYTE2 BYTE3 BYTE4 定义分别是: BYTE1 -- |--bit7: 1 表示 Y 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出 |--bit6: 1 表示 X 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出 ...
2018-12-14 18:05:15 2217 1
转载 C++设计模式系列
C++设计模式——简单工厂模式C++设计模式——工厂方法模式C++设计模式——抽象工厂模式C++设计模式——单例模式C++设计模式——建造者模式C++设计模式——原型模式C++设计模式——适配器模式C++设计模式——桥接模式C++设计模式——组合模式C++设计模式——装饰模式C++设计模式——外观模式C++设计模式——享元模式C++设计模式——代理模...
2018-10-22 14:56:08 19314 7
转载 C++设计模式——模板方法模式
模板方法模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对模板方法模式是这样说的:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的接口即可重定义改算法的某些特定步骤。我结合我在实际开发项目中的一个例子来说说这个模板方法模式吧。我们曾经做过一款产品,这个产品类似于一个云端的文件管理客户端。对于这样的一个客户端,由于其云端的...
2018-10-22 11:19:23 1831 1
转载 C++设计模式——访问者模式
访问者模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对访问者模式是这样说的:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。该模式的目的是要把处理从数据结构分离出来。访问者模式让增加新的操作很容易,因为增加新的操作就意味着增加一个新的访...
2018-10-22 11:17:32 1578 1
转载 C++设计模式——策略模式
策略模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对策略模式是这样说的:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。该模式使得算法可独立于使用它的客户而变化。策略模式为了适应不同的需求,只把变化点封装了,这个变化点就是实现不同需求的算法,但是,用户需要知道各种算法的具体情况。就像上面的加班工资,不同的加班情况,有不同的算法。我们不能在程序中将计算工资的算法进行...
2018-10-22 11:16:00 1842
转载 C++设计模式——状态模式
前言在实际开发中,我们经常会遇到这种情况;一个对象有多种状态,在每一个状态下,都会有不同的行为。那么在代码中我们经常是这样实现的。typedef enum tagState{ state, state1, state2}State;void Action(State actionState){ if (actionState == sta...
2018-10-22 11:13:19 2020
转载 C++设计模式——观察者模式
观察者模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对观察者模式是这样说的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当一个对象发生了变化,关注它的对象就会得到通知;这种交互也称为发布-订阅(publish-subscribe)。目标是通知的发布者,它发出通知时并不需要知道谁是它的观察者。再说说上面的数据和图之间的关...
2018-10-19 15:53:24 2818 2
转载 C++设计模式——备忘录模式
备忘录模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对备忘录模式是这样说的:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。有时有必要记录一个对象的内部状态。为了允许用户取消不确定的操作或从错误中恢复过来,需要实现检查点和取消机制,而要实现这些机制,你必须事先将状态信息保存在某处,这样才能将对象恢复到它们先前...
2018-10-19 15:51:47 1211
转载 C++设计模式——中介者模式
前言我们都知道,这个国际政治是一门很深的学问,不玩政治的人是搞不懂的。那么多的国家,国家之间的关系又及其复杂;就好比现在,美国和中国有经济利益关系,美国又和日本有盟友关系,朝鲜又和中国有说不清道不明的关系;这些复杂的关系,稍微处理不好,就可能引发局部战争,更有可能引发第三次世界大战。如果出现了国与国之间出现了利益纠纷,那么该怎么办呢?这个时候,联合国出现了。联合国就是一个处理国与国之间纠纷的中...
2018-10-19 15:47:07 1268
转载 C++设计模式——迭代器模式
前言最近非常感伤,总是怀念大学的日子,做梦的时候也常常梦到。梦到大学在电脑前傻傻的敲着键盘,写着代码,对付着数据结构与算法的作业;建立一个链表,遍历链表,打印链表。现在把那个时候声明的链表的头文件拿出来看看:typedef struct tagNode{ int value; tagNode *pPre; tagNode *pNext;}Node;c...
2018-10-19 15:45:28 1279
转载 C++设计模式——解释器模式
解释器模式在GOF的《设计模式:可复用面向对象软件的基础》一书中对解释器模式是这样说的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。就如上面说的那个游戏,我输入up walk ...
2018-10-19 15:41:51 1249
转载 C++设计模式——命令模式
什么是命令模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对命令模式是这样说的:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。在OOP中,一切都是对象,将请求封装成对象,符合OOP的设计思想,当将客户的单个请求封装成对象以后,我们就可以对这个请求存储更多的信息,使请求拥有更多的能力;命令模式同样能够把请求发送者和接...
2018-10-19 15:40:05 1372
转载 C++设计模式——职责链模式
什么是职责链模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对职责链模式是这样说的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,直到有一个对象处理它为止;如下图:对于每个角色,他们都有他们的职责;当我提交了休假申请时,项目经理需要判断,看看自己能否处理,如果休假超过了2个小时,那么项目经理就不能处理了;项目经理将这个请求提交...
2018-10-19 15:38:03 1210
C++静态代码分析工具PVS-Studio
2018-08-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人