exe中嵌入dll和exe中释放dll

BinRes.h

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#ifndef _waxie_binary_resource_h_

#define _waxie_binary_resource_h_

#include <string>

class
BinRes 

{

public:

    BinRes();

    virtual
~BinRes();

public:

    static
void ExtractBinResource( std::string strCustomResName, int
nResourceId, std::string strOutputName);

private:

    static
std::string getAppLocation();

};

#endif

  BinRes.cpp

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

#include "stdafx.h"

#include "testHarness.h"

#include "BinRes.h"

#include <string>

#include <fstream>

#include <iostream>

#ifdef _DEBUG

#undef THIS_FILE

static
char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

BinRes::BinRes()

{

}

BinRes::~BinRes()

{

}

void
BinRes::ExtractBinResource( std::string strCustomResName, int
nResourceId, std::string strOutputName )

{

    HGLOBAL
hResourceLoaded;        // handle to loaded resource

    HRSRC
hRes;                     // handle/ptr. to res. info.

    char
*lpResLock;                // pointer to resource data

    DWORD
dwSizeRes;

    std::string strOutputLocation;

    std::string strAppLocation;

    // lets get the app location

    strAppLocation = getAppLocation();

    strOutputLocation = strAppLocation += "\\";

    strOutputLocation += strOutputName;

    

    // find location of the resource and get handle to it

    hRes = FindResource( NULL, MAKEINTRESOURCE(nResourceId), strCustomResName.c_str() );

    

    // loads the specified resource into global memory.

    hResourceLoaded = LoadResource( NULL, hRes );

    // get a pointer to the loaded resource!

    lpResLock = (char*)LockResource( hResourceLoaded );

    // determine the size of the resource, so we know how much to write out to file! 

    dwSizeRes = SizeofResource( NULL, hRes );

    std::ofstream outputFile(strOutputLocation.c_str(), std::ios::binary);

    outputFile.write((const
char*)lpResLock, dwSizeRes);

    outputFile.close();

}

// retrieves the full path and file name for our executable file

std::string BinRes::getAppLocation()

{

    TCHAR
szPathName[128];

    std::string strPath;

    GetModuleFileName(NULL, szPathName, 128);

    strPath = szPathName;

    

    int
slashPos = strPath.rfind(‘\\‘);

    if(slashPos == strPath.npos)

        throw
"Unable to get exe location";

    strPath = strPath.substr(0, slashPos);

    

    return
strPath;

}

  

关键操作步骤:

在资源视图-》右键import-》文件类型选择所有类型-》找到对应的dll文件,编译,dll就在exe中了。

在保存的时候,提示资源类型,就写个BIN就可以(其实随意写就好),但是这个名称在释放的时候有用啊。

释放dll的方法是:

BinRes::ExtractBinResource( "BIN", 132, "debugViewer123.exe" )

注释:

1> "BIN"          就是import保存的 时候写的资源类型。

2> 132          是资源ID。

3> "debugViewer123.exe"  是导出的dll文件名称。

时间: 2024-10-16 07:10:48

exe中嵌入dll和exe中释放dll的相关文章

在delphi的exe文件中嵌入另外一个exe文件

http://www.cnblogs.com/dabiao/archive/2009/11/28/delphi.html 1.创建rc文件.可以用任意文本编辑器来写.文件格式为:"资源名 资源类型 文件名". 对于资源类型,如果是exe文件,应该是EXEFILE,如果是二进制文件,则是RCDATA. 这里创建一个文件float.rc: AEXE EXEFILE "E:\Software\float.exe" 2.将这个rc文件转换成res文件. 复制float.rc

把任意的EXE嵌入到自己程序中

把任意的EXE嵌入到自己程序中 taoyuan19822008-08-24上传 Delphi把任意的EXE嵌入到自己程序中的程序 资源积分:0分 下载次数:327 资源类型:其他 资源大小:175KB 资源得分: (42位用户参与评分) 把任意的EXE嵌入到自己程序中 进入下载页 收藏(1) 评论(14) 举报 VIP下载  免积分60元/年(1200次) 相关推荐 把任意的EXE嵌入到自己程序中 把任意的EXE嵌入到自己程序中 您可能还需要 Web程序设计 ...简单的C#宿...matlab

Qt界面中嵌入其他exe程序的界面,使用Qt5

下面用一个小例子来演示如何在Qt的界面中嵌入其他exe程序的界面,最终效果如下图所示.本文参考了 http://blog.csdn.net/jiaoyaziyang/article/details/49802993,感谢原作者. 下面是具体的实现方法,用Windows自带的计算器程序做例子.主要的思路就是获取到计算器程序的窗口类名称,然后在Qt中利用QWindow的静态函数fromWinId,创建出QWindow对象,然后将这个对象放到一个QWidget中. 首先是获取计算器程序的窗口类名称,主

向自己的模块添加错误代码_使用vc自带的工具MC创建资源并将其添加至DLL或EXE中

本文主要介绍怎么使用Visual Studio自带的MC.exe工具来创建一个消息资源并将其添加到自己的DLL(或.exe)中,从而达到为自己的模块添加错误代码的目的. 一.MC工具介绍 Message Compiler(MC) 是用来创建消息资源的工具,这些消息资源被DLL(或EXE)模块引用.MC的输入是一个特定格式的文本文件,即*.mc文件,这种特定格式使得在一个文件中定义多种语言支持变得非常容易. 当编写完成一个*.mc文件之后,为了在程序中使用这个文件,你需要一些操作.首先,使用MC工

技术分享:如何在PowerShell脚本中嵌入EXE文件

我在尝试解决一个问题,即在客户端攻击中只使用纯 PowerShell 脚本作为攻击负荷.使用 PowerShell 运行恶意代码具有很多优点,包括: 1.无需在目标上安装其他任何东西. 2.强大的引擎(例如可以直接调用 .NET 代码). 3.可以使用 base64 编码命令来混淆恶意命令,使恶意命令变的不容易被发现.这同样也是一种可以避免使用特殊字符的方法,尤其是在一个涉及多个步骤需要分离不同攻击负荷的高级攻击中. 4.可以使用Invoke-Expression将字符串解释为 Powershe

Error-ONS-ASP.NET-ISS:0x000007FEFD04BE0D (KernelBase.dll) (w3wp.exe 中)处有未经处理的异常: 0xE0434352

ylbtech-Error-ONS-ASP.NET-ISS:0x000007FEFD04BE0D (KernelBase.dll) (w3wp.exe 中)处有未经处理的异常: 0xE0434352 (参数: 0xFFFFFFFF80131604, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x000007FEEAE60000). 出现了  1.返回顶部 1. 0x000007FEFD04BE0D (KernelBas

任务管理器进程中多个chrome.exe的问题

偶然发现任务管理器进程中有多个chrome.exe进程,非常奇怪自己仅仅打开了一次浏览器,为什么会有多个?! 上网一查才发现:原来使用Google浏览器Google Chrome每开一个新标签页面,都会在系统进程里增加一个Chrome.exe进程. Chrome开源计划的当中一个特点,就是"沙箱"模式,是这种,一个拓展占用一个进程,一个标签占用一个进程,这就是防止一个当中一个页面或者拓展崩溃后,造成整个浏览器崩溃的问题.总的来说,这是一个非常创新的技术.IE浏览器,尽管集成的仅仅有一个

window下批处理操作:bat文件中调用.bat和.exe文件

文件名test.bat rem 启动GTRManager.exe start cmd /k "D:\GTRManager_old\GTRECM\GTRManager.exe" ping 127.0.0.1 -n 10  rem 启动start.bat D: cd D:\v2r3c06spc100_spe_hutaf\HutafAgent start cmd /k "" call start.bat ping 127.0.0.1 -n 10  rem 启动agentW

无法从程序集“c:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Web.dll”中嵌入互操作类型

错误 1 无法从程序集“c:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Web.dll”中嵌入互操作类型,因为该程序集缺少“GuidAttribute”特性 c:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Web.dll AutoInternetDownloadTool 打开引用->找到指定的XXX.dll->右击属性->嵌入互操作类型->false