【发布时间】:2016-12-16 13:51:48
【问题描述】:
有没有一种方法可以影响、设置或定义函数的(相对)地址?也许链接描述文件有任何可能性,以确保函数 abc() 始终位于 OFFSET+0x0034C0 (只是一个示例)。 我想以某种方式“控制”内存中函数的位置,以使这些位置具有某种参数化。 目前我正在寻找一种使用 gcc 在我的 x86 上的方法。但是,真正的应用程序应该在嵌入式设备上运行。
问候
【问题讨论】:
-
IMO,如果应用程序在嵌入式设备上运行,我假设,某种自定义操作系统,不要试图让它在 x86 上工作,然后发现它不能在设备。 (好奇,为什么?)
-
您是否考虑过在数据结构中存储指向函数的指针?
-
这听起来很像一个 XY 问题,你正在尝试解决问题 X,所以你认为涉及到 Y 的解决方案,所以你问如何做 Y。你能再解释一下吗你实际上是想做什么?我认为使用函数指针或类似的东西是一个很可能的候选者,但如果没有真正理解“我需要我的函数在一个特殊地址上”背后的真正想法,很难知道建议什么解决方案。
-
@MatsPetersson:你确实是对的。我的目标是创建一个硬件-软件-绑定方案。更多详细信息可以在我的评论中找到,以放松的回答。
-
因此,这听起来更像是“我希望只有在某些身份验证成功时才能访问代码块”,我可以通过以下方式解决:1.将整个块放在一个部分中 [参见例如,如何在 Linux 中定义 __init],然后仅在身份验证有效的情况下将该区域从 MMU 映射到虚拟空间。 2. 如前所述使用函数指针,或者使用一组不同的指针,或者将指针设置为在身份验证失败时停止[或执行其他一些“这不起作用”操作]的函数。