我想隐藏我的exe文件,它是VB代码,所以我想我可以但它在vc ++代码中然后我可以从VC ++代码中调用它,如run(myfile.exe)或execute(myfile.exe) 。 但我不知道如何在VC ++中添加它!
答案 0 :(得分:3)
您可以使用[MS.Docs]: Introduction to Resources。
您需要处理两个阶段:
这是我测试的原型(并且它可以工作)。您需要在 VStudio 10.0(2010)项目中包含3个文件:
res.h - 只是一个包含其他文件的常量定义的文件。将其包含在标题文件
下#define EXE_NAME "resource.exe"
#define RES_TYPE_UNQUOTED RAW
#define RES_NAME_UNQUOTED EXECUTABLE
exe.rc - 这是资源文件(尽可能简化)。将其包含在资源文件下。 注意:尝试从 VStudio 编辑它将失败,因为资源编辑器希望文件包含一些废话(默认情况下由 VStudio 插入)。
#include "res.h"
RES_NAME_UNQUOTED RES_TYPE_UNQUOTED EXE_NAME
main.c - 主要代码文件。将其包含在源文件下。它从自身加载资源,将其保存到文件中,然后尝试执行该文件。我使用注释代码进行调试,不再需要了,但我还是把它留在了那里。 注意这只是一个例子,代码可以写得更好(例如错误处理,资源组织......),我专注于有一些工作。
#include <stdio.h>
#include <Windows.h>
#include "res.h"
#define _QUOTE(X) #X
#define QUOTE(X) _QUOTE(X)
#define RES_TYPE QUOTE(RES_TYPE_UNQUOTED)
#define RES_NAME QUOTE(RES_NAME_UNQUOTED)
/*
#define NULL_STR "null"
BOOL CALLBACK EnumResNameProc(_In_opt_ HMODULE hModule, _In_ LPCTSTR lpszType, _In_ LPTSTR lpszName, _In_ LONG_PTR lParam) {
if (IS_INTRESOURCE(lpszName))
printf(" ResourceName(int): [%d]\n", lpszName);
else {
printf(" ResourceName(str): [%s]\n", lpszName ? lpszName : NULL_STR);
printf(" Resource addr: %08X\n", (long)FindResource(NULL, lpszName, lpszType));
}
return TRUE;
}
BOOL CALLBACK EnumResTypeProc(_In_opt_ HMODULE hModule, _In_ LPTSTR lpszType, _In_ LONG_PTR lParam) {
if (IS_INTRESOURCE(lpszType))
printf(" ResourceType(int): [%d]\n", lpszType);
else
printf(" ResourceType(str): [%s]\n", lpszType ? lpszType : NULL_STR);
EnumResourceNames(NULL, lpszType, EnumResNameProc, lParam);
return TRUE;
}
//*/
int main() {
HANDLE fp = NULL;
HRSRC res = NULL;
HGLOBAL global = NULL;
char *buf = NULL;
DWORD size = 0, written = 0;
int ret = -1;
/*
EnumResourceTypes(NULL, EnumResTypeProc, NULL);
printf("[%s][%s]\n", RES_NAME, RES_TYPE);
//*/
if ((res = FindResource(NULL, RES_NAME, RES_TYPE)) == NULL) {
printf("FindResource error: %d\n", GetLastError());
return 1;
}
if ((global = LoadResource(NULL, res)) == NULL) {
printf("LoadResource error: %d\n", GetLastError());
return 2;
}
if ((size = SizeofResource(NULL, res)) == 0) {
printf("SizeofResource error: %d\n", GetLastError());
return 3;
}
if ((buf = (char*)LockResource(global)) == NULL) {
printf("LockResource error: %d\n", GetLastError());
return 4;
}
if ((fp = CreateFile(EXE_NAME, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL , NULL)) == INVALID_HANDLE_VALUE) {
printf("CreateFile error: %d\n", GetLastError());
return 5;
}
if (WriteFile(fp, buf, size, NULL, NULL) == FALSE) {
printf("WriteFile error: %d\n", GetLastError());
CloseHandle(fp);
return 5;
}
CloseHandle(fp);
ret = system(EXE_NAME);
printf("system returned %d\n", ret);
return 0;
}