打印

ARM汇编转C语言

[复制链接]
1965|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wglzp123456|  楼主 | 2019-6-14 10:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wglzp123456 于 2019-6-15 19:21 编辑

//ARM汇编代码
0894        B570           PUSH      {R4-R6,LR}
0896        4938           LDR       R1,D00000978;[PC,#224] R1=0x20000FA8
0898        2200           MOVS      R2,#0x0
089A        2404           MOVS      R4,#0x4
089C        F891 5041    LDRB.W    R5,[R1,#0x41]
08A0        2301           MOVS      R3,#0x1
08A2        2D05           CMP       R5,#5
08A4        D262           BCS       Q0000096C

08A6        E8DF F005   TBB       [PC,R5]
08AA       DB  03
              DB  25         
08AC       DB  3B
              DB  44
              DB  59
              DB  00   
//0---------------------------------------------------     
08B0        F5A0 42AA    SUB.W     R2,R0,#0x5500
08B4        3AAA         SUBS      R2,#0xAA
08B6        D00F         BEQ       Q000008D8

08B8        3A11         SUBS      R2,#0x11
08BA        D11A         BNE       Q000008F2

08BC        F891 2086    LDRB.W    R2,[R1,#0x86]
08C0        2A00         CMP       R2,#0
08C2        D116         BNE       Q000008F2

08C4        F881 408A    STRB.W    R4,[R1,#0x8A]
08C8        F8A1 0066    STRH.W    R0,[R1,#0x66]
08CC        F881 3087    STRB.W    R3,[R1,#0x87]
08D0        F8A1 0088    STRH.W    R0,[R1,#0x88]
08D4        2003            MOVS      R0,#0x3
08D6        E01D           B         Q00000914

08D8        F891 2062    LDRB.W    R2,[R1,#0x62]
08DC        2A00            CMP       R2,#0
08DE        D108           BNE       Q000008F2

08E0        F881 408A    STRB.W    R4,[R1,#0x8A]
08E4        F821 0F42    STRH.W    R0,[R1,#0x42]!
08E8        F881 3021    STRB.W    R3,[R1,#0x21]
08EC        8448            STRH      R0,[R1,#0x22]
08EE        F801 3C01    STRB.W    R3,[R1,#-0x1]

08F2        BD70            POP       {R4-R6,PC}

//1--------------------------------------------------
08F4        F891 2063    LDRB.W    R2,[R1,#0x63]

08F8        EB01 0342    ADD.W     R3, R1,R2,LSL #1

08FC        1C52            ADDS      R2,R2,#1

08FE        F8A3 0042    STRH.W    R0,[R3,#0x42]

0902        F8B1 3064    LDRH      R3,[R1,#0x64]

0906        B2D2           UXTB      R2,R2
0908        4418            ADD       R0,R3
090A        F8A1 0064    STRH.W    R0,[R1,#0x64]
090E        2A0F            CMP       R2,#15
0910        D303            BCC       Q0000091A
0912        2002            MOVS      R0,#0x2

0914        F881 0041    STRB.W    R0,[R1,#0x41]
0918        BD70           POP       {R4-R6,PC}

091A        F881 2063    STRB.W    R2,[R1,#0x63]
091E        BD70           POP       {R4-R6,PC}
//2---------------------------------------------------
0920        F8B1 4064    LDRH      R4,[R1,#0x64]
0924        4284            CMP       R4,R0
0926        D121            BNE       Q0000096C
0928        F8A1 0060    STRH.W    R0,[R1,#0x60]
092C        F881 3062    STRB.W    R3,[R1,#0x62]
0930        E01C            B         Q0000096C
//3----------------------------------------------------
0932        F891 2087    LDRB.W    R2,[R1,#0x87]
0936        EB01 0342    ADD.W     R3, R1,R2,LSL #1
093A        1C52            ADDS      R2,R2,#1
093C        F8A3 0066    STRH.W    R0,[R3,#0x66]

0940        F8B1 3088    LDRH      R3,[R1,#0x88]
0944        B2D2           UXTB      R2,R2
0946        4418            ADD       R0,R3
0948        F8A1 0088    STRH.W    R0,[R1,#0x88]
094C        2A0F            CMP       R2,#15
094E        D302            BCC       Q00000956
0950        F881 4041    STRB.W    R4,[R1,#0x41]
0954        BD70            POP       {R4-R6,PC}
//---------------------------------------------------
0956        F881 2087    STRB.W    R2,[R1,#0x87]
095A        BD70           POP       {R4-R6,PC}
//4-----------------------------------------------------
095C        F8B1 4088    LDRH      R4,[R1,#0x88]
0960        4284            CMP       R4,R0
0962        D103            BNE       Q0000096C
0964        F8A1 0084    STRH.W    R0,[R1,#0x84]
0968        F881 3086    STRB.W    R3,[R1,#0x86]

096C        F881 208A    STRB.W    R2,[R1,#0x8A]
0970        F881 2041    STRB.W    R2,[R1,#0x41]
0974        BD70           POP       {R4-R6,PC}
//-----------------------------------------------------------------
对应的C语言如下
  u16 x2,x3,x4;
           u8  x5;
           x2=0;
           x4=4;
           x5=uxD0FA8.u841;
           x3=1;
           switch(x5){
                 case 0:
                            if(u16a==0x55AA){
                                      if(uxD0FA8.u886==0){
                                                uxD0FA8.u88A=x4;
                                                uxD0FA8.u1666[0]=u16a;
                                               uxD0FA8.u887=x3;
                                               uxD0FA8.u1688=u16a;
                                               uxD0FA8.u841=3;
                                     }   
                           }else if(u16a==0x55BB){
                                      if(uxD0FA8.u862==0){
                                                 uxD0FA8.u88A=x4;
                                                 uxD0FA8.u1642[0]=u16a;
                                                 uxD0FA8.u863=x3;
                                                  uxD0FA8.u1664=u16a;
                                                 uxD0FA8.u841=x3;                 
                                      }
                            }
                            break;
                 case 1:
                            x2=uxD0FA8.u863;
                            uxD0FA8.u1642[x2++]=u16a;
                            uxD0FA8.u1664+=u16a;
                            if(x2>=15){
                                      uxD0FA8.u841=2;
                             }else{
                                      uxD0FA8.u863=x2;
                             }
                            break;
                 case 2:
                           if(uxD0FA8.u1664==u16a){
                                  uxD0FA8.u1642[15]=u16a;
                                  uxD0FA8.u862=x3;
                           }
                            uxD0FA8.u88A=x2;
                            uxD0FA8.u841=x2;
                            break;
                 case 3:
                            x2=uxD0FA8.u887;
                            uxD0FA8.u1666[x2++]=u16a;
                            uxD0FA8.u1688+=u16a;   
                           if(x2>=15){
                                    uxD0FA8.u841=x4;
                            }else{
                                    uxD0FA8.u887=x2;
                            }
                             break;
                 case 4:
                             x4=uxD0FA8.u1688;
                             if(x4==u16a){
                                       uxD0FA8.u1666[15]=u16a;
                                       uxD0FA8.u886=x3;
                             }else{
                                        uxD0FA8.u88A=x2;
                                        uxD0FA8.u841=x2;
                            }                 
                            break;
                 default:
                            break;
                 }

使用特权

评论回复

相关帖子

沙发
airwill| | 2019-6-15 17:24 | 只看该作者
呵呵, 好象很强劲的样子, 不过这样的 C 代码, 还是很难读懂啊

使用特权

评论回复
板凳
lihui567| | 2019-6-15 17:31 | 只看该作者
C代码有点乱了,不过这是用啥软件把汇编转为C了,软件挺不错的

使用特权

评论回复
地板
wglzp123456|  楼主 | 2019-6-15 19:12 | 只看该作者
本帖最后由 wglzp123456 于 2019-6-15 19:13 编辑
lihui567 发表于 2019-6-15 17:31
C代码有点乱了,不过这是用啥软件把汇编转为C了,软件挺不错的

用脑代把汇编转为C

使用特权

评论回复
评论
lihui567 2019-6-16 09:07 回复TA
这牛 
5
rhbdhbddf| | 2019-6-17 21:15 | 只看该作者
不知道说些什么

使用特权

评论回复
6
free_tend| | 2019-7-18 16:13 | 只看该作者
c语言如果这样写, 自己看还行。 别人来看 没注释 风格也乱,最关键变量命名很糟糕。

使用特权

评论回复
7
free_tend| | 2019-7-18 16:18 | 只看该作者
还有c语言里面switch case, 一般汇编都是addls 对应 更为直观。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

13

帖子

0

粉丝