c语言修改elf文件crc32,将CRC存储到AXF/ELF文件中

我目前正在研究Windows 7上的LPCXpresso(基于eclipse的)工具链中的C程序,这是一个针对NXP Cortex M3微处理器的gcc IDE.它提供了一种通过JTAG对微处理器进行编译链接编程的简单方法.构建的结果是由调试配置加载的AXF文件(ELF格式).

加载的程序驻留在闪存中,从0x00000到0x3FFFB.我想在0x3FFFC处包含一个4字节的CRC-32,以便在启动时验证程序.我添加了另一节,并使用gcc __attribute__指令访问该内存位置.

uint32_t crc32_build __attribute__ ((section(".text_MFlashCRC")));

为了计算和存储CRC-32值,我的计划是使用SRecord以及以下的构建后步骤:

arm-none-eabi-size "${BuildArtifactFileName}"

arm-none-eabi-objcopy -O binary "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin"

checksum -p ${TargetChip} -d "${BuildArtifactFileBaseName}.bin"

../util/srec_cat "${BuildArtifactFileBaseName}.bin" -binary -crop 0 0x3FFFC -fill 0xFF 0x00000 0x3FFFC -crc32-b-e 0x3FFFC -o "${BuildArtifactFileBaseName}.crc.bin" -binary

echo ""

echo "CRC32:"

../util/srec_cat "${BuildArtifactFileBaseName}.crc.bin" -binary -crop 0x3FFFC 0x40000 -o - -hex-dump

这将创建一个带校验和的二进制文件(引导加载程序所必需的),然后在使用的闪存上计算CRC,将CRC值存储在0x3FFFC.

但是,我不认为我可以使用调试器加载二进制文件.有一个内置的编程实用程序与LPCXpresso可以加载修改后的二进制文件,但是,这不允许我调试.我相信我可以尝试使用"仅附加"模式启动与原始AXF文件的调试会话,但这会变得很麻烦.

我已经能够使用readelf来检查crc32_buildAXF文件中的变量.有没有办法在AXF文件中编辑变量?是否有行业标准方法将CRC作为构建后步骤插入?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值