sda*_*aau 7 c assembly gcc objdump
这接近于使用GCC生成可读组件?,但我的上下文是avr-gcc(并相应地avr-objdump)Atmel(虽然,我想它将适用于GCC董事会).
问题是,我有一个多个.c和.cpp文件的项目; 最终被编译成可执行文件,其名称与'master'.cpp文件相同.在这个过程中,我可以通过两种方式获得汇编列表:
gcc发出汇编列表源(参见Linux汇编和反汇编和简介)-S; 在这种情况下,我得到一个文件,内容如下:... loop: push r14 push r15 push r16 push r17 push r28 push r29 /* prologue: function / / frame size = 0 */ ldi r24,lo8(13) ldi r22,lo8(1) call digitalWrite rjmp .L2 .L3: ldi r24,lo8(MyObj) ldi r25,hi8(MyObj) call _ZN16MYOBJ7connectEv .L2: ldi r24,lo8(MyObj) ldi r25,hi8(MyObj) call _ZN16MYOBJ11isConnectedEv ...
(还没有尝试过;但我想这段代码是可编译的/可构建的....)
objdump使用该-S开关发出汇编列表源; 在这种情况下,我得到一个文件,内容如下:
...
0000066a <init>:
void init()
{
        // this needs to be called before setup() or some functions won't
        // work there
        sei();
     66a:       78 94           sei
     66c:       83 b7           in      r24, 0x33       ; 51
     66e:       84 60           ori     r24, 0x04       ; 4
     670:       83 bf           out     0x33, r24       ; 51
...
000006be <loop>:
     6be:       ef 92           push    r14
     6c0:       ff 92           push    r15
     6c2:       0f 93           push    r16
     6c4:       1f 93           push    r17
     6c6:       cf 93           push    r28
     6c8:       df 93           push    r29
     6ca:       8d e0           ldi     r24, 0x0D       ; 13
     6cc:       61 e0           ldi     r22, 0x01       ; 1
     6ce:       0e 94 23 02     call    0x446   ; 0x446 
     6d2:       04 c0           rjmp    .+8             ; 0x6dc 
     6d4:       8d ef           ldi     r24, 0xFD       ; 253
     6d6:       94 e0           ldi     r25, 0x04       ; 4
     6d8:       0e 94 25 06     call    0xc4a   ; 0xc4a <_ZN16MYOBJ7connectEv>
     6dc:       8d ef           ldi     r24, 0xFD       ; 253
     6de:       94 e0           ldi     r25, 0x04       ; 4
     6e0:       0e 94 21 06     call    0xc42   ; 0xc42 <_ZN16MYOBJ11isConnectedEv>
...
(我确实试图构建这个代码,它确实失败了 - 它将'行号'作为标签读取)
显然,两个列表(loop至少是函数)代表相同的汇编代码; 除了:
gcc一个(应该)编译-的objdump人做不objdump一个包含所有称为函数,这可能会在比"主"其他文件中定义列表(例如,digitalWrite) -在gcc一个确实并不objdump一个含有原来的C/C++源极线"散布"与组件(只对于C的文件,但只是偶尔,貌似?) -的gcc一个确实并不那么,有没有办法获得一个可编译的汇编列表,但是所有的内联函数,以及源C/C++代码(可能在适当的地方)散布为注释(因此它们不会干扰)编译汇编文件)?(没有为输出编写解析器objdump,那就是:))
| 归档时间: | 
 | 
| 查看次数: | 4532 次 | 
| 最近记录: |