我的.out
文件已编译为arm-none-eabi-gcc -mtune=cortex-m3 --specs=nosys.specs
。
如果我使用arm-none-eabi-gdb a.out
运行GDB并在disas main
上执行exec
,我会得到一个看起来相当合理的反汇编,这与C进行如此简单的测试非常类似。
如果我然后{J}通过JLink和target remote localhost:XXXX
进行设备连接,则load
会有所不同,而不仅仅是地址;甚至更长。
disas main
"成功"但是,由于这样做没有错误,它会报告“负载大小”和“负载大小”。合理的金额。
如果我改变了源,load
之后的反汇编会发生变化,但似乎永远不会像源一样,并且与可执行文件的反汇编完全不同,后者与源非常相似。
我最好的猜测是load
没有正确成功,是什么导致了这个?
或者,如果从上面看来它确实正确加载,为什么反汇编会如此不同?
我验证了我在<{em> load
之后disas main
上看到的内容实际上是它加载的内容(即它没有与内容合并#&#通过重复load
手动清除这些地址,在内存中留下39;留在内存中。
所以出于某种原因,set {long long}0xADDR = 0
确实似乎加载的东西并不是源精灵中的东西。
此外,其中一个对我来说看起来不正确的分支将流程引导到指令load
。 ldr??.w r7, [r4, #4095]
究竟是什么意思 - 它是??
的格式错误和类型,因此GDB打印ldr
,因此证明{{1}没有正确执行?