C
文章平均质量分 69
LostSpeed
c++ coder
展开
-
MemoryModule - 应用编程细节
MemoryModule将DLL从内存载入,试过了好使。在内存载入的DLL中,对自身对应的载入前实体做完整性的hash校验。在内存载入的DLL中,取得资源信息(文件版本资源中的版本信息等,字符串资源)需求1,官方没提供内存载入之前的实体信息,这个要自己改,在CTX上加入载入前的信息(pData, lenData)需求2,官方演示了前半段,演示的不全。需要自己整理一下。原创 2024-05-15 16:00:38 · 534 阅读 · 0 评论 -
vs2019 - LoadLibrary失败时的排查方法
在做从内存载入DLL的实验,发现从内存载入DLL失败。昨天还是成功的。昨天将工程归档了,清掉了临时文件。应该是少了啥依赖的东西。用LoadLibrary显式载入,也失败。去查msdn, WIN32API失败后,可以调用GetLastError() + FormatMessage()来显示失败信息。这时显示的信息为确实为依赖的模块,具体哪个模块,还不清楚。最后,直接隐式调用DLL接口,如果是缺哪个依赖的模块,直接有messagebox提示,一目了然。原创 2024-05-12 10:17:07 · 662 阅读 · 0 评论 -
MemoryModule - exp - test
MemoryModule 是从内存载入DLL的一种实现。测试一下和隐式载入DLL/显式载入在效果上有哪些不同?是否可以在内存中载入执行正规DLL的接口?在内存载入正规DLL时,是否可以在DLL中执行正常的API?是否可以正常调用其他正规DLL的接口?原创 2024-05-10 19:20:55 · 960 阅读 · 0 评论 -
gtest的编译与使用
gTest是 googletest的缩写,如果直接找gTest项目,是找不到的。库地址 https://github.com/google/googletest.git迁出到本地后,切到最新发布版1.14.0。原创 2024-05-09 13:19:07 · 602 阅读 · 0 评论 -
gflag的编译和使用
glog的新版(>4.0)一定要包含gflag(因为要设置一些glog内部变量, 否则无法保存成日志文件), 否则不能正常使用。先将gflag编译出来。原创 2024-05-09 11:46:57 · 531 阅读 · 0 评论 -
vs2019 - release版中_DEBUG宏生效的问题
在加固程序,需要去掉PE的字符串表中和逻辑相关的字符串。编译成release版后,用IDA看,还是发现有debug版才有的字符串。那明显工程是按照debug版来编译的。但是PE的体积确实比debug版小多了。为啥还是按照debug版编译的呢?编译工程的release版,为啥还是走的debug版的配置呢?看工程里面的提示,为啥_DEBUG宏是亮的呢?开始以为是VS2019的bug, 就故意将_DEBUG宏包含的库名改错,结果真走的是_DEBUG宏的判断分支。/Mdd会隐含的定义_DEBUG宏。原创 2024-04-28 12:15:26 · 308 阅读 · 0 评论 -
vs2019 - warning LNK4099: 未找到 PDB
1>xlsxwriter_debug_x64.lib(drawing.obj) : warning LNK4099: 未找到 PDB“xlsxwriter.pdb”(使用“xlsxwriter_debug_x64.lib(drawing.obj)”或在“D:\my_dev\my_local_git_prj\soft\exp\exp009TestLink4098MsvcrtLib\main\x64\Debug\xlsxwriter.pdb”中寻找);正在链接对象,如同没有调试信息一样。原创 2024-04-28 10:31:29 · 853 阅读 · 0 评论 -
vs2019 - warning LNK4098 : 默认库“msvcrt.lib”与其他库的使用冲突
在工程中看到了编译警告warning LNK4098 : 默认库“msvcrt.lib”与其他库的使用冲突;请使用 / NODEFAULTLIB : library今天想起来,验证一下问题原因。做了实验,应该就是主工程包含了编译选项不同的静态库引起的。e.g. DebugX64的主工程包含了ReleaseX64的静态库。e.g. 主工程的运行时库是/Mdd, 静态库的运行时库为/Md。原创 2024-04-27 21:30:53 · 1752 阅读 · 0 评论 -
类属回调的实验
以前也总结过2次使用类属回调函数的方法。总是要借用静态函数,很丑。上个周末在做其他实验时,也用到了类属回调.这次找的资料中,使用类属回调的方式很优雅。原创 2018-11-05 15:05:00 · 194 阅读 · 0 评论 -
c++ - 动态载入DLL接口,可以给IDA静态分析增加一点麻烦
工程中用到了PostMessage来压入任务,太扎眼了。在IDA静态分析时,看API引用,很容易看到压入任务的实现。想动态载入API, 看看静态分析效果如何?网上有大神开源了一个动态载入DLL的封装类(http://www.codeproject.com/KB/DLL/LateLoad.aspx)以前也用过,只是用来方便动态调用DLL接口。这次用,主要是看看用IDA静态分析时,动态载入的API接口是否容易识别?写个demo(vs2019 vc++ console), 转圈打印字符串. 如果圈数>10,原创 2024-04-14 17:36:47 · 568 阅读 · 0 评论 -
vs2019 - detected memory leak
用VS2019建立的控制台工程, 在调试模式下, 如果出了内存泄漏,是没有提示的。// 网上的大佬在2010年就给出了解决方法。原创 2024-04-13 19:09:12 · 1237 阅读 · 0 评论 -
c++ - pointer convert - class member function’s pointer <==> void* - v1
在工程中要将类非静态成员函数地址传给其他类(e.g. post一个消息, 带上一个类函数回调指针)。前面做过一个不靠谱的实验,不理想。今天查资料时,看到前辈同学的思路,很受启发。做了实验,只要定义一个结构体,里面定义一个类非静态成员函数指针的变量就行。}TAG_FUN;类非静态成员函数指针的变量赋值也不用强转,在不同对象之间传的是结构体实例的指针, 而不是直接传类非静态成员函数指针。// 赋值// xx是类非静态函数指针地址。// 传给其他对象时。原创 2024-04-11 21:47:43 · 261 阅读 · 0 评论 -
VS - 显示预定义宏的函数
MS官方有文档(),指出了VS中的预定义宏。看起来有点用,封装了一个函数,用来检查这些预定义宏的值。在console, win32 desktop app, mfc app中都实验了,好使。原创 2024-04-04 17:03:10 · 293 阅读 · 0 评论 -
用WHERE命令可以在命令行搜索文件
想确认PATH变量中是否存在某个指定的程序(具体是在PATH环境变量中给出的哪个路径底下?原创 2024-03-27 13:04:52 · 932 阅读 · 0 评论 -
C++ - 多个buffer合并成一个buffer的管理类
客户端要向服务端提交包含在多个buffer中的信息, 如果提交多个buffer(文件), 挺麻烦的.如果将这些buffer(文件), 压缩成一个文件, 处理起来也不是很方便.尝试将多个buffer封装到一个buffer中, 最终将封装好的buffer(写成文件也行)给服务端, 只需要提交一次.封装了一个管理类, 可以向管理类push多个buffer, 最后调用接口, 得到一个完整的大buffer(包含所有压入的小buffer).原创 2024-03-08 15:31:07 · 474 阅读 · 0 评论 -
C++ - 简化线程调用的好方法 - 传递类普通成员函数指针给线程作为参数
以前启动线程, 每个启动线程的地方都要写好多句话. 唯一不同的地方是要执行的类静态成员函数不同.明显有很多的多余代码实现, 感觉很不好.正好昨天, 做了sqlite3回调函数的改进(sqlite - sqlite3_exec - c++回调函数的处理).里面用到了给回调函数传递类普通成员函数的指针, 和如何用在类回调函数中使用参数中传入的类实例指针调用函数参数传进来的类普通成员函数指针.今天想对启动线程的代码, 也做类似的处理.弄了2个小时, 搞定了.原创 2023-12-07 15:11:56 · 960 阅读 · 0 评论 -
用宏实现模板功能
前言今天遇到一道作业, 让我想了很久. 这道题真奇葩, 已经被老师玩哭了^_^我作出来一个结果, 不知道合不合老师的心意~~题目4.用宏实现模板功能,分别输出void main(){ADD(int)(1,2);ADD(float)(1.0f,2.2f);ADD(int)(10,20);ADD(char*)("hello","wolrd");}测试工程//原创 2015-12-27 00:26:10 · 2208 阅读 · 0 评论 -
vs2017 : 非标准语法;请使用 “&“ 来创建指向成员的指针
笔记2019年, 用vs2010写了一个上位机程序. 用起来好使, 但是处理逻辑挫, 导致处理业务很慢.现在用在新产品里面, 想重构一下. 这时, 我本本上只装了vs2017.用vs2017编译时, 出现以下报错. 报错的代码在类函数指针赋值的地方.void CMyThread::RegisterThreadProc(CMyThread::TAG_REGISTERTHREADPROC* pParam) { if ((NULL != pParam) && (NULL != pPara原创 2021-12-20 11:46:21 · 2436 阅读 · 0 评论 -
2字节16进制数转整数
笔记// @file test.cpp// @brief 试验一下2字节16进制数转整数// modbus 回包一个寄存器是2个字节, 如果这2个字节表示的是一个short int, 用程序转一下. 强转也可以.#include <stdlib.h>#include <stdio.h>// 2字节16进制数转intint WORD_2_int(unsigned short int wIn);int main(){ unsigned short int wIn原创 2021-12-15 17:25:03 · 1800 阅读 · 0 评论