This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F67771A:使用 C 源代码交叉编译器进行反汇编

Guru**** 2386610 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1320790/msp430f67771a-disassembly-with-interlist-of-c-source

器件型号:MSP430F67771A

当运行一个实时调试会话时、可使用交叉列出的 C 语言源代码来查看反汇编。 是否可以 在调试会话之外使用编译器/汇编工具生成此代码?

根据该文档、我们可以将--optimizer_interlist 和/或- c_src_interlist 选项与编译器一起使用、以生成交叉列出的原始 C 源代码的汇编文件。 我们还能够使用反汇编器(dis430.exe)从最终链接的二进制文件生成反汇编 代码以查看绝对地址。 似乎应该有一种方法将这两个过程组合在一起 以生成一个全面的 文件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是一个很难解决的问题、特别是积极优化时、因为相关的汇编代码有可能与 C 语言代码不符、或者 C 语言代码也许根本没有任何等效的汇编语言。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    使用 GCC 时、我使用具有-S 选项的 objdump 来获得如下内容:

    void __attribute__ ((wakeup, interrupt(TIMER0_A0_VECTOR))) Timer_A (void)
     {
       
       tick++;
        2120:       92 53 00 11     inc     &0x1100         ;
    
    00002124 <.Loc.56.1>:
     }
        2124:       b1 c0 f0 00     bic     #240,   0(r1)   ;#0x00f0
        2128:       00 00 
        212a:       00 13           reti                    
    
    

    优化 可以使源和反汇编之间的对应可疑,所以你必须小心。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、但在本例中、我只想合并这些工具/选项已提供的输出、即使它受到优化的限制。 现在、我能够为每个目标文件生成.asm 文件、并对最终二进制文件进行反汇编。 如果我并列查看这些内容、基本上就会得到所需的内容、但需要手动将 .asm 文件中的汇编语言/C 源代码与反汇编文件中的行匹配以获得其绝对地址、这是一个难题。