通过c/c++中的内存地址控制程序流

Controlling program flow through memory addressees in c / c++

本文关键字:地址 控制 程序 内存 c++ 通过      更新时间:2023-10-16

很抱歉,如果标题有点晦涩,我不是母语人士,在表达我的想法时遇到了一些困难。。。

假设我拥有要在内存中编译和创建的过程集合所需的所有函数和对象,并且我知道它们的地址和大小,我如何用一个伪"二进制"文件来控制程序的流程,这个文件基本上是一个脚本,上面写着"将这些数据推送到这个函数的地址,调用这个函数地址,将返回的值推到这个函数地址"等等…

基本上,我需要处理伪"机器"代码,通过它们的内存地址来访问和动态控制互连对象和静态逻辑的集合。

谢谢!

编辑:请在结束我的问题之前发布一些代码片段,作为一个没有真正提供我需要的具体信息的问题的副本。

编辑2:从下面的评论中添加了这一点,可能会给我的问题带来更多的澄清:

我尝试使用预编译的程序,而不是编译整个程序组件,以便在移动中创建动态对象。对象的树可以序列化到磁盘并在瞬间重新创建(分配池中的整个树,而不是逐个对象),所以我有一种方法来创建动态程序,将其保存到磁盘并在内存中重建所有的设计时标识符用它们的地址替换。现在我所需要的只是一种使整个程序结构运行的方法。

听起来您需要为要解释其语言的机器编写一个模拟器。这里有一个链接解释了如何做到这一点。

这基本上就是Java虚拟机所做的,我相信这就是其他人所说的机器。它是一个解释器,这可能是您需要构建的。

假设我理解你说的话——答案是否定的,不是那样的。你必须做一些事情来创建程序状态和控制逻辑流,这就是解释器和"机器"所做的

您将需要一个前端来读取您的代码文件,该文件告诉程序如何运行。您的前端读取"逻辑文件",然后运行您的前端刚刚学会调用每个对象的逻辑。你可以通过链接做同样事情的智能插件来创建它,比如从你的对象构建一个程序状态。但是你需要一堆不同的插件,每个实例一个。

在任何情况下,都无法链接对象,然后期望它们知道谁按什么顺序运行,谁不运行。你必须以某种方式将文件的"智慧"转化为行动。单独链接是不行的,因为你希望智能在对象库的外部。