- 博客(2274)
- 资源 (604)
- 收藏
- 关注
原创 WTL - error - GetModuleHandle - ERROR_MOD_NOT_FOUND : 找不到指定的模块
在看一个WTL的demo, 同时也用VS2019的WTL向导搭建了一个相同环境的初始工程。将知识点搬进去之后,效果不一样。查了一下,是调用GetModuleHandl()时,没得到DLL的句柄。对了一下源码工程,没看出啥区别。看了网上资料,没人能说清楚这个问题。那用IDA看看吧, 反汇编是不会骗人的。看DLL名称的引用,看出来了,原来“必须要先LoadLibrary, 然后在程序其他地方调用GetModuleHandle()才会成功。
2024-07-02 23:33:00
154
原创 VS - regsvr32.exe的官方工程
如果是要使用COM DLL, 必须先注册。一般手工注册就要调用regsvr32.exe xx.dll但是控制的不够细,且一般来说,也就只能通过安装程序来注册COM DLL.如果是一个绿色版程序集合(e.g. 解压版的程序包),启动主程序后,先判断是否能正常操作COM DLL,如果不能,则自己先在程序实现里面,将解压包内自带的COM DLL先注册一下,再使用COM DLL。如果是这种场景的话,用系统自带的regsvr32.exe来注册COM DLL, 显然不能达到目的。
2024-06-16 13:07:40
460
原创 warning LNK4017: DESCRIPTION 语句不支持目标平台;已忽略
基于ATL的COM DLL导出函数,无法用__declspec(dllexport)直接在函数上标记为导出函数。只能用.def加入工程配置中。原始工程是VC6的。;warning LNK4017 : DESCRIPTION 语句不支持目标平台;已忽略现在用VS2019编译, 工具链降到VS2013都有这个警告。查了一下,大家都说注释掉DESCRIPTION那行就行。试了一下,确实可以。但是,为啥呢?难道新版VS的编译器已经不支持.def文件中的DESCRIPTION关键字了么?
2024-06-15 17:19:58
385
原创 vs - vs2015编译gtest-v1.12.1
前几天,有个同学私信我,问我在不在?你谁啊,我在不在关你啥事啊?我们认识么?我们熟么?凭啥理你啊?秒删。今天碰巧看到他在csdn上留的帖子,大概知道他要解决啥问题了。他遇到的问题是用VS2015编译gtest1.12.1编译不过。他提问题的方式有问题。只说不行(如果行你就不提问题了)。哪里不行啊?具体啥现象啊?你具体咋操作的, 引起的不行啊?就说不行,谁知道哪不行啊?这样的帖子,除了吃饱了撑的2B, 谁会去回帖?
2024-06-09 12:52:00
958
原创 vs2013 - 打包
为了避免UCRT安装的问题,将手头的VS2019工程降为了VS2013.现在到了打包的环节。查了一下,如何方便的打包VS2013的程序输出。
2024-06-08 14:52:09
755
原创 vs - vs2013中编译sqlite3.44.2
以前在vs2019下编译了sqlite3.44.2, 好使。做了笔记(sqlite3.44.2的编译现在准备将手头的vs2019工程改为vs2013的,自然要将sqlite也编译为vs2013版本的。按照原来的笔记编译,不好使。估计是TCL不是VS2013版本的。准备按照官方说明,用VS2013从头编译一次。官方的编译文档为 D:\3rd_prj\sqlite\doc\compile-for-windows.md. 是按照vs2022 + win11 来描述的。
2024-06-06 11:34:20
1000
原创 vs2019 - 去掉工程输出生成.ilk, .idb的方法
默认建立的VS工程的debug版,会生成.idb文件。不想要这种文件的输出,主要是看着难受.
2024-06-05 11:54:13
331
原创 vs - vs2013/vs2019工程文件的区别
为了避免安装UCRT的问题,想将手头的vs2019工程降级为vs2013工程。不想重新建立vs2013工程,太麻烦了, 烦人。想着能不能将vs2019的工程文件改一下,就能用vs2013打开直接编译呢?尝试一下。
2024-06-04 12:41:13
466
原创 vs - ms官方查看pdb文件内容的例子工程
不管哪个版本的VS,生成debug版工程时,除了工程自己的.pdb还会有vc*.pdb.因为这些vc*.pdb不是全局的pdb, 而是每个工程独有的。就想看看这些同名的.pdb内容有啥不同。先去找了一下,是否有公版的工具。最开始在github上看到了PDBExp,都是从titilima的工程来的,工程都编译不过。原因是PDL库版本的问题和WTL版本的问题,折腾了好久,始终编译不过。这些作者都没有将依赖的PDL库和WTL版本自包含在工程中,也就他们自己用的爽。
2024-06-03 17:09:11
600
原创 vs - 设置工程输出宏
可以将工程输出目录,工程临时目录,目标文件名都设置为VS的宏。然后将所有配置的这3项都设置成一样,那么不同配置的编译输出也不会重复,非常方便。这样规则下的工程输出文件名,也有利于在其他工程中包含,不会将版本弄错。
2024-06-01 18:44:33
420
原创 vs - 在win10中安装vs2013update5
用VS2019写的程序,在早期windows(e.g. win7, win8.1)上安装时,需要UCRT。UCRT是操作系统的一部分,如果不是最新的早期windows, 必须安装补丁。这让用户就很不爽了。软件说明书要在安装这块写很多关于各种早期windows安装时,如何安装补丁的说明。查了一下, UCRT是VS2015引入的。如果想避免UCRT安装的问题, 程序就只能用VS2013写。
2024-06-01 14:51:00
782
原创 gitea的git库备份与恢复
在本地搭建了gitea的git库.最开始用的gitea 1.16.8。本人比较手欠,看见新版本就想升级。换了几个高版本后,渐渐发现,在启动gitea服务时有以前不曾见过的错误提示(e.g. git库的健康检查错误之类的)。以前一直用旧版的时候,不曾发现报错问题。就怀疑是升级后,gitea新版对旧版格式不兼容引起的。因为我的git也换了好几次新版本。想对现有的本地gitea的git库目录进行备份与恢复,看看能不能解决启动gitea新版的报错问题。
2024-05-28 18:02:13
1283
原创 vs2019 - 打包(开发机win10x64 - 目标机win7x64 - debug版程序)
一般打包时,需要将工程输出都编译成release版。但是我想先试试debug版,做个debug版的安装包。安装到测试机上,如果有问题,可以看到debug版的断言。用vs2019setup工程默认打包后的安装包,因为只有自己应用相关的文件,到新的测试环境后,是无法正常运行的。e.g. 刚安装完的win7x64旗舰版。运行自己的应用,总会少vs2019自己的dll.这时,应该在setup工程中添加vs2019自己的组件,保证自己应用的vs2019环境是全的。重新打个包。
2024-05-24 15:39:59
1059
原创 vmware - 主机向虚拟机拷贝文件的临时方法
程序打包后,想在干净虚拟机环境中试试。vmware版本 - VMware® Workstation 17 Pro - 17.5.1 build-23298084虚拟机环境是刚安装完,还没激活的win7x64, win7x64旗舰版 - 6.1.7600主机是win10x64 - Microsoft Windows [版本 10.0.19045.3570]启动虚拟机后,看到vmware提示,要安装vmtools(安装了vmtools之后,就可以在主机和虚拟机之间用拷贝粘贴的方法复制文件).
2024-05-23 10:52:39
515
原创 vs2019 - 打包 - WARNING: File ‘‘ targeting ‘x64‘ is not compatible with the project‘s
尝试用VS2019自带的setup插件打包,有警告,如下------ 已启动全部重新生成: 项目: caseSetupPrj, 配置: Debug ------要打包的程序都是x64的。看提示,打包工程是x86的。试了一下,没看到怎么将打包工程改为x64.看了前排同学的笔记,没找到他们说的工程属性页在哪里啊…最后才明白,将VS2019右边的属性栏固定住,再点击打包工程的节点就看到了…
2024-05-23 09:55:41
335
原创 MemoryModule - 从内存载入的DLL句柄中得到对应的PE版本的类实现
在从内存载入的DLL内部,得到对应的PE版本信息的实现,和正常载入(隐式载入 pragma commnet(lib, 显载入式loadlibrary)有不同。主要就是内存载入的DLL基地址不在系统表内,要用MemoryModule的API和WIN32API组合才能得到PE版本信息。整理了一个类,可以很方便的干这个事。
2024-05-18 10:56:57
406
原创 MemoryModule - 应用编程细节
MemoryModule将DLL从内存载入,试过了好使。在内存载入的DLL中,对自身对应的载入前实体做完整性的hash校验。在内存载入的DLL中,取得资源信息(文件版本资源中的版本信息等,字符串资源)需求1,官方没提供内存载入之前的实体信息,这个要自己改,在CTX上加入载入前的信息(pData, lenData)需求2,官方演示了前半段,演示的不全。需要自己整理一下。
2024-05-15 16:00:38
481
原创 vs2019 - LoadLibrary失败时的排查方法
在做从内存载入DLL的实验,发现从内存载入DLL失败。昨天还是成功的。昨天将工程归档了,清掉了临时文件。应该是少了啥依赖的东西。用LoadLibrary显式载入,也失败。去查msdn, WIN32API失败后,可以调用GetLastError() + FormatMessage()来显示失败信息。这时显示的信息为确实为依赖的模块,具体哪个模块,还不清楚。最后,直接隐式调用DLL接口,如果是缺哪个依赖的模块,直接有messagebox提示,一目了然。
2024-05-12 10:17:07
490
原创 MemoryModule - exp - test
MemoryModule 是从内存载入DLL的一种实现。测试一下和隐式载入DLL/显式载入在效果上有哪些不同?是否可以在内存中载入执行正规DLL的接口?在内存载入正规DLL时,是否可以在DLL中执行正常的API?是否可以正常调用其他正规DLL的接口?
2024-05-10 19:20:55
918
原创 gtest的编译与使用
gTest是 googletest的缩写,如果直接找gTest项目,是找不到的。库地址 https://github.com/google/googletest.git迁出到本地后,切到最新发布版1.14.0。
2024-05-09 13:19:07
470
原创 gflag的编译和使用
glog的新版(>4.0)一定要包含gflag(因为要设置一些glog内部变量, 否则无法保存成日志文件), 否则不能正常使用。先将gflag编译出来。
2024-05-09 11:46:57
396
原创 vs2019 - 替换vs2019自带的cmake
在看一个开源工程,是用cmake构造的工程。想编译成vs的工程。但是cmake时,有版本要求。需要 cmake > 3.22用vs2019本地x64命令行启动的环境,看cmake的版本为3.20.这个cmake确定是vs自带的,因为我是用脚本启动的vs2019, 里面并没有cmake的环境变量。
2024-05-08 14:29:00
480
原创 python - rst file to html
开源工程中有一个.rst文件,是工程的说明。用记事本打开,能看,但是不好看。洁癖患者很难受。查了一下,.rst文件怎么看?好像都说要转成html来看。去找开源的工具,有rst 转 html的工程,都不好使,报错,估计是python版本的问题。资料上说VSCODE中有插件可以预览,安装了也不好使。再查资料,看到可以用python的库docutils将.rst转成htmlpython新手,咋弄?
2024-05-07 15:17:01
412
原创 小工具 - 用Astyle的DLL封装一个对目录进行代码格式化的工具
上一个实验(vs2019 - astyle-extension 扩展插件的编译与使用)用Astyle的vs插件,在VS中,已经可以很方便的对实现文件或者选定的代码进行格式化。正好想对自己手头要完工的工程进行入库前的全部格式化。如果在VS中,手工逐个对文件进行格式化,那就蠢的连自己都看不过去。以前做代码格式化,都是用AStyle.exe对单个文件做格式化。控制的粒度不够细,如果出了错误,也不知道啥错误。
2024-05-06 17:06:36
600
原创 string <=> wstring
当作\0结尾的可见字符串来转换 (可以自己封装A2W/W2A)当作不可见的数据buffer来转换(可以自己封装MultiByteToWideChar/WideCharToMultiByte)如果用(A2W/W2A), 在转换结束时,会损失数据。如果用(MultiByteToWideChar/WideCharToMultiByte), 在转换结束时,不会损失数据。
2024-05-06 14:34:22
320
原创 vs2019 - astyle-extension 扩展插件的编译与使用
查资料时,看到vs2019扩展中有个astyle-extension插件。以前都是用Astyle.exe配置进VS命令行来用。既然有插件,那肯定更方便了,想试试。在vs2019(v16.11.35)的插件市场中找了一下,居然没有。估计是旧版本的旧插件市场中才有。查资料,astyle-extension 是开源的(
2024-05-05 13:23:48
1073
原创 vs2019 - 用自定义对话框消息框替代MessageBox
当工程被逆向时,如果存在AfxMessageBox(), ::MessageBox()的调用,是一个明显的线索。想用自定义对话框消息替代MessageBox()的API.在codeproject上,看到前辈同学已经写好了一个实现(这个实现的功能对于我的应用来说,功能太多了。将这个实现加入现有工程时,要在工程RC中添加的东西有点多。做了一个剪裁版,插入一个新工程时,方便很多。
2024-05-04 10:10:18
698
原创 vs2019 - 移除PE字符串表中的RTTI字符串
用IDA打开PE, 看到字符串表中有类名的字符串。查了源码,是用类向导建立的一个类(基类为CDialogEx),类向导生成了RTTI相关的模板代码引起的。如果工程中不用RTTI的特性(e.g. IsKindOf(), RUNTIME_CLASS()), 可以将RTTI的模板代码清掉,使生成的PE字符串表中没有类名的字符串。RTTI特性不是必须的,自己用类的时候,自然知道是啥类,不是非要用RTTI特性。用RTTI只是为了更方便,但是对于程序加固是不好的。
2024-04-29 10:44:22
168
原创 openssl3.2 - exp - 使用默认的函数宏,在release版中也会引入__FILE__
在加固主程序。主程序已经确定是release版的了。用IDA打开,还是能看到很多相关的__FILE__的痕迹。查这些串的引用点。原来是openssl释放内存的函数要的参数。因为我写程序时为了方便,就编译了一个debug版的openssl3.2.查看openssl3.2的API定义。\ if(NULL!\ if(NULL!
2024-04-28 21:31:06
1361
原创 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
252
原创 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
514
原创 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
1092
原创 vs2019 - debug版/release版编译选项的区别
想看看debug/release版的编译选项到底有哪些区别,以便从一个已有配置为模板,建立一个新的编译输出的配置项。
2024-04-27 12:46:54
817
原创 openssl3.2 - exp - get openssl version info
查资料时,看到用API取旧版openssl取版本信息。去openssl工程中看了一下,有个内部测试程序有如何取openssl版本信息的API调用例子。整理一下。如果程序出了问题, 想确定一下openssl版本时,这个检测代码有用。
2024-04-27 12:02:13
510
原创 std::string的赋值
看网上的例子,给std::string赋值,大部分都是直接赋值, 当成一个字符串来用。如果赋值给std::string的是一段buffer(不可见字符),那网上的例子就不合适了。实验了一下,可以用append() + push_back()来赋值。都当成一个buffer来赋值,如果是\0结尾的字符串,那就再多push_back(‘\0’)就可以了。
2024-04-26 21:51:01
223
原创 openssl3.2 - exp - 用base64后的字符串作为配置项的值
今天解析自己封装的内存型的openssl 配置数据,发现openssl并不支持配置项的值为base64之后的直接字符串。
2024-04-16 23:37:06
1051
原创 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
479
原创 vs2019 - detected memory leak
用VS2019建立的控制台工程, 在调试模式下, 如果出了内存泄漏,是没有提示的。// 网上的大佬在2010年就给出了解决方法。
2024-04-13 19:09:12
1051
quicktimesdk 7.3.0.70 for windows
2015-05-18
pcasm-book-simplified-chinese.zip
2014-05-09
Advanced-Windows-Debugging-sources-awd.zip
2014-04-28
TrueCrypt 7.1a Source.zip
2013-11-01
filedisk-17-org.zip
2013-10-31
Sysinternals_Source.zip
2013-09-16
vs2010_Sample_C_plus_plus.zip
2013-08-08
DebugViewV4_81.zip
2013-03-13
srcSpyxx.zip
2012-09-30
ProcessExplorer
2011-11-05
cppunit-1.12.1.tar.gz
2011-08-30
STLport-5.2.1.tar.bz2
2011-08-20
工程目录结构模板设计_2011_0309_2054
2011-03-10
ResourceHack
2010-11-26
NTFS文件系统扇区存储探秘_电子书和随书光盘.7z
2019-03-18
Linux C程序设计王者归来_book_cd.7z.004
2018-08-22
Linux C程序设计王者归来_book_cd.7z.003
2018-08-22
Linux C程序设计王者归来_book_cd.7z.002
2018-08-21
Linux C程序设计王者归来_book_cd.7z.001
2018-08-21
eclipse-java-mars-2-win32-x86_64.zip
2017-04-21
International standard ISO/IEC C++98
2015-12-25
book code C语言名题精选百则
2015-12-16
depends22_x64.zip
2015-07-26
C++_Templates_The_Complete_Guide_book_code.zip
2015-06-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人