加载后,exec对远程的GDB反汇编不同 - 没有正确加载?

时间:2014-07-14 16:35:06

标签: gdb remote-debugging disassembly jlink

我的.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确实似乎加载的东西并不是源精灵中的东西。

此外,其中一个对我来说看起来不正确的分支将流程引导到指令loadldr??.w r7, [r4, #4095]究竟是什么意思 - 它是??的格式错误和类型,因此GDB打印ldr,因此证明{{1}没有正确执行?

0 个答案:

没有答案