gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:14:02 25 4
gpt4 key购买 nike

我正在开发一个在 am335x Arm 处理器上运行的应用程序。我正在定义以下结构,其中包含指向“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

但是当我在目标机器上运行二进制文件时,我得到以下“命令”功能的地址

address of BPObjectDef.Command = 0x3f0d0000

我们可以看到,寻址的最后两个字节与前两个字节交换了。这会导致访问此函数时出现段错误。有人以前遇到过类似的问题吗?这种情况下如何调试呢?我想我不能使用地址清理器,因为它是一个arm平台。谢谢

最佳答案

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

关于c - 如何调试由于 "Jump to the invalid address"导致的段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57843182/

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