如何调试由于 "Jump to the invalid address" 导致的分段错误?

How to debug Segmentation fault due to "Jump to the invalid address"?

我正在开发一个 运行 在 am335x arm 处理器上运行的应用程序。 我正在定义以下结构,其中包含指向 "Command" 函数的函数指针。 "Command" 函数在同一文件中定义如下

ObjectDef BPObjectDef = { CCR_COMMS, 1, ATTRIBUTES, "BP", Command };

static BYTE Command( ObjectPtr Obj, BYTE Command)
{
<not writing code because function is big>
}

我交叉编译了上面的代码并生成了二进制文件。使用 objdump -t 我可以看到 "Command" 函数得到了以下地址

00013f0d l     F .text  0000016c              Command

但是当我 运行 目标机器上的二进制文件时,我得到以下 "Command" 函数的地址

address of BPObjectDef.Command = 0x3f0d0000

我们可以看到地址的最后两个字节与前两个字节交换了。这会导致在访问此功能时出现分段错误。 以前有人遇到过类似的问题吗?在这种情况下如何调试?我想我不能使用地址消毒器,因为它是一个手臂 platform.Thanks

@Yunnosch 你是天才!正如您在评论中提到的,地址因结构填充而被更改。在结构声明之前使用#pragma pack(1) 解决了这个问题。非常感谢