首页
社区
课程
招聘
[原创]小工具--ARM汇编器//查看机器码
发表于: 2013-3-22 16:00 24136

[原创]小工具--ARM汇编器//查看机器码

2013-3-22 16:00
24136
方便大家查看汇编指令转换后的机器码,hack一些native的so文件。
需要查看thumb指令,就把它填到.code 16,否则填到.code 32节中,
直接运行批出理就能看到详细的结果。

以前看某位兄弟曾写过一个带GUI的叫CeleASM.exe,
但那个内嵌的是M$的arm-as工具,过时了,新版的armv7指令不支持,所以就从android toolchain里取了,算是够Native了。
平时太忙了,没时间整GUI,就控制台版的凑或用吧。

测试汇编码:
    .text
    .align  4
    .fpu    neon

    .global asmgen
    .type   asmgen, %function

asmgen:
        .fnstart
        push        {lr}

        teq         r2, #0
        ble         .Lbye
       
        .code 16
        cbz         r2, .Lhelo
        cbnz        r1, .Lbye
        movs        r2, #3

        .code 32
.Lhelo:
        mov         r1, r2, lsl #2

.Lbye:
        pop         {pc}
        .fnend

批处理运行结果:
ARM GAS  asmgen.txt                     page 1

   1
   2                        .text
   3                        .align  4
   4                        .fpu    neon
   5
   6                        .global asmgen
   7                        .type   asmgen, %function
   8
   9                    asmgen:
  10                            .fnstart
  11 0000 00402DE9              push        {lr}
  12
  13 0004 000032E3              teq         r2, #0
  14 0008 020000DA              ble         .Lbye
  15
  16                            .code 16
  17 000c 12B1                  cbz         r2, .Lhelo
  18 000e 19B9                  cbnz        r1, .Lbye
  19 0010 0322                  movs        r2, #3
  20
  21 0012 0000                  .code 32
  22                    .Lhelo:
  23 0014 0211A0E1              mov         r1, r2, lsl #2
  24
  25                    .Lbye:
  26 0018 0080BDE8              pop         {pc}
  27 001c 00F020E3              .fnend

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 1
支持
分享
最新回复 (12)
雪    币: 335
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错,之前在wephone论坛下载一个类似不过支持的不多!看一下阁下,有源代码?
2013-3-22 16:51
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
支持。。。。。。。。。。。。
2013-3-22 16:52
0
雪    币: 286
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢,这个不错!
2013-3-24 12:15
0
雪    币: 1552
活跃值: (1626)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢楼主分享!
2013-7-27 00:56
0
雪    币: 1585
活跃值: (182)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢,好工具
2013-9-25 17:05
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢,用起来不错
2015-8-5 18:45
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢分享好工具.
2015-8-5 19:37
0
雪    币: 41
活跃值: (823)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
用到了,支持一下
2016-8-16 17:40
0
雪    币: 0
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
挺好用的,谢谢楼主
2016-8-22 11:26
0
雪    币: 53
活跃值: (280)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
我还是更新一下吧,最近有好些人问
一种使用Android NDK自带的汇编器来生成机器码的方法

########################################

生成32位指令(汇编器:android-ndk-xxx\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-as.exe):
> arm-linux-androideabi-as.exe -ahlm -k -g -march=armv7 -mthumb-interwork -o asmgen.o asmgen.s

64位指令(汇编器:android-ndk-xxx\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-as.exe):
> aarch64-linux-android-as.exe -ahlm -g -o asmgen64.o asmgen64.s

============================================
.s 样例
-------------------------
  .text

  MOV             X3, #0x1000
  LDR             X3, =0x85000
  
执行结果:
   1
   2                        .text
   3
   4 0000 030082D2        MOV             X3, #0x1000
   5 0004 23000058        LDR             X3, =0x85000
   5      00500800
   5      00000000

===================================
对于模拟反编译后的跳转指令,不用手动计算偏移之类的,直接用.org设置指令所在地址即可:

    .syntax unified
    .text
   
    .org 0x1EB0
     B loc_1EDA

    .org 0x1EDA
loc_1EDA:   
     MOVW            R1, #0x1ED

生成的机器码如下:

   1
   2                        .syntax unified
   3                        .text
   4
   5 0000 00000000          .org 0x1EB0
   5      00000000
   5      00000000
   5      00000000
   5      00000000
   6 1eb0 00F013B8           B loc_1EDA
   7
   8 1eb4 00000000          .org 0x1EDA
   8      00000000
   8      00000000
   8      00000000
   8      00000000
   9                    loc_1EDA:
  10 1eda 40F2ED11           MOVW            R1, #0x1ED

==========================================
上文提到的32/64位汇编器下载链接,从NDK里取出来的:

http://bbs.pediy.com/attachment.php?attachmentid=106158&d=1470968101
2016-8-22 12:09
0
雪    币: 10944
活跃值: (7329)
能力值: ( LV12,RANK:219 )
在线值:
发帖
回帖
粉丝
12
thumb2汇编器 ndk里提供了嘛? 如果没有,对于thumb2指令如何查看生成的机器码
2017-3-9 17:57
0
雪    币: 566
活跃值: (919)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢楼主!
2020-8-9 20:46
0
游客
登录 | 注册 方可回帖
返回
//