我正在开发一个在am335x arm处理器上运行的应用程序。 我正在定义以下结构,其中包含指向"命令"函数的函数指针。"命令"功能在下面在同一文件中定义
ObjectDef BPObjectDef = { CCR_COMMS, 1, ATTRIBUTES, "BP", Command };
static BYTE Command( ObjectPtr Obj, BYTE Command)
{
<not writing code because function is big>
}
我交叉遵守上面的代码并生成二进制文件。有了objdump -t
我可以看到"命令"功能得到了以下地址
00013f0d l F .text 0000016c Command
但是当我在目标机器上运行二进制文件时,我得到了"命令"函数的以下地址
address of BPObjectDef.Command = 0x3f0d0000
正如我们所看到的,寻址的最后两个字节与前两个字节交换。这会导致访问此功能时出现分段错误。 以前有人遇到过类似的问题吗?在这种情况下如何调试?我想我不能使用地址消毒器,因为它是一个手臂平台。谢谢
@Yunnosch你是天才!正如您在评论中提到的,由于结构填充,地址被更改了。在结构声明之前使用 #pragma pack(1( 解决了这个问题。谢谢