C/C++
文章平均质量分 68
RLib
http://blog.csdn.net/rrrfff
展开
-
各类经典搜索算法(Search Algorithms)的简单介绍和C++实现
/// /// 顺序搜索法(Sequential Search)/// 优点: 该方法对数据无事先排序(Sorting)要求, 容易实现/// 缺点: 搜索效率差(平均搜索 (N + 1) / 2 次), 不管是否排序, 每次都必须从头到尾遍历一次/// 时间复杂度: /// 如果没有重复数据,线性查找在找到任一元素时就终止,否则需要全部遍历. 在最差情況下, 需作N次比较, O(N)原创 2012-04-21 16:05:34 · 48682 阅读 · 0 评论 -
NTAPI枚举指定进程中指定模块创建的线程
代码示例了如何使用API枚举指定进程中指定模块创建的线程, 注意该方案存在一定局限性, 就是模块的起始地址和线程起始地址之间的关系无法保证, 可能存在漏掉的.原创 2015-01-24 20:33:55 · 35480 阅读 · 0 评论 -
快速恢复Safengine Protector的Shadow DLL
本文以Safengine Protector v2.3.9.0为例, 提供了一种C++代码快速恢复Safengine的Shadow Dll的方法, 没啥技术含量, 仅希望能给各位一点参考.原创 2014-01-28 17:52:44 · 49393 阅读 · 2 评论 -
针对 std::string 的 trim 和 replace 方法
std::string不支持trim方法,同时原生的replace方法在使用上和其它语言也有些许差别,这里提供了两个替代方法,个人感觉更加好用。原创 2012-02-02 15:40:32 · 51053 阅读 · 3 评论 -
C++构造DHCP Discovery报文并使用socket发送
DHCP由BOOTP协议发展而来,而后者基于UDP、IP协议,这使得使用socket发送DHCP报文成为可能。本文示例构造了DHCP Discovery报文并调用socket接口发送,值得注意的是,由于DHCP要求发送者ip是0.0.0.0,所以必须使用raw socket进行发送(本文没有示例),更进一步的,用户层代码Linux、macOS系统可以使用libpcap,Windows系统可以使用Windivert、Winpcap/Npcap进行发送。原创 2012-07-15 18:45:00 · 48596 阅读 · 3 评论 -
C/C++获取函数返回地址
一般而言, 能否覆盖函数返回地址是栈溢出攻击成功与否的前提, 而获取函数返回地址原理很简单, 栈回溯即可, 下面是x86上相应获取代码(仅为示例不可用于生产):#define Stack_Length (4 * 4 * 4)static void *_esp_arr[Stack_Length];void *GetRet(void *caller){ void *_esp; __asm原创 2012-03-11 13:20:33 · 10297 阅读 · 3 评论 -
XYWi-Fi v2.0 简单的笔记本无线热点分享工具【Win】
可执行文件、源码下载地址: http://code.google.com/p/rlib/downloads/list原创 2012-03-04 13:45:14 · 9325 阅读 · 8 评论 -
【OpenCV3.3】搭建VS2017+Android开发环境
在上一篇 【OpenCV3.3】编译源码并搭建VS2017+Windows开发环境 中我们搭建了OpenCV的Windows开发环境,现在我们来搭建Android的C++开发环境(当前版本直接使用官方提供的SDK)。原创 2017-08-07 21:36:03 · 20724 阅读 · 1 评论 -
Android在JNI层反射替换当前app的ClassLoader
值得一提的是,反射确实是个很强大很灵活的东西, 借助哈希、红黑树等高度优化的数据结构让反射的代价降到了极低,通过反射+JNI, 可以做到几乎任何你想做的东西。JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *unused){ JNIEnv *env; jvm->GetEnv(reinterpret_cast(&env), JNI_VER原创 2012-02-02 15:47:29 · 6380 阅读 · 0 评论 -
另类HOOK 以KiFastSystemCall为例
标题的另类并非什么高新技术, 说白了仍是满大街的inline hook, 只不过它为解决可patch空间不足提供了一种有限的解决方案, 本文以早期32位windows系统的以KiFastSystemCall为例.原创 2011-01-21 22:35:00 · 2683 阅读 · 1 评论 -
Native C++借助CLR动态加载并调用.NET程序集
Native C++代码和托管.NET代码互操作并不是什么难事, 资料也很多, 但是有些方法复杂繁琐, 本文介绍了一种简单的可行、支持动态加载的基于CLR的交互方法.原创 2014-06-20 14:01:41 · 43128 阅读 · 3 评论 -
在 Visual C++/Native 代码中调用.NET 程序集
在本地 Visual C++中基本上有四种方法可以调用.NET程序集。微软的All-In-One Code Framework All-In-One Interop and Fusion Code Samples有一些可以工作的例子来说明这个问题。1.本地 VC++模型调用CLR Hosting APIs来托管CLR,加载并调用.NET程序集,该方法也被用来保护.NET程序(套一原创 2011-08-22 08:40:09 · 48051 阅读 · 0 评论 -
C++解析http-chunked数据
chunked 是http传输过程中常用的一种分块手段, 这里是对chunked数据的简易处理方法,主要是拼接block, 去掉块大小和回车信息即可static ResponseStream *rlib_parse_chunk_data(char *lp_chunk_data, intptr_t nsize){ auto pstream = new ResponseStream(Utilit原创 2012-07-12 06:57:11 · 40141 阅读 · 3 评论 -
URL解析的C++代码 - 摘自RLib
备注:C++解析URL除了第三方库之外,还可以使用ParseURL,该函数定义在Shlwapi.h中,美中不足的是,无法解析出端口./************************************************************************//* Uri原创 2011-06-29 14:43:00 · 3571 阅读 · 0 评论 -
C++调用NTAPI枚举并强制关闭指定进程
#include "../../RLib/RLib/native/RLib_Native.h"#pragma comment(lib, "ntdll.lib")Array *found_if_process_by_name(LPCWSTR name IN, LPCWSTR parent_name IN){ unsigned long bytes = 0; ManagedMemoryB原创 2012-03-24 10:40:28 · 41943 阅读 · 2 评论 -
【DuiLib入门基础】九宫格corner属性详细解释
技术背景九宫格是用来减少图片缩放拉伸时失真程度的一种常用技术, 如果你做过android开发尤其是手游这块, 你可能很快发现这其实就是android所直接支持的一个特性9patch.对于九宫格图片,渲染引擎在绘制只拉伸图片中心部分,四个边角却不会被拉伸,这样只要图片中心的颜色是或近乎纯色,那么即使拉伸的倍数再大也会基本保持原有的整天效果。(这点可以用来弥补非矢量图的缺陷, 而且避免了矢量图原创 2012-02-12 11:30:52 · 65603 阅读 · 2 评论 -
分支预测(Branch Prediction)
分支预测(Branch Prediction)是现代处理器用来提高CPU执行速度的一种手段, 其对程序的分支流程进行预测, 然后预先读取其中一个分支的指令并解码来减少等待译码器的时间.原创 2015-04-11 10:58:40 · 35056 阅读 · 1 评论 -
C++对齐杂注__declspec(align(#))和#pragma pack的区别
一般来讲, 访问未对齐的内存(misaligned access)轻则影响效率, 重则引发异常(包括指令执行异常和结构体对齐不正常引发的逻辑BUG等), 总之内存对齐是程序员尤其是C/C++程序员是不得不重视的一个问题. MSVC++提供了两种对齐杂注, __declspec(align(#))和#pragma pack, 而在C++11标准中也加入了描述符alignas用于对齐控制, 本文主要简单解释下前面两种杂注的区别, 权当作者学习笔记.原创 2012-04-08 10:08:02 · 48696 阅读 · 0 评论 -
Stroustrup专访:畅想C++17
最近,Bjarne Stroustrup(设计并最初实现C++的作者)公开的一份草案引发了一场激烈讨论,讨论的话题围绕着C++17的设计目标以及可能加入的新特性。据Stroustrup说,C++17将会有以下三个设计目标:改善对大规模可靠软件的支持。支持更高级的并发模型。简化语言核心。针对以上的每个设计目标,Stroustrup列举了可加入C++17的新特性转载 2015-05-28 15:59:11 · 14522 阅读 · 0 评论 -
VS 2015 Update 2 构建 Android 程序遇到的一些问题
自VS2015起, Visual Studio开始逐渐内置支持跨平台开发, 并且Visual Studio团队还额外发布了一个编译工具集Clang with Microsoft CodeGen, 方便开发人员进行跨平台代码的开发, 该工具集在VS 2015 Update 2时采用的 Clang 版本号是3.7. 与此同时VS的移动开发能力也不再局限于Windows Phone, 而是支持了包括Android, iOS在内的主流平台的应用开发.本文就搭建过程中遇到的一些问题作个小结, 并不定时更新.原创 2016-04-10 12:38:09 · 56262 阅读 · 4 评论 -
解决VERIFIER STOP 00000900: A heap allocation was leaked.
VERIFIER STOP 00000900: pid 0xDE0: A heap allocation was leaked. 0A37011C : Address of the leaked allocation. Run !heap -p -a to get additional informat原创 2014-10-31 20:06:46 · 55945 阅读 · 1 评论 -
从缓冲区中加载BMP位图并返回句柄
C++从缓冲区中加载位图并返回句柄原创 2011-06-30 13:36:00 · 152854 阅读 · 3 评论 -
Tesseract-ocr 3.0.2源码 + VS2010项目工程 + 简单测试代码
编译环境:Visual Studio 2010所用类库版本:zlib 1.2.7lpng1514jpegsr9tiff-4.0.3giflib-5.0.4leptonica-1.69tesseract-ocr3.0.2下载地址http://pan.baidu.com/s/1c0pqvQg 密码rlib测试代码bool原创 2013-01-29 15:39:37 · 24931 阅读 · 45 评论 -
解决Visual Studio C++项目无法Build的情况
Visual Studio算是使用频率最高的IDE了,自我感觉各项功能都轻车熟路了,可是最近却遇到个莫名其妙的情况,那就是C++项目突然无法Build,无论项目源码是否改动,右键项目->Build/Rebuild都直接提示Build成功,没有任何错误提示,但是根本没进行任何编译,自然也没任何文件输出,查看配置管理器,发现相应项目的Build也是勾选的,这就尴尬了,要是开发中出现这种没有任何提示的b原创 2011-08-13 14:29:50 · 3587 阅读 · 0 评论 -
【OpenCV3.3】编译源码并搭建VS2017+Windows开发环境
OpenCV 3.3在8月3号正式Release,带来了许多优化改进和新特性,包括备受关注的深度神经网络(DNN)模块被正式引入主仓库,标志着OpenCV对DNN有了更深层次的优化与支持; 支持通过宏ENABLE_CXX11启用对C++ 11特性的支持;默认包含大量SSE4.X和AVX/AVX2指令集优化;内置Intel IPP版本升级至2017.2,官方测试显示有近15%的性能提升...原创 2017-08-07 16:10:05 · 34541 阅读 · 22 评论 -
【OpenCV3.3】特征值、奇异值分解与图像矩阵重构
在图像处理方面,矩阵分解被广泛用于降维(压缩)、去噪、特征提取、数字水印等,是十分重要的数学工具,其中特征分解(谱分解)和奇异值分解是两种常用方法,本文简单介绍如何在OpenCV中使用它们对图像进行分解,然后重新构造图像。 本文不会阐述两种分解的数学背景知识,但是为了方便读者唤醒记忆,会先贴出(部分)数学定义,详细的介绍和证明建议阅读矩阵理论相关书籍或者参考资料。原创 2017-08-21 18:11:41 · 16548 阅读 · 0 评论 -
【OpenCV3.3】SVM与字符分类示例
SVM,全称Support Vector Machine,即支持向量机,是机器学习中常用的分类器(同样支持向量回归),属监督式学习的一种。 在二值分类中,SVM通过寻找一个 决策最优分类超平面 来尽可能地将两类样本分开(最大分类间隔)并作为分类的判据,以期得到较强的泛化能力,我们所指的训练(train)主要就是寻找这个超平面。如果你看过相关推导,会发现原本复杂的问题被一步步等价,原创 2017-08-22 14:02:54 · 11876 阅读 · 0 评论 -
WINDOWS+CMAKE+VS2017编译OLLVM并整合到VS2017 NDK
OLLVM全称Obfuscator-LLVM,即基于LLVM框架的源码级别混淆工具,相比机器指令混淆,源码级别混淆无需关心底层指令差异(由编译器生成),因而更具兼容性和拓展性,对程序流程的控制更为全面,同时也易于理论研究的展开。 本文编译的OLLVM来自Github上的开源项目https://github.com/Qrilee/Obfuscator-LLVM,作者博文https:原创 2017-09-26 19:35:56 · 52724 阅读 · 4 评论 -
实现Android ARM64平台下Inline Hook框架
Android阵营新出机型的cpu基本都是64位了,虽然可以向下兼容armeabi-v7a,但是使用32位的so毕竟不能充分发挥64位cpu的潜力,所以以后arm64-v8a用的会越来越多。但是整个安卓生态圈似乎还没有开源发布的ARM64内联HOOK方案,所以自己动手写了个,姑且取名And64InlineHook吧,需要注意的是仍然是Alpha版。 关于Inline Hook的背原创 2017-09-23 21:00:02 · 60605 阅读 · 1 评论 -
数字图像处理均衡化灰度拉伸C++实现
/// /// 均衡化灰度拉伸/// /// 输出图像数据/// 输入图像数据/// 图像宽度/// 图像高度void equalize_gray(unsigned char *lpdst, const unsigned char *lpsrc, int width, int height){ RLIB_RENAME(width, width_x_height); width_原创 2012-06-23 08:08:53 · 53955 阅读 · 2 评论 -
Microsoft Visual Studio 2017 Supports Intel® AVX-512
Intel® AVX-512提供了32个程序可见的512位宽向量寄存器以及8个专用屏蔽寄存器, 支持的数据宽度是AVX/AVX2的两倍并能和AVX保持完美兼容而不带来性能损失, 是向512位SIMD支持跨出的巨大飞跃。VS 2017 v15.3也宣布增加了对Intel® AVX-512的编程支持,在这篇文章中,对比了未优化的C版本快速排序和使用Intel® AVX-512指令优化的快速排序,后者的性能平均提升了近十倍转载 2017-07-28 02:13:18 · 19662 阅读 · 0 评论 -
编程方式解析C++符号修饰别名(mangled name)
相比C语言,C++支持函数重载、类、模版等各种特性,如果C++的符号修饰仍按照C那样直接使用对应名称,虽然可读性很好,却不可避免的会出现各种错乱,于是C++符号修饰别名(mangled name)被设计出来, 用来解决上述问题,然而修饰规则取决于编译器实现,没有统一标准,比如gcc、msvc就各有一套,但好在都提供了相应接口进行解析(demangle),下面介绍如何使用他们原创 2012-02-02 15:42:58 · 8500 阅读 · 2 评论 -
C++调用libmp3lame实现压缩WAV为MP3【附VS2013项目】
The LAME Project LAME is a high quality MPEG Audio Layer III (MP3) encoder licensed under the LGPL. VS2013项目(libmp3lame, 可直接编译)下载链接:http://pan.baidu.com/s/1eQnqS9c 密码:5mg3/********************原创 2014-01-23 11:49:08 · 19487 阅读 · 6 评论 -
GNU Hash ELF Sections And GNU-style hash table
GNU Hash ELF Sections 和 GNU-style hash table (搜索关键词SHT_GNU_HASH, DT_GNU_HASH, .gnu.hash) 是经过精心设计、用来加速ELF符号表查找的一种手段,相比传统的ELF HASH查找, GNU HASH的效率更高, 原文简要介绍了其编程实现原理和数学背景知识。转载 2014-10-11 16:40:08 · 11333 阅读 · 1 评论 -
动归DP算法学习笔记 01背包 C++代码注解
01背包问题是动态规划的经典问题, 也是基础问题。#include #include #include #include #include #include "inputf.h"int knapsack_2d(int v, int n, const int *c, const int *p){ int *s = (int *)malloc(n * v * sizeof(int)原创 2011-08-09 15:18:29 · 4314 阅读 · 1 评论 -
【OpenCV3.3】通过透视变换矫正变形图像
在平面图像处理中,因为镜头角度等原因,容易导致图像出现倾斜、变形等情况,为了方便后续处理我们常常需要进行图像矫正,其中主要技术原理是两种变换类型--仿射变换(Affine Transformation)和透视变换(Perspective Transformation)。 仿射变换是二维坐标间的线性变换, 故而变换后的图像仍然具有原图的一些性质,包括“平直性”以及“平行性”,常用于原创 2017-08-18 17:13:29 · 53737 阅读 · 3 评论 -
dalvik下替换so简单dump出梆梆加固保护的odex
本文介绍了一种在dalvik虚拟机下简单可行、通过替换so实现的梆梆加固脱壳的方案, 不需要定制ROM、不需要动态调试, 并且由于掌握了代码主动权, 可以进一步深入进行抽离类还原、资源修复等工作。原创 2015-04-18 12:28:02 · 18690 阅读 · 0 评论 -
动态规划算法解最长公共子序列LCS问题
动态规划算法解LCS问题动态规划一般也只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一转载 2012-04-30 07:59:31 · 45180 阅读 · 6 评论 -
开源一套自己写的C++工具库 - RLib 开源框架
RLib aims at providing a lightweight, highly cohesive and low coupling framework of useful cpp toolkit.原创 2012-02-02 22:06:40 · 38143 阅读 · 2 评论 -
C++ STL 快速生成带后缀的随机文件名
示例代码展示如何运用 std::uniform_int_distribution 快速随机生成文件名并以 std::string 返回,可在某种情况下替代系统API。原创 2012-07-26 10:05:41 · 54796 阅读 · 0 评论