如何将外部文件/程序加载到内存中然后执行它(C++ 和 Unix)?

发布于 2024-12-27 11:16:15 字数 487 浏览 2 评论 0原文

假设我有一个名为“execfile”的可执行文件。我想使用 C++ 程序(在 Unix 上)读取该文件,然后从内存中执行它。我知道这在 Windows 上是可能的,但我无法找到 Unix 的解决方案。

在伪代码中,它会是这样的:

declare buffer (char *)
readfile "execfile" in buffer
execute buffer

只是为了说清楚:显然我可以使用 system("execfile") 执行该文件,但是,正如我所说,这不是我想要的打算做。

谢谢。

编辑1:为了使它更清楚(以及我不能使用 dlopen 的原因):我需要此功能的原因是因为可执行文件将动态生成,所以我不能只需在一个库中一次性构建所有这些即可。更准确地说,我正在构建一个工具,该工具首先用密钥加密可执行文件,然后它将能够执行该加密文件,首先解密它,然后执行它(我不想有一个副本文件系统上解密文件的名称)。

Let's say I have an executable file called "execfile". I want to read that file using a C++ program (on Unix) and then execute it from memory. I know this is possible on Windows but I was not able to find a solution for Unix.

In pseudo-code it would be something like this:

declare buffer (char *)
readfile "execfile" in buffer
execute buffer

Just to make it clear: obviously I could just execute the file using system("execfile"), but, as I said, this is not what I intend to do.

Thank you.

EDIT 1: To make it even more clear (and the reason why I can't use dlopen): the reason I need this functionality is because the executable files are going to be generated dynamically and so I cannot just build all of them at once in a single library. To be more precise I'm building a tool that will first encrypt an executable file with a key and then it will be able to execute that encrypted file, first decrypting it and then executing it (and I don't want to have a copy of the decrypted file on the file system).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

晨敛清荷 2025-01-03 11:16:15

如果不编写堆积如山的代码,您就无法做到这一点。在 Linux 上,加载和链接 a.out 是内核设施,而不是用户模式设施。

您最好创建一个共享库并使用 dlopen 加载它。

You cannot without writing a mountain of code. Loading and linking an a.out is a kernel facility, not a user mode facility, on linux.

You'd be better off making a shared library and loading it with dlopen.

别再吹冷风 2025-01-03 11:16:15

加载并运行的解决方案(不一定在 C++ 中)是使用 dlopen+dlsym 加载动态库并获取指向库中定义的函数的指针。

有关使用 C++ 解决问题的说明,请参阅 C++ dlopen mini HOWTO动态库中的符号。

The solution to load-and-run -- not necessarily in C++ -- is to use dlopen+dlsym to load dynamic library and obtain a pointer to function defined in the library.

See C++ dlopen mini HOWTO for description of solving problems with C++ symbols in dynamic libraries.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文