debug - MDK - arm-none-eabi - 同样的工具链,源码,编译参数,elf是一样的
文章目录
- debug - MDK - arm-none-eabi - 同样的工具链,源码,编译参数,elf是一样的
- 概述
- 笔记
- 备注
- 备注
- END
debug - MDK - arm-none-eabi - 同样的工具链,源码,编译参数,elf是一样的
概述
同样的源码(*.cpp, *.s, *.ld), 都是用arm-gcc工具链(同一个位置的arm-gcc)进行编译。
不同的是,用2种IDE进行编译。
- 用MDK5建立的工程,采用arm-gcc工具链
- 将MDK5工程的工具链参数抠出来,做了一个makefile工程来编译。
相当于,虽然是在2个IDE中编译,但是用的工具链都是同一个(位置都一样),编译的命令和参数都一摸一样。
用BC4比较2个elf, 有点区别。但是不知道含义。
用IDA打开后,生成2个版本的elf的db, 再用bindiff比较,没有不同。
binddiff是权威工具,没在bindiff中看出区别,那基本就是一样的。
笔记
用的bindiff7, 需要设置IDA路径才行。否则比较时报错,说找不到反汇编器。
可知,函数比较是完全相同的。
2进制比较,有2%不同。具体哪不同就不知道了。
估计是debug版有调试信息,因为工程不一样,那么调试信息中的文件路径信息就不同(文件的位置,输出文件的位置)。但是无法确认。
现在从bindiff的比较结果看,2个elf的函数的2进制代码是一样的。
备注
从比较结果来看,只要是采用相同工具链,相同数量的gcc命令,相同的gcc参数,那么编译出来的东西(.elf)就是相同的。
也就是说,我已经从MDK5的工程,做了一个相同效果的makefile工程出来。
那就可以将这个makefile工程引入基于eclipse的IDE(e.g. MCUXPresso), 看看是不是板载调试器版本低?
如果不行,还可以从MCUXPresso中,将gcc命令行参数抠出来(可以看看编译参数是否有区别?),再作为makefile引入,看看是否可以单步调试。
反正最后可以逐步缩小问题范围。
备注
用和MDK5-arm-gcc工程中一样的makefile-arm-gcc工程,导入MCUXPressoIDE, 不能单步调试,那问题就不是说elf生成的有问题。
用MCUXPressoIDE生成了一个最小化的工程,可以单步调试。板子是一样的。
看了一眼MCUXPressoIDE生成的.mk, 编译参数好像是NXP家特有的。应该NXP的arm-gcc不是标准的arm-gcc. 而是和NXP Linkserver配套的编译参数,否则就不能在MCUXPressoIDE中调试。不是板载调试器的问题。
用标准的arm-gcc, 无法编译MCUXPressoIDE生成的.mk.
那下一步,还是用调试工具,将MCUXPressoIDE编译他自己生成的最小化工程,将每个编译指令的参数都抠出来,再做一个makefile.
应该这个makefile就是能在MCUXPressoIDE中单步调试的makefile工程。应该是这样,让实验来验证这个想法。