c - 读/写自堆

标签 c pointers metaprogramming heap-memory self-modifying

是否可以读取自己的堆空间?软件可以在内存中 self 修改吗?

我写了一些代码来展示主题,

我是在内存中读取自己的代码吗? 如何(如果可能)编写它并在运行时更改指令?

#include<stdio.h>
#include<stdint.h>

volatile int addressBase;
uint8_t read(int address);


int main(void) {

    printf("Helium word");

    addressBase=(int)&main;        
    printf("[%X]", read( 0 ));         
    getchar();

    return 0;
}


uint8_t read(int address)
{

       const uint8_t *addr;                        
       addr=(const unsigned char *)(addressBase+(int)address);
       return (*addr);
}

最佳答案

您可以自行承担读写堆空间的风险。

在小型嵌入式系统等受限制的小型环境中,自修改代码可能是一个有用的技巧。然而,现代台式机或服务器 CPU 根本不喜欢自修改代码,因为它会破坏指令缓存、预取和流水线。一件轶事:TI-Scheme 在 386 CPU 上运行速度极快。它使用了自修改代码。 486 CPU 引入了指令缓存,TI-Scheme 崩溃了。

关于c - 读/写自堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3448901/

相关文章:

c - 使用 memcmp 与。 == in c (embedded) 和意外错误

c++ - 模板模板时强制特定重载

c - 正确使用memcpy

c++ - 使用绝对指针地址作为模板参数

c - C指针的问题

c++ - 为什么这个函数会出现段错误?

c++ - 为什么允许嵌套类模板的部分特化,而不允许完全特化?

ruby - ruby 中的 "Here methods"?

c - 指数泰勒级数

c - 在什么版本的 C 中,括号内的 block 用于返回有效值?