通过c/c++中的内存地址控制程序流
Controlling program flow through memory addressees in c / c++
很抱歉,如果标题有点晦涩,我不是母语人士,在表达我的想法时遇到了一些困难。。。
假设我拥有要在内存中编译和创建的过程集合所需的所有函数和对象,并且我知道它们的地址和大小,我如何用一个伪"二进制"文件来控制程序的流程,这个文件基本上是一个脚本,上面写着"将这些数据推送到这个函数的地址,调用这个函数地址,将返回的值推到这个函数地址"等等…
基本上,我需要处理伪"机器"代码,通过它们的内存地址来访问和动态控制互连对象和静态逻辑的集合。
谢谢!
编辑:请在结束我的问题之前发布一些代码片段,作为一个没有真正提供我需要的具体信息的问题的副本。
编辑2:从下面的评论中添加了这一点,可能会给我的问题带来更多的澄清:
我尝试使用预编译的程序,而不是编译整个程序组件,以便在移动中创建动态对象。对象的树可以序列化到磁盘并在瞬间重新创建(分配池中的整个树,而不是逐个对象),所以我有一种方法来创建动态程序,将其保存到磁盘并在内存中重建所有的设计时标识符用它们的地址替换。现在我所需要的只是一种使整个程序结构运行的方法。
听起来您需要为要解释其语言的机器编写一个模拟器。这里有一个链接解释了如何做到这一点。
这基本上就是Java虚拟机所做的,我相信这就是其他人所说的机器。它是一个解释器,这可能是您需要构建的。
假设我理解你说的话——答案是否定的,不是那样的。你必须做一些事情来创建程序状态和控制逻辑流,这就是解释器和"机器"所做的
您将需要一个前端来读取您的代码文件,该文件告诉程序如何运行。您的前端读取"逻辑文件",然后运行您的前端刚刚学会调用每个对象的逻辑。你可以通过链接做同样事情的智能插件来创建它,比如从你的对象构建一个程序状态。但是你需要一堆不同的插件,每个实例一个。
在任何情况下,都无法链接对象,然后期望它们知道谁按什么顺序运行,谁不运行。你必须以某种方式将文件的"智慧"转化为行动。单独链接是不行的,因为你希望智能在对象库的外部。
- 将数组的地址分配给变量并删除
- 空基优化子对象的地址
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 如何在c++程序中找到函数的地址
- 控制允许动态运行c++的并发操作数
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 从控制台中删除最后打印的元素
- 被解释为低级别const的const对象的地址
- 将地址分配给本地指针后,公共对象的变量将消失
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 是否可以使用if constexpr删除控制流语句
- 内联程序集printf将整数解释为地址
- 为什么指针不写入类的地址?
- 如何在C++中获取该对象的类声明中对象的地址?
- 通过按地址访问变量
- 无法在windows控制台中为C++程序提供必要的输入
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 函数名是c中该函数的第一条指令的地址吗
- 将字符串 IP 转换为 IP 地址控制