0

我有一个.outarm-none-eabi-gcc -mtune=cortex-m3 --specs=nosys.specs.

如果我运行 GDBarm-none-eabi-gdb a.outdisas main在其上执行,exec我会得到一个看起来合理的反汇编,这与 C 非常相似,用于这样一个简单的测试。

如果我然后target remote localhost:XXXX通过 JLink 连接到设备,并且loaddisas main则不同,而不仅仅是地址;甚至更长。

然而load,“成功”,因为这样做没有错误,它报告了合理数量的“负载大小”。

如果我更改源,之后的反汇编load确实会改变,但似乎永远不会像源,并且与直接反汇编可执行文件完全不同,后者与源非常相似。


我最好的猜测是load没有正确成功,这可能是什么原因?

或者如果从上面看起来它确实正确加载,为什么反汇编如此不同?


更新:

我通过反复手动清除这些地址来验证我所看到disas main load实际上是它加载的内容(即它没有与内存中“剩余”的东西合并) 。set {long long}0xADDR = 0

因此,出于某种原因load,似乎确实加载了一些与源精灵中不同的东西。

此外,对我来说看起来不正确的分支之一将流程定向到指令ldr??.w r7, [r4, #4095]。这到底是什么??意思 - 它是格式错误和无效的类型ldr所以 GDB 打印??,因此证明load没有正确执行?

4

0 回答 0