MFC将二进制文件导入资源后释放
2023-09-14 08:57:09 时间
1、前言
前一篇笔记记录了怎么修改PE,此篇记录下如何利用自身的资源文件。
2、编程思路
获得资源句柄 - 获得资源文件大小 - 加载资源文件 - 锁定资源并获得其指针。
3、实践代码
1)编译以下代码将EXE作为资源导入到MFC的资源。
- 服务端
声明三个已经初始化值的变量
// URL配置器.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdafx.h"
int main(int argc, char* argv[])
{
TCHAR szIpAddress[] = L"AAAAAAAAAAAAAAAAAAAAAAAAAAAA"; // IP地址
TCHAR szPort[] = L"BBBBBBBBBBBBBBBBBBBBBBBBBBBB"; // 端口号
TCHAR szOtherInfo[] = L"CCCCCCCCCCCCCCCCCCCCCCCCCCCC"; // 其他信息
printf("IP:%ls\nPort:%ls\nOther Information:%ls\n", szIpAddress, szPort, szOtherInfo); // 打印信息
getchar();
return 0;
}
2)来到代码编辑区,我们在需要使用这个exe文件的时候,从资源里拿出这段二进制代码,写入内存或一个磁盘文件就行了。首先定位我们的资源文件,其中IDR_RCEXE即为资源文件的ID:
HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCEA(IDR_EXE1), TEXT("EXE"));
3)获得资源文件大小,这个大小之后我们如果要提取出来会用到的:
DWORD dwSize = SizeofResource(NULL, hRsrc);
4)加载资源,使用之前获得的资源文件句柄hRsrc:
HGLOBAL hGlobal = LoadResource(NULL, hRsrc);
5)在内存中锁定资源,其返回值即为一个指向资源第一个字节的指针:
LPVOID pBuffer = LockResource(hGlobal);
6)部分代码
void CMFC配置端Dlg::OnBnChangeResource()
{
// TODO: 在此添加控件通知处理程序代码
TCHAR chPath[MAX_PATH]; // 配置文件路径
HANDLE hFile; //释放资源到某个文件中
BOOL bRet = false; // 打开状态标志
// 获得资源句柄
HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(IDR_EXE1), TEXT("EXE"));
// 获得资源文件大小
DWORD dwSize = SizeofResource(NULL, hRsrc);
// 加载资源文件
HGLOBAL hGlobal = LoadResource(NULL, hRsrc);
// 锁定资源并获得指针
LPVOID pBuffer = LockResource(hGlobal);
// 获得要保存的PE文件路径
CFileDialog dlg_NewSavePath(TRUE, _T("exe"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("可执行文件|*.exe||"), this);
dlg_NewSavePath.m_ofn.lpstrTitle = L"保存的路径.exe";
if (dlg_NewSavePath.DoModal() == IDOK)
{
CString szPE_Path;
szPE_Path = dlg_NewSavePath.GetPathName();
wmemset(chPath, 0, szPE_Path.GetLength() + 1);
wmemcpy(chPath, szPE_Path, szPE_Path.GetLength() + 1);
}
else
{
return;
}
// 新建文件
hFile = CreateFile(chPath, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
// 写入文件
bRet = WriteFile(hFile, pBuffer, dwSize, &dwSize, NULL);
if (bRet == 0)
{
return;
}
// 关闭句柄
CloseHandle(hFile);
}
4、效果
5、参考
将二进制文件加入VC资源后释放执行
相关文章
- mysql 导入&导出sql文件
- Solidworks如何导入和使用模板文件
- 重命名和重定向RF执行生成的output文件
- Linux 批量查找并替换文件夹下所有文件的内容
- vue.js3: 用pdf-lib给pdf文件添加中文字体水印(pdf-lib@1.17.1 / vue@3.2.37)
- python导入csv文件出现SyntaxError问题分析
- 解决chrome安装扩展插件导入.crx文件提示:程序包无效的错误
- Linux---文件特殊权限
- 配置和修改springboot默认国际化文件
- SAP WebIDE里UI5应用的隐藏文件project.json
- SAP CRM content management中文件下载的调试
- [转]MySQL导入.sql文件及常用命令
- Atitit 索引法 html文件转txt纯文本索引 适用于 evernote索引,导入imap邮箱,方便检索 /sumdoclist/src/aPkg/html2txtIndexFile.jav
- piap.excel 微软 时间戳转换mssql sql server文件时间戳转换unix 导入mysql
- springboot 文件上传工具类(校验)【魔数值】
- Angular 项目中导入 styles 文件到 Component 中的一些技巧
- 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入
- 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入
- 用DeBug的方式,带你掌握HBase文件在Snapshot的各种变化
- 【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑦ ( 自定义 Gradle 插件导入方式 | buildSrc 插件导入 | 构建脚本中自定义插件 | 独立文件 )
- iOS发展- 文件共享(使用iTunes导入文件, 并显示现有文件)
- Python获取指定路径下所有文件的绝对路径
- js读取本地txt文件中的json数据
- navicat如何导入sql文件
- tsc : 无法加载文件 C:UsersLiushAppDataRoamingnpmtsc.ps1,因为在此系统上禁止运行脚本。
- Python3 文件操作