gpt4 book ai didi

c - 有没有办法手动设置函数地址?

转载 作者:太空宇宙 更新时间:2023-11-04 07:27:16 24 4
gpt4 key购买 nike

我想制作一个全局或静态函数,但要确保函数地址最多占用 24 位。有办法做到这一点吗?

编辑:我正在为 arm 架构使用 arm-linux-gnueabi-gcc 交叉编译器。主程序在 arm 模式下静态链接和翻译。我真正想要的是重新定位 printf 符号,但是 &printf 需要 4B,所以指令 BL &printf 不会执行。所以,我最多可以有 3B。

最佳答案

在标准 C 中无法做到这一点。您必须使用特定于您的开发人员工具和目标平台的功能。你没有说明那些是什么,所以我们不能给你具体的建议。

大多数架构都提供一个与当前指令有偏移的分支,在这种情况下,您的要求是目标函数靠近调用,而不是在前 224 字节内的地址空间。您确定您有一个分支指令可以分支到一个绝对地址并且包含一个 24 位立即值吗?

汇编器和链接器可能有设置程序段位置的方法,您可以将目标函数放入特定段,然后设置该段的地址。这样做不当可能会违反目标操作系统中的规则,因此您需要了解目标系统中可执行程序的布局。

通常,链接器的默认行为会为您的代码生成合适的地址,除非您的程序很大。如果目标地址对于指令的直接字段来说太大,链接器应该产生一个错误。这意味着,至少,您的程序不会有错误执行的危险,因为错误会在构建完成之前检测到。

您可能会考虑替代方案,例如构建完整地址(以便它可以处理任何大小的地址)并分支到完整地址的一系列指令。通常有指令来协助完成此操作,例如加载值的高位部分、添加低位部分以及跳转到存储在寄存器中的地址的指令。

关于c - 有没有办法手动设置函数地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17211243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com