【问题标题】:C++ dynamic code injection on an embedded system嵌入式系统上的 C++ 动态代码注入
【发布时间】:2014-01-28 01:00:24
【问题描述】:

我正在寻找以下问题的解决方案:

  • 开发了一个在嵌入式设备上运行的 C++ 软件模块(不可能使用基于文件的函数“dlopen”来加载共享库),当模块运行时,它应该可以通过动态程序代码进行扩展
  • 动态代码在 PC 系统上编写(实现接口功能)和交叉编译 (gcc),然后通过总线系统发送到前面描述的在嵌入式设备上运行的软件模块
  • 嵌入式设备上的软件模块应将接收到的动态程序代码保存在内存中,并应能够调用其中的函数

我该如何解决这个问题?

我的第一种方法如下:

  • 将动态代码交叉编译链接为PC端的共享库(ELF文件)
  • (传输后)ELF 文件在内存中的嵌入式设备上可用
  • ELF 文件的重定位 -> 在这里我目前完全不知道如何做到这一点!是否有免费的库可以执行此类任务?

不知道我的ELF文件方法能不能用?如果是这样,我应该如何执行图书馆搬迁?

有没有更好/不同的方法来解决我的问题?

【问题讨论】:

  • 我不知道您正在开发哪种嵌入式设备,但您可能必须手动解析 ELF 表并自己调整内存布局,即完成加载程序的工作。
  • 您需要运行支持在嵌入式设备上加载动态链接库的操作系统。否则,我看不到实现您想要实现的目标的简单方法。
  • 这真的是C++C 的问题吗?我认为这种类型的问题可能发生在任何编译语言中。如果是这样,请更改标签。
  • @Walter 计划在 C++ 中开发(可能在 C 中)——这就是为什么这两种编程语言被标记的原因,因此我对该编程上下文中的解决方案特别感兴趣语言
  • 什么样的嵌入式设备?你可以只运行 Linux 吗?

标签: c++ c embedded dynamic-code


【解决方案1】:

VxWorks can do exactly that。除了共享库,对象模块可以部分链接可重定位对象(GNU ld 中的 -r 选项),然后在运行时加载到完成链接的目标,解析到目标上现有代码的链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多