首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在malloc内存中的C函数代码

在malloc内存中的C函数代码
EN

Stack Overflow用户
提问于 2017-05-05 01:44:31
回答 1查看 398关注 0票数 1

有没有一种方法可以实现malloc内存空间,然后在C空间中复制函数代码?

这个问题在实践中可能没有意义。出于好奇,我提出这个问题,以便更好地了解c及其底层实现的工作原理。

如果可以将代码复制到堆中,下面是后续问题:

  1. 复制时如何确定函数二进制代码的大小?
  2. 我们可以使用函数指针来执行代码吗?(代码放在malloc'd内存中,出于安全原因,这部分内存可能被标记为不可执行,但我不确定)
EN

回答 1

Stack Overflow用户

发布于 2017-05-05 02:07:28

这在大多数机器上都是可能的,但您所使用的技术是特定于系统的--没有标准的C或C++方法。

即使计算出函数的长度,以便您可以复制它,也是很困难的。我认为如果函数位于同一个转换单元中,您就无法可靠地完成这一任务,因为编译器可能已经完成了您看不到的优化魔术。但是,如果函数位于不同的文件中,那么它的接口可能会更可靠(尽管可能会有链接器的魔力,您必须理解和模仿才能完成您的目标)。

其他问题(在某些系统上)是,malloc的内存可能无法执行。(这通常是通过防止执行放置在溢出缓冲区中的代码来提高安全性的情况。)但是,具有可执行文件保护的系统通常有一个备用内存分配函数,它可以为您提供一块内存,可以在其中放置可执行代码,并将执行传递到其中。为了实现共享库,需要对此特性进行一些修改。

最后,尽管自修改代码可能是人们在考虑您的问题时可能首先想到的事情,但是合理、合法地使用相关技术可能会出现在本机代码中,即即时编译系统中。

您可以通过指定要这样做的特定操作系统和CPU来获得更好的答案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43795213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档