如何查看是什么编译器制作了 PIC ASM 代码?

逆向工程 拆卸 编译器 图片 十六进制
2021-06-09 05:10:46

我从 PIC16F88 中提取了一个 .hex 文件。例如:

:020000040000FA
:100000008F3083160F0570388F009B0183129F017C
:1000100083169F0107309C0005108312051483127C
:1000200003131730A0006730A1002930A2000A1284
:100030008A11A20B17280A128A11A10B15280A127D
:100040008A11A00B13280510831203131730A00088
:100050006730A1002930A2000A128A11A20B2C28B5
:100060000A128A11A10B2A280A128A11A00B282829
:020070000D2859
:02400E00782F09
:02401000FF3F70
:00000001FF

在 MPLAB 中,我导入了这个 .hex 文件并找到了反汇编代码,在这种情况下:

 1   000     308F  MOVLW 0x8f                             
 2   001     1683  BSF 0x3, 0x5                           
 3   002     050F  ANDWF 0xf, W                           
 4   003     3870  IORLW 0x70                             
 5   004     008F  MOVWF 0xf                              
 6   005     019B  CLRF 0x1b                              
 7   006     1283  BCF 0x3, 0x5                           
 8   007     019F  CLRF 0x1f                              
 9   008     1683  BSF 0x3, 0x5                           
10   009     019F  CLRF 0x1f                              
11   00A     3007  MOVLW 0x7                              
12   00B     009C  MOVWF 0x1c                             
13   00C     1005  BCF 0x5, 0                             
14   00D     1283  BCF 0x3, 0x5                           
15   00E     1405  BSF 0x5, 0                             
16   00F     1283  BCF 0x3, 0x5                           
17   010     1303  BCF 0x3, 0x6                           
18   011     3017  MOVLW 0x17                             
19   012     00A0  MOVWF 0x20                             
20   013     3067  MOVLW 0x67                             
21   014     00A1  MOVWF 0x21                             
22   015     3029  MOVLW 0x29                             
23   016     00A2  MOVWF 0x22                             
24   017     120A  BCF 0xa, 0x4                           
25   018     118A  BCF 0xa, 0x3                           
26   019     0BA2  DECFSZ 0x22, F                         
27   01A     2817  GOTO 0x17                              
28   01B     120A  BCF 0xa, 0x4                           
29   01C     118A  BCF 0xa, 0x3                           
30   01D     0BA1  DECFSZ 0x21, F                         
31   01E     2815  GOTO 0x15                              
32   01F     120A  BCF 0xa, 0x4                           
33   020     118A  BCF 0xa, 0x3                           
34   021     0BA0  DECFSZ 0x20, F                         
35   022     2813  GOTO 0x13                              
36   023     1005  BCF 0x5, 0                             
37   024     1283  BCF 0x3, 0x5                           
38   025     1303  BCF 0x3, 0x6                           
39   026     3017  MOVLW 0x17                             
40   027     00A0  MOVWF 0x20                             
41   028     3067  MOVLW 0x67                             
42   029     00A1  MOVWF 0x21                             
43   02A     3029  MOVLW 0x29                             
44   02B     00A2  MOVWF 0x22                             
45   02C     120A  BCF 0xa, 0x4                           
46   02D     118A  BCF 0xa, 0x3                           
47   02E     0BA2  DECFSZ 0x22, F                         
48   02F     282C  GOTO 0x2c                              
49   030     120A  BCF 0xa, 0x4                           
50   031     118A  BCF 0xa, 0x3                           
51   032     0BA1  DECFSZ 0x21, F                         
52   033     282A  GOTO 0x2a                              
53   034     120A  BCF 0xa, 0x4                           
54   035     118A  BCF 0xa, 0x3                           
55   036     0BA0  DECFSZ 0x20, F                         
56   037     2828  GOTO 0x28                              
57   038     280D  GOTO 0xd   

现在我想知道这段代码是用什么编译器编译的。我怎样才能做到这一点?我正在寻找一般方法来检查哪些编译器制作了一些 ASM 代码。列出的代码只是一个例子。

1个回答

(从评论转换的答案)

恢复您指定的二进制代码的工具链出处,至少需要比较各种 PIC 编译器的结果,我不知道 PIC 汇编,但最后两条指令对于识别编译器看起来很有趣(前提是您的反汇编器具有误解了 处的信息0x38,怎么可能调用指令?)。

一些编译器为用于快速n-dirty 的后期修补的函数生成序言,这也可能是赠品。祝你好运!