当前位置: 首页 > 面试题库 >

在运行时将代码注入可执行文件

桑坚成
2023-03-14
问题内容

我正在开发应用程序(用C
++编写),该应用程序在运行时会生成一些机器代码(现在是Linux,x86-64,但我计划在ARM上迁移)。接下来,它将生成的代码存储在内存中,并通过跳转到内存位置来执行它。长期以来,我在分配可执行内存方面遇到问题,但最终我使用以下方法解决了问题:

uint8_t *memory = mmap (NULL, length, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);

到目前为止,它是可行的,但是我不确定这是否是执行此类操作的优雅方法。我想知道可执行加载程序是如何做到的?


问题答案:

从本质上讲,这就是可执行加载程序的工作方式。在他们的情况下,他们执行mmap文件的操作,而不是匿名映射,但除此之外,它本质上是相同的。

请注意,最好不要同时拥有写入和执行访问权限,因为这会使某些类型的安全利用变得更加容易。您可以mprotect在初始映射后使用来调整保护标志。



 类似资料:
  • 终端中使用lldb运行可执行文件 进入lldb环境, 在终端内输入lldb回车 lldb 使用file命令, 将可执行文件包装成一个target (lldb) file test Current executable set to '/Users/shenyj/Documents/CodeForTest/staticOCLib/test' (x86_64). 运行可执行文件, 在刚刚的l

  • 我有一个问题与注入Bean到类。 这是我的资源课 这是我的TestRunnable类: 当我尝试连接到endpoint时,会出现以下错误? 我确信问题在于错误地注入了我的ServiceBean。。。

  • 所以一切都很好,就像2到3周前一样,突然我所有的jar文件都无法通过双击打开 我检查了我的注册表,但一切正常,关联的. jar应用程序可以使用javaw运行,但我仍然无法双击运行可执行的. jar文件 我可以用javaw -jar文件名在cmd中运行它们.jar但它不适用于我的世界,我不能用那个cmd运行我的世界,我想让它,所以每个可执行文件.jar文件都可以打开双击 我的 java 命令在 cm

  • 我正在尝试并行运行两个exe程序。我想启动它们,等待它们完成后再继续。以下是一个例子: 第一个进程睡眠5秒,第二个进程睡眠10秒。我希望看到进程启动的两条消息和“等待任务”消息。10秒后,请参见“过程完成”。但是,我立即看到“Procs complete”。 任务管理器显示正在运行的进程,同时显示“进程完成”。 那么,我如何从一个程序中启动两个独立的可执行程序,并行运行它们,然后等待它们完成,然后

  • 问题内容: 我在将当前项目提取到可执行jar文件时遇到问题。当我在日食中按下运行按钮时,一切正常,但是当我这样做时 然后启动.jar文件;我唯一得到的是带有灰色画布的窗口。它应该启动我编写的游戏(spaceInvaders)。 这是我上载项目的github的链接。我真的不知道错误在哪里,在哪里看。在我的代码中?在我安装的JRE / JDK中?创建罐子时我做错什么了吗? 请帮忙 -。- 问题答案:

  • 我已经通过libav-tools对安装了ffmpeg的应用程序进行了dockerize。该应用程序启动时没有问题,但是当Fluent-ffmpeg npm模块试图执行ffmpeg命令时出现了问题,但没有找到。当我想检查ffmpeg的版本和图像中设置的linux发行版时,我使用了命令,但它给出了以下错误: 然后我意识到,我尝试在图像或容器中运行的所有命令都会出现同样的错误。 这是我的Dockerfi