LD可以在一个地址访问数据吗?

时间:2016-12-23 16:49:04

标签: c linker

我正在为使用Kinetis处理器的项目编写一些代码。这些处理器具有闪存配置字段,该字段存储在特定地址的闪存中。如果将错误的值写入该字段,您可以将自己锁定在芯片之外。

我的代码包括一个压缩结构,一个指定.flashConfig部分的实例,一些静态断言以确保结构是所需的大小,以及#define被写入FSEC字段(重要的一个)如预期的那样。然后在链接器脚本中,我将该部分存储在正确的闪存位中。另外,我有一个ASSERT来查看该部分中是否有正确的数据量。

这一切都很不错,但我仍然感到紧张(我已经看过这些芯片现在被锁定了几次)。我想要做的是在链接器脚本中添加一个额外的断言,例如:

ASSERT(BYTE_AT(0x40C) == 0xBE);

这可能吗?

我考虑使用objdump / objcopy在后期构建步骤中从.bin转储。但是我在Windows上构建它,所以没有grep / awk会很好也很容易。其他人也必须建立这个,所以我不想依赖cygwin安装或不安装。此外,这比链接器稍微删除一些,因此如果有人删除了post_build脚本,很容易错过。

1 个答案:

答案 0 :(得分:1)

  

我不想依赖cygwin安装或不安装。

编写一个C程序,执行相同的检查objdumpgrep

  

另外,这比链接器要多一点,因此如果有人删除了post_build脚本,很容易错过。

使验证程序调用链接器,然后验证结果。也就是说,而不是

${LD} -o foo.bin ${LDFLAGS} ${OBJS} && ./post_build foo.bin

这样做:

./build_and_verify -o foo.bin ${LDFLAGS} ${OBJS}