【发布时间】:2011-06-04 15:27:14
【问题描述】:
这里有点奇怪的问题。
假设我有一个 C++ 代码,在特定平台上运行。这段代码的唯一目的是运行包含二进制、本机到该平台的文件。
现在 - 我的问题是 - 我如何将这些文件中的数据(甚至可以按位,例如一个周期 1024 位)获取到运行我的代码的机器的内存中,以便这些数据在执行部分中?
换句话说,我可以把数据放到可以指向指令指针的地方吗?
如果是,怎么做?
我不介意我是否必须为此使用汇编程序 - 只是这样它才能工作。
编辑:抱歉,我不够具体。
基本上 - 我要加载的文件数据不是 .exe、Mach-O 可执行文件或 ELF 等格式。它只是原始二进制数据(我的代码删除了一些 custom 标头)。此二进制数据是机器代码,特定于当前机器上运行的处理器。
从技术上讲,这意味着我想绕过普通的操作系统执行程序并直接加载二进制文件。我可以解释它,但充其量只会慢 3 倍左右。
如果我需要在另一个子进程中运行数据,我一点也不介意 - 但是我不能使用正常的进程打开器,因为数据不是操作系统可以自动运行的任何格式(再次 - 像.exe、Mach-O、ELF)。
【问题讨论】:
-
如果运行是指执行另一个二进制文件,
fork()和system()有什么问题? -
你没有说你的目标,这非常依赖目标。
-
在没有语言或平台的情况下,您在哪里获得二进制块来执行?
-
我说它是一个“二进制块”,是所述机器/处理器/架构的原生。就像你在没有链接的情况下编译一样。
标签: c++ dynamic binary assembly