c - 直接以二进制执行计算机指令

标签 c assembly binary

<分区>

在 C 中。我需要一种在程序运行时直接执行计算机指令的方法。我知道如何以二进制形式制作计算机指令的唯一方法是通过十六进制编辑器,然后将文件作为应用程序运行。我将如何使用程序编写二进制文件,然后从他们那里执行它,而不必创建新的执行进程。看起来他们应该是一种简单的方法来做到这一点,但无论我在哪里看,我都找不到它。

我能想到的唯一其他方法是通过内联汇编,但在我当前的项目中这将是一个缺点,直接使用二进制执行是最好的方法。 (这可能需要 Windows 上的驱动程序吗?如何在 Linux 上做?换句话说,跨平台方法会很好)

谢谢。

最佳答案

你想做的事情有点问题,很容易让很多人问“你为什么要这样做?”

假设您有一个没有内存保护的操作系统(这种情况非常罕见),您可以将一个函数指向字节数组并调用该函数。这是它的要点:

unsigned char* code_to_execute = "\xB8\x13\x00\xCD\x10";
void (*runCode)();

runCode = code_to_execute;

runCode();

但是,做这样的事情时需要担心的事情太多了。您需要知道您的 C 编译器如何设置函数调用框架并在您的“二进制代码”中尊重它。以这种方式创建跨平台代码是不可能的。即使让它在单个平台上的多个 C 编译器中运行也很棘手。然后是内存保护。大多数现代操作系统根本不允许您随意将数据作为代码执行。您需要明确地将内存标记为可执行,许多操作系统不允许您在没有特殊许可的情况下这样做。也没有跨平台的方法来执行此操作。

再次强调,这真的不是一个好主意。您最好使用内联汇编语言。或者更好的是,根本不使用汇编语言。也许您可以多解释一下您的项目,以及为什么直接在您的 C 程序中编写“二进制代码”很重要。这将帮助我们制定对您有很大帮助的答案或建议。

关于c - 直接以二进制执行计算机指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761732/

相关文章:

c - 打开 MPI 以分发和操作 PGM 文件中的二维数组

c - NASM 汇编数理逻辑

java - 16 位二进制前导零

java - 线程中的异常 "AWT-EventQueue-0"java.lang.NumberFormatException : For input string: "11101110110100011110111011010001"

assembly - 如何使用 FASM 编译器以汇编语言生成随机数?

file - 如何在 Clojure 中将整个二进制文件(Nippy)读入字节数组?

c - 为什么#if 0 与#if (1 > 1)?

c - 为什么我们不能从 C 中的函数返回多个值?请问原因?

c - 复合语句( block )是否被 ANSI C 中的括号表达式包围?

c - 这两个函数序言指令序列有什么区别?