September 04, 2014

Hacklog #5: Hacking the rootkit

A first look at su(1)

So I now have access to the full filesystem mounted under /system on the phone. As I stated in the very first post, I have a special interest in /system/xbin/su. Based on the file's name and permissions, I have a strong expectation it can be used to acquire superuser privileges.

I extracted the file using PYaffs and proceeded to inspect it.

517-mboyer@marylou:~/Hacks/Nam-Phone_G40C [master:I±R=]$ stat su
  File: ‘su’
  Size: 9820            Blocks: 24         IO Block: 4096   regular file
Device: fe01h/65025d    Inode: 1070451     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  mboyer)   Gid: ( 1000/  mboyer)
Access: 2014-08-16 11:27:56.659942421 +0100
Modify: 2014-08-02 10:23:16.973937402 +0100
Change: 2014-08-02 10:23:16.973937402 +0100
 Birth: -

503-mboyer@marylou:~/Hacks/Nam-Phone_G40C [master:I±R=]$ file su
su: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), stripped

That's par for the course, there's nothing in the output of file(1) here I'd call surprising.

Building binutils for ARM

I've spent some time poking around ELF binaries in my day and so my first port of call was to build the excellent GNU Binutils package for the target architecture:

./configure --prefix=$HOME/Hacks/Nam-Phone_G40C/binutils_ARM/ --disable-nls --target=arm-none-elf && make
cd ../..
ls
cd -
make install

A closer look

Since I aim to find out what it is exactly this su does, the first order of business was to find out more about the dynamic symbols it references. It's a fairly small file, weighing in at 9820 bytes and so it makes sense that much of what it does is factored out in external libraries. If these symbol refer to well-known API calls, then this would allow me to make inferences regarding the behaviour and function of the program.

Time to break out my ARM build of nm(1)!

578-mboyer@marylou:~/Hacks/Nam-Phone_G40C [master:I±R=]$ export PATH="$PWD/binutils_ARM/arm-none-elf/bin:${PATH}"

581-mboyer@marylou:~/Hacks/Nam-Phone_G40C [master:I±R=]$ nm -CD ~/Hacks/Nam-Phone_G40C/su
             U accept
             U __aeabi_unwind_cpp_pr0
             U atexit
             U atoi
             U bind
             U bsd_signal
    0000b200 A __bss_end__
    0000b200 A _bss_end__
    0000a1dc A __bss_start
    0000a1dc A __bss_start__
    0000a1d0 D __data_start
    0000a1e0 B __dso_handle
    0000a1dc A _edata
    0000b200 A _end
    0000b200 A __end__
             U __errno
             U execlp
             U execvp
    00009ce8 A __exidx_end
    00009c8d A __exidx_start
             U exit
    0000a010 T __FINI_ARRAY__
             U free
             U getppid
    0000a008 T __INIT_ARRAY__
             U __libc_init
             U listen
             U malloc
             U memcpy
             U memset
             U mkdir
             U mktemp
             U property_get
             U putchar
             U puts
             U read
             U select
             U setgid
             U setuid
             U snprintf
             U socket
             U sprintf
    00080000 A _stack
             U __stack_chk_fail
             U __stack_chk_guard
             U stat
             U strcmp
             U strcpy
             U unlink
             U android::defaultServiceManager()
    00008ed0 W android::sp<android::IBinder>::~sp()
             U android::Parcel::writeInt32(int)
             U android::Parcel::writeString16(unsigned short const*, unsigned int)
             U android::Parcel::writeString16(android::String16 const&)
             U android::Parcel::writeStrongBinder(android::sp<android::IBinder> const&)
             U android::Parcel::writeInterfaceToken(android::String16 const&)
             U android::Parcel::Parcel()
             U android::Parcel::~Parcel()
             U android::String16::String16(char const*)
             U android::String16::~String16()
             U android::Parcel::dataPosition() const
             U android::Parcel::setDataPosition(unsigned int) const
             U android::RefBase::decStrong(void const*) const

There are some C++ symbols in there that look like they belong to some sort of Android API. The rest look like fairly common C standard library stuff. What's of particular interest here is the presence of socket(3) and bind(3). These are a strong indication that this program does sockety stuff.

Deconstructing the binary

Come feel the ARMs around you

As shown in the output of file(1) above, my su is compiled for the ARM CPU in my phone. I've dealt with x86, SPARC, m68k and even Z80 assembly at various points in the past, but this is the first time I'm going to have to wade through ARM code.

Or Thumb-2 code, rather:

ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x8ea0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          8940 (bytes into file)
  Flags:                             0x5000000, Version5 EABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         7
  Size of section headers:           40 (bytes)
  Number of section headers:         22
  Section header string table index: 21

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .interp           PROGBITS        00008114 000114 000013 00   A  0   0  1
  [ 2] .hash             HASH            00008128 000128 00019c 04   A  3   0  4
  [ 3] .dynsym           DYNSYM          000082c4 0002c4 000400 10   A  4   0  4
  [ 4] .dynstr           STRTAB          000086c4 0006c4 00041f 00   A  0   0  1
  [ 5] .rel.plt          REL             00008ae4 000ae4 000170 08   A  3   2  4
  [ 6] .rel.dyn          REL             00008c54 000c54 000008 08   A  3   2  4
  [ 7] .plt              PROGBITS        00008c5c 000c5c 00023c 00  AX  0   0  4
  [ 8] .text             PROGBITS        00008ea0 000ea0 000b84 00  AX  0   0 16
  [ 9] .rodata           PROGBITS        00009a24 001a24 000269 01 AMS  0   0  1
  [10] .ARM.exidx        ARM_EXIDX       00009c90 001c90 000058 08   A  8   0  4
  [11] .preinit_array    PREINIT_ARRAY   0000a000 002000 000008 00  WA  0   0  1
  [12] .init_array       INIT_ARRAY      0000a008 002008 000008 00  WA  0   0  1
  [13] .fini_array       FINI_ARRAY      0000a010 002010 000008 00  WA  0   0  1
  [14] .ctors            PROGBITS        0000a018 002018 000008 00  WA  0   0  1
  [15] .dynamic          DYNAMIC         0000a020 002020 0000e8 08  WA  4   0  4
  [16] .got              PROGBITS        0000a108 002108 0000c8 00  WA  0   0  4
  [17] .data             PROGBITS        0000a1d0 0021d0 00000c 00  WA  0   0  4
  [18] .bss              NOBITS          0000a1e0 0021e0 001020 00  WA  0   0 16
  [19] .note.gnu.gold-ve NOTE            00000000 0021e0 000018 00      0   0  4
  [20] .ARM.attributes   ARM_ATTRIBUTES  00000000 0021f8 000032 00      0   0  1
  [21] .shstrtab         STRTAB          00000000 00222a 0000c2 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

There are no section groups in this file.

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  PHDR           0x000034 0x00008034 0x00008034 0x000e0 0x000e0 R   0x4
  INTERP         0x000114 0x00008114 0x00008114 0x00013 0x00013 R   0x1
      [Requesting program interpreter: /system/bin/linker]
  LOAD           0x000000 0x00008000 0x00008000 0x01ce8 0x01ce8 R E 0x1000
  LOAD           0x002000 0x0000a000 0x0000a000 0x001dc 0x01200 RW  0x1000
  DYNAMIC        0x002020 0x0000a020 0x0000a020 0x000e8 0x000e8 RW  0x4
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0
  EXIDX          0x001c90 0x00009c90 0x00009c90 0x00058 0x00058 R   0x4

 Section to Segment mapping:
  Segment Sections...
   00     
   01     .interp 
   02     .interp .hash .dynsym .dynstr .rel.plt .rel.dyn .plt .text .rodata .ARM.exidx 
   03     .preinit_array .init_array .fini_array .ctors .dynamic .got .data .bss 
   04     .dynamic 
   05     
   06     .ARM.exidx 

Dynamic section at offset 0x2020 contains 29 entries:
  Tag        Type                         Name/Value
 0x00000003 (PLTGOT)                     0xa10c
 0x00000002 (PLTRELSZ)                   368 (bytes)
 0x00000017 (JMPREL)                     0x8ae4
 0x00000014 (PLTREL)                     REL
 0x00000011 (REL)                        0x8c54
 0x00000012 (RELSZ)                      8 (bytes)
 0x00000013 (RELENT)                     8 (bytes)
 0x00000015 (DEBUG)                      0x0
 0x00000006 (SYMTAB)                     0x82c4
 0x0000000b (SYMENT)                     16 (bytes)
 0x00000005 (STRTAB)                     0x86c4
 0x0000000a (STRSZ)                      1055 (bytes)
 0x00000004 (HASH)                       0x8128
 0x00000001 (NEEDED)                     Shared library: [liblog.so]
 0x00000001 (NEEDED)                     Shared library: [libsqlite.so]
 0x00000001 (NEEDED)                     Shared library: [libcutils.so]
 0x00000001 (NEEDED)                     Shared library: [libbinder.so]
 0x00000001 (NEEDED)                     Shared library: [libutils.so]
 0x00000001 (NEEDED)                     Shared library: [libc.so]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.so]
 0x00000001 (NEEDED)                     Shared library: [libm.so]
 0x00000020 (PREINIT_ARRAY)              0xa000
 0x00000021 (PREINIT_ARRAYSZ)            0x8
 0x00000019 (INIT_ARRAY)                 0xa008
 0x0000001b (INIT_ARRAYSZ)               8 (bytes)
 0x0000001a (FINI_ARRAY)                 0xa010
 0x0000001c (FINI_ARRAYSZ)               8 (bytes)
 0x0000001e (FLAGS)                      
 0x00000000 (NULL)                       0x0

Relocation section '.rel.plt' at offset 0xae4 contains 46 entries:
 Offset     Info    Type            Sym.Value  Sym. Name
0000a118  00003416 R_ARM_JUMP_SLOT   00000000   __libc_init
0000a11c  00002516 R_ARM_JUMP_SLOT   00000000   _ZNK7android7RefBase9d
0000a120  00001a16 R_ARM_JUMP_SLOT   00000000   memset
0000a124  00001f16 R_ARM_JUMP_SLOT   00000000   property_get
0000a128  00001b16 R_ARM_JUMP_SLOT   00000000   atoi
0000a12c  00003116 R_ARM_JUMP_SLOT   00000000   _ZN7android21defaultSe
0000a130  00002f16 R_ARM_JUMP_SLOT   00000000   _ZN7android8String16C1
0000a134  00002616 R_ARM_JUMP_SLOT   00000000   _ZN7android8String16D1
0000a138  00002a16 R_ARM_JUMP_SLOT   00000000   _ZN7android6ParcelC1Ev
0000a13c  00002d16 R_ARM_JUMP_SLOT   00000000   _ZN7android6Parcel19wr
0000a140  00002e16 R_ARM_JUMP_SLOT   00000000   _ZN7android6Parcel17wr
0000a144  00002716 R_ARM_JUMP_SLOT   00000000   _ZN7android6Parcel13wr
0000a148  00002916 R_ARM_JUMP_SLOT   00000000   _ZN7android6Parcel10wr
0000a14c  00003216 R_ARM_JUMP_SLOT   00000000   _ZN7android6Parcel13wr
0000a150  00003016 R_ARM_JUMP_SLOT   00000000   _ZNK7android6Parcel12d
0000a154  00002816 R_ARM_JUMP_SLOT   00000000   _ZNK7android6Parcel15s
0000a158  00002b16 R_ARM_JUMP_SLOT   00000000   _ZN7android6ParcelD1Ev
0000a15c  00000216 R_ARM_JUMP_SLOT   00000000   __stack_chk_fail
0000a160  00003e16 R_ARM_JUMP_SLOT   00000000   puts
0000a164  00003d16 R_ARM_JUMP_SLOT   00000000   putchar
0000a168  00003516 R_ARM_JUMP_SLOT   00000000   exit
0000a16c  00002016 R_ARM_JUMP_SLOT   00000000   socket
0000a170  00000a16 R_ARM_JUMP_SLOT   00000000   strcpy
0000a174  00003c16 R_ARM_JUMP_SLOT   00000000   mktemp
0000a178  00000516 R_ARM_JUMP_SLOT   00000000   snprintf
0000a17c  00001d16 R_ARM_JUMP_SLOT   00000000   unlink
0000a180  00002116 R_ARM_JUMP_SLOT   00000000   bind
0000a184  00000416 R_ARM_JUMP_SLOT   00000000   __errno
0000a188  00002216 R_ARM_JUMP_SLOT   00000000   listen
0000a18c  00002416 R_ARM_JUMP_SLOT   00000000   select
0000a190  00002316 R_ARM_JUMP_SLOT   00000000   accept
0000a194  00000616 R_ARM_JUMP_SLOT   00000000   strcmp
0000a198  00003816 R_ARM_JUMP_SLOT   00000000   execvp
0000a19c  00003916 R_ARM_JUMP_SLOT   00000000   execlp
0000a1a0  00000816 R_ARM_JUMP_SLOT   00000000   free
0000a1a4  00001c16 R_ARM_JUMP_SLOT   00000000   read
0000a1a8  00000b16 R_ARM_JUMP_SLOT   00000000   malloc
0000a1ac  00000716 R_ARM_JUMP_SLOT   00000000   memcpy
0000a1b0  00003716 R_ARM_JUMP_SLOT   00000000   setgid
0000a1b4  00003616 R_ARM_JUMP_SLOT   00000000   getppid
0000a1b8  00000916 R_ARM_JUMP_SLOT   00000000   sprintf
0000a1bc  00001e16 R_ARM_JUMP_SLOT   00000000   stat
0000a1c0  00003316 R_ARM_JUMP_SLOT   00000000   mkdir
0000a1c4  00003a16 R_ARM_JUMP_SLOT   00000000   setuid
0000a1c8  00003b16 R_ARM_JUMP_SLOT   00000000   bsd_signal
0000a1cc  00003f16 R_ARM_JUMP_SLOT   00000000   atexit

Relocation section '.rel.dyn' at offset 0xc54 contains 1 entries:
 Offset     Info    Type            Sym.Value  Sym. Name
0000a108  00000315 R_ARM_GLOB_DAT    00000000   __stack_chk_guard

Unwind table index '.ARM.exidx' at offset 0x1c90 contains 11 entries:

0x9a1c: 0x1 [cantunwind]

0x8ed0: 0x80a8b0b0
  Compact model index: 0
  0xa8      pop {r4, r14}
  0xb0      finish
  0xb0      finish

0x8eec: 0x80b0b0b0
  Compact model index: 0
  0xb0      finish
  0xb0      finish
  0xb0      finish

0x8ef4: 0x803eafb0
  Compact model index: 0
  0x3e      vsp = vsp + 252
  0xaf      pop {r4, r5, r6, r7, r8, r9, r10, r11, r14}
  0xb0      finish

0x9534: 0x80a8b0b0
  Compact model index: 0
  0xa8      pop {r4, r14}
  0xb0      finish
  0xb0      finish

0x958c: 0x801eafb0
  Compact model index: 0
  0x1e      vsp = vsp + 124
  0xaf      pop {r4, r5, r6, r7, r8, r9, r10, r11, r14}
  0xb0      finish

0x966c: 0x8023aab0
  Compact model index: 0
  0x23      vsp = vsp + 144
  0xaa      pop {r4, r5, r6, r14}
  0xb0      finish

0x96d0: 0x80aab0b0
  Compact model index: 0
  0xaa      pop {r4, r5, r6, r14}
  0xb0      finish
  0xb0      finish

0x9754: 0x80a8b0b0
  Compact model index: 0
  0xa8      pop {r4, r14}
  0xb0      finish
  0xb0      finish

0x97ac: 0x80aab0b0
  Compact model index: 0
  0xaa      pop {r4, r5, r6, r14}
  0xb0      finish
  0xb0      finish

0x97d8: 0x802c3fab
  Compact model index: 0
  0x2c      vsp = vsp + 180
  0x3f      vsp = vsp + 256
  0xab      pop {r4, r5, r6, r7, r14}


Symbol table '.dynsym' contains 64 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 00000000     0 FUNC    GLOBAL DEFAULT  UND __aeabi_unwind_cpp_pr0
     2: 00000000     0 FUNC    GLOBAL DEFAULT  UND __stack_chk_fail
     3: 00000000     0 OBJECT  GLOBAL DEFAULT  UND __stack_chk_guard
     4: 00000000     0 FUNC    GLOBAL DEFAULT  UND __errno
     5: 00000000     0 FUNC    GLOBAL DEFAULT  UND snprintf
     6: 00000000     0 FUNC    GLOBAL DEFAULT  UND strcmp
     7: 00000000     0 FUNC    GLOBAL DEFAULT  UND memcpy
     8: 00000000     0 FUNC    GLOBAL DEFAULT  UND free
     9: 00000000     0 FUNC    GLOBAL DEFAULT  UND sprintf
    10: 00000000     0 FUNC    GLOBAL DEFAULT  UND strcpy
    11: 00000000     0 FUNC    GLOBAL DEFAULT  UND malloc
    12: 0000a1e0     0 NOTYPE  GLOBAL DEFAULT   18 __dso_handle
    13: 0000a008     0 NOTYPE  GLOBAL DEFAULT   12 __INIT_ARRAY__
    14: 0000a010     0 NOTYPE  GLOBAL DEFAULT   13 __FINI_ARRAY__
    15: 00009c8d     0 NOTYPE  GLOBAL DEFAULT  ABS __exidx_start
    16: 00009ce8     0 NOTYPE  GLOBAL DEFAULT  ABS __exidx_end
    17: 0000a1d0     0 NOTYPE  GLOBAL DEFAULT   17 __data_start
    18: 0000a1dc     0 NOTYPE  GLOBAL DEFAULT  ABS _edata
    19: 0000a1dc     0 NOTYPE  GLOBAL DEFAULT  ABS __bss_start
    20: 0000a1dc     0 NOTYPE  GLOBAL DEFAULT  ABS __bss_start__
    21: 0000b200     0 NOTYPE  GLOBAL DEFAULT  ABS _bss_end__
    22: 0000b200     0 NOTYPE  GLOBAL DEFAULT  ABS __bss_end__
    23: 0000b200     0 NOTYPE  GLOBAL DEFAULT  ABS __end__
    24: 0000b200     0 NOTYPE  GLOBAL DEFAULT  ABS _end
    25: 00080000     0 NOTYPE  GLOBAL DEFAULT  ABS _stack
    26: 00000000     0 FUNC    GLOBAL DEFAULT  UND memset
    27: 00000000     0 FUNC    GLOBAL DEFAULT  UND atoi
    28: 00000000     0 FUNC    GLOBAL DEFAULT  UND read
    29: 00000000     0 FUNC    GLOBAL DEFAULT  UND unlink
    30: 00000000     0 FUNC    GLOBAL DEFAULT  UND stat
    31: 00000000     0 FUNC    GLOBAL DEFAULT  UND property_get
    32: 00000000     0 FUNC    GLOBAL DEFAULT  UND socket
    33: 00000000     0 FUNC    GLOBAL DEFAULT  UND bind
    34: 00000000     0 FUNC    GLOBAL DEFAULT  UND listen
    35: 00000000     0 FUNC    GLOBAL DEFAULT  UND accept
    36: 00000000     0 FUNC    GLOBAL DEFAULT  UND select
    37: 00000000     0 FUNC    GLOBAL DEFAULT  UND _ZNK7android7RefBase9decS
    38: 00000000     0 FUNC    GLOBAL DEFAULT  UND _ZN7android8String16D1Ev
    39: 00000000     0 FUNC    GLOBAL DEFAULT  UND _ZN7android6Parcel13write
    40: 00000000     0 FUNC    GLOBAL DEFAULT  UND _ZNK7android6Parcel15setD
    41: 00000000     0 FUNC    GLOBAL DEFAULT  UND _ZN7android6Parcel10write
    42: 00000000     0 FUNC    GLOBAL DEFAULT  UND _ZN7android6ParcelC1Ev
    43: 00000000     0 FUNC    GLOBAL DEFAULT  UND _ZN7android6ParcelD1Ev
    44: 00008ed1    26 FUNC    WEAK   DEFAULT    8 _ZN7android2spINS_7IBinde
    45: 00000000     0 FUNC    GLOBAL DEFAULT  UND _ZN7android6Parcel19write
    46: 00000000     0 FUNC    GLOBAL DEFAULT  UND _ZN7android6Parcel17write
    47: 00000000     0 FUNC    GLOBAL DEFAULT  UND _ZN7android8String16C1EPK
    48: 00000000     0 FUNC    GLOBAL DEFAULT  UND _ZNK7android6Parcel12data
    49: 00000000     0 FUNC    GLOBAL DEFAULT  UND _ZN7android21defaultServi
    50: 00000000     0 FUNC    GLOBAL DEFAULT  UND _ZN7android6Parcel13write
    51: 00000000     0 FUNC    GLOBAL DEFAULT  UND mkdir
    52: 00000000     0 FUNC    GLOBAL DEFAULT  UND __libc_init
    53: 00000000     0 FUNC    GLOBAL DEFAULT  UND exit
    54: 00000000     0 FUNC    GLOBAL DEFAULT  UND getppid
    55: 00000000     0 FUNC    GLOBAL DEFAULT  UND setgid
    56: 00000000     0 FUNC    GLOBAL DEFAULT  UND execvp
    57: 00000000     0 FUNC    GLOBAL DEFAULT  UND execlp
    58: 00000000     0 FUNC    GLOBAL DEFAULT  UND setuid
    59: 00000000     0 FUNC    GLOBAL DEFAULT  UND bsd_signal
    60: 00000000     0 FUNC    GLOBAL DEFAULT  UND mktemp
    61: 00000000     0 FUNC    GLOBAL DEFAULT  UND putchar
    62: 00000000     0 FUNC    GLOBAL DEFAULT  UND puts
    63: 00000000     0 FUNC    GLOBAL DEFAULT  UND atexit

Histogram for bucket list length (total of 37 buckets):
 Length  Number     % of total  Coverage
      0  6          ( 16.2%)
      1  13         ( 35.1%)     20.6%
      2  8          ( 21.6%)     46.0%
      3  6          ( 16.2%)     74.6%
      4  4          ( 10.8%)    100.0%

No version information found in this file.

Displaying notes found at file offset 0x000021e0 with length 0x00000018:
  Owner                 Data size   Description
  GNU                  0x00000008   NT_GNU_GOLD_VERSION (gold version)
Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "ARM v7"
  Tag_CPU_arch: v7
  Tag_CPU_arch_profile: Application
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-2
  Tag_FP_arch: VFPv3
  Tag_Advanced_SIMD_arch: NEONv1
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_enum_size: int
  Tag_ABI_HardFP_use: SP and DP

The thing about assembly is that it's a lot easier to read than it is to write. It's even easier when one focuses on reverse-engineering a small body of code! For that sort of job, the only thing one really needs is a passing familiarity with basic instructions (shifting values between registers, basic arithmetic and comparisons), memory access (reading and writing to memory, as opposed to the registers) and knowledge of how argument and return value passing work. The ARM documentation is pretty good for all of that and it's quite readable as well.

One thing I learned the hard way is that when an instruction references the program counter register pc, its value is that of the next instruction's offset, ie. the current instruction plus an offset of 2 bytes if running in Thumb mode or 4 bytes if running in ARM mode.

Disassembly

This is where the fun really begins. I want to get superuser privileges out of this binary. Just running su from an unprivileged interactive shell does not yield this result so I'm assuming that I need to do something else, possibly by means of a socket to trigger privilege escalation.

$ id
id
uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),1007(log),1009(mount),1011(adb),10
15(sdcard_rw),3001(net_bt_admin),3002(net_bt),3003(inet)

$ su
su

$ id
id
uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),1007(log),1009(mount),1011(adb),10
15(sdcard_rw),3001(net_bt_admin),3002(net_bt),3003(inet)

$ su -h
su -h
Usage: su [options]
Options:
  -c,--command cmd  run cmd.
  -h,--help         help

Author:huyanwei
Email:srclib@hotmail.com

$

I used objdump -Csd to dump all sections of the su executable and disassemble the .text section into human-readable ARM assembly in one go:

./su:     file format elf32-littlearm

Contents of section .interp:
 8114 2f737973 74656d2f 62696e2f 6c696e6b  /system/bin/link
 8124 657200                               er.             
Contents of section .hash:
 8128 25000000 40000000 17000000 32000000  %...@.......2...
 8138 31000000 33000000 01000000 00000000  1...3...........
 8148 28000000 2d000000 2b000000 3b000000  (...-...+...;...
 8158 3a000000 03000000 36000000 00000000  :.......6.......
 8168 15000000 37000000 00000000 26000000  ....7.......&...
 8178 3e000000 3f000000 2e000000 1c000000  >...?...........
 8188 34000000 2c000000 2f000000 00000000  4...,.../.......
 8198 00000000 3c000000 3d000000 35000000  ....<...=...5...
 81a8 02000000 18000000 1a000000 00000000  ................
 81b8 2a000000 39000000 0c000000 00000000  *...9...........
 81c8 00000000 00000000 00000000 00000000  ................
 81d8 00000000 00000000 00000000 00000000  ................
 81e8 00000000 00000000 00000000 00000000  ................
 81f8 00000000 00000000 00000000 0b000000  ................
 8208 00000000 00000000 00000000 08000000  ................
 8218 00000000 14000000 11000000 16000000  ................
 8228 07000000 00000000 04000000 0a000000  ................
 8238 13000000 12000000 00000000 00000000  ................
 8248 10000000 00000000 00000000 05000000  ................
 8258 1d000000 00000000 22000000 00000000  ........".......
 8268 0d000000 27000000 00000000 21000000  ....'.......!...
 8278 00000000 23000000 0f000000 24000000  ....#.......$...
 8288 19000000 06000000 00000000 1b000000  ................
 8298 30000000 0e000000 00000000 20000000  0........... ...
 82a8 25000000 38000000 00000000 29000000  %...8.......)...
 82b8 1f000000 1e000000 09000000           ............    
Contents of section .dynsym:
 82c4 00000000 00000000 00000000 00000000  ................
 82d4 01000000 00000000 00000000 12000000  ................
 82e4 18000000 00000000 00000000 12000000  ................
 82f4 29000000 00000000 00000000 11000000  )...............
 8304 3b000000 00000000 00000000 12000000  ;...............
 8314 43000000 00000000 00000000 12000000  C...............
 8324 4c000000 00000000 00000000 12000000  L...............
 8334 53000000 00000000 00000000 12000000  S...............
 8344 5a000000 00000000 00000000 12000000  Z...............
 8354 5f000000 00000000 00000000 12000000  _...............
 8364 67000000 00000000 00000000 12000000  g...............
 8374 6e000000 00000000 00000000 12000000  n...............
 8384 75000000 e0a10000 00000000 10001200  u...............
 8394 82000000 08a00000 00000000 10000c00  ................
 83a4 91000000 10a00000 00000000 10000d00  ................
 83b4 a0000000 8d9c0000 00000000 1000f1ff  ................
 83c4 ae000000 e89c0000 00000000 1000f1ff  ................
 83d4 ba000000 d0a10000 00000000 10001100  ................
 83e4 c7000000 dca10000 00000000 1000f1ff  ................
 83f4 ce000000 dca10000 00000000 1000f1ff  ................
 8404 da000000 dca10000 00000000 1000f1ff  ................
 8414 e8000000 00b20000 00000000 1000f1ff  ................
 8424 f3000000 00b20000 00000000 1000f1ff  ................
 8434 ff000000 00b20000 00000000 1000f1ff  ................
 8444 07010000 00b20000 00000000 1000f1ff  ................
 8454 0c010000 00000800 00000000 1000f1ff  ................
 8464 13010000 00000000 00000000 12000000  ................
 8474 1a010000 00000000 00000000 12000000  ................
 8484 1f010000 00000000 00000000 12000000  ................
 8494 24010000 00000000 00000000 12000000  $...............
 84a4 2b010000 00000000 00000000 12000000  +...............
 84b4 30010000 00000000 00000000 12000000  0...............
 84c4 3d010000 00000000 00000000 12000000  =...............
 84d4 44010000 00000000 00000000 12000000  D...............
 84e4 49010000 00000000 00000000 12000000  I...............
 84f4 50010000 00000000 00000000 12000000  P...............
 8504 57010000 00000000 00000000 12000000  W...............
 8514 5e010000 00000000 00000000 12000000  ^...............
 8524 81010000 00000000 00000000 12000000  ................
 8534 9a010000 00000000 00000000 12000000  ................
 8544 cc010000 00000000 00000000 12000000  ................
 8554 f3010000 00000000 00000000 12000000  ................
 8564 14020000 00000000 00000000 12000000  ................
 8574 2b020000 00000000 00000000 12000000  +...............
 8584 42020000 d18e0000 1a000000 22000800  B..........."...
 8594 63020000 00000000 00000000 12000000  c...............
 85a4 9b020000 00000000 00000000 12000000  ................
 85b4 d9020000 00000000 00000000 12000000  ................
 85c4 f4020000 00000000 00000000 12000000  ................
 85d4 18030000 00000000 00000000 12000000  ................
 85e4 3d030000 00000000 00000000 12000000  =...............
 85f4 64030000 00000000 00000000 12000000  d...............
 8604 6a030000 00000000 00000000 12000000  j...............
 8614 76030000 00000000 00000000 12000000  v...............
 8624 7b030000 00000000 00000000 12000000  {...............
 8634 83030000 00000000 00000000 12000000  ................
 8644 8a030000 00000000 00000000 12000000  ................
 8654 91030000 00000000 00000000 12000000  ................
 8664 98030000 00000000 00000000 12000000  ................
 8674 9f030000 00000000 00000000 12000000  ................
 8684 aa030000 00000000 00000000 12000000  ................
 8694 b1030000 00000000 00000000 12000000  ................
 86a4 b9030000 00000000 00000000 12000000  ................
 86b4 be030000 00000000 00000000 12000000  ................
Contents of section .dynstr:
 86c4 005f5f61 65616269 5f756e77 696e645f  .__aeabi_unwind_
 86d4 6370705f 70723000 5f5f7374 61636b5f  cpp_pr0.__stack_
 86e4 63686b5f 6661696c 005f5f73 7461636b  chk_fail.__stack
 86f4 5f63686b 5f677561 7264005f 5f657272  _chk_guard.__err
 8704 6e6f0073 6e707269 6e746600 73747263  no.snprintf.strc
 8714 6d70006d 656d6370 79006672 65650073  mp.memcpy.free.s
 8724 7072696e 74660073 74726370 79006d61  printf.strcpy.ma
 8734 6c6c6f63 005f5f64 736f5f68 616e646c  lloc.__dso_handl
 8744 65005f5f 494e4954 5f415252 41595f5f  e.__INIT_ARRAY__
 8754 005f5f46 494e495f 41525241 595f5f00  .__FINI_ARRAY__.
 8764 5f5f6578 6964785f 73746172 74005f5f  __exidx_start.__
 8774 65786964 785f656e 64005f5f 64617461  exidx_end.__data
 8784 5f737461 7274005f 65646174 61005f5f  _start._edata.__
 8794 6273735f 73746172 74005f5f 6273735f  bss_start.__bss_
 87a4 73746172 745f5f00 5f627373 5f656e64  start__._bss_end
 87b4 5f5f005f 5f627373 5f656e64 5f5f005f  __.__bss_end__._
 87c4 5f656e64 5f5f005f 656e6400 5f737461  _end__._end._sta
 87d4 636b006d 656d7365 74006174 6f690072  ck.memset.atoi.r
 87e4 65616400 756e6c69 6e6b0073 74617400  ead.unlink.stat.
 87f4 70726f70 65727479 5f676574 00736f63  property_get.soc
 8804 6b657400 62696e64 006c6973 74656e00  ket.bind.listen.
 8814 61636365 70740073 656c6563 74005f5a  accept.select._Z
 8824 4e4b3761 6e64726f 69643752 65664261  NK7android7RefBa
 8834 73653964 65635374 726f6e67 45504b76  se9decStrongEPKv
 8844 005f5a4e 37616e64 726f6964 38537472  ._ZN7android8Str
 8854 696e6731 36443145 76005f5a 4e37616e  ing16D1Ev._ZN7an
 8864 64726f69 64365061 7263656c 31337772  droid6Parcel13wr
 8874 69746553 7472696e 67313645 524b4e53  iteString16ERKNS
 8884 5f385374 72696e67 31364500 5f5a4e4b  _8String16E._ZNK
 8894 37616e64 726f6964 36506172 63656c31  7android6Parcel1
 88a4 35736574 44617461 506f7369 74696f6e  5setDataPosition
 88b4 456a005f 5a4e3761 6e64726f 69643650  Ej._ZN7android6P
 88c4 61726365 6c313077 72697465 496e7433  arcel10writeInt3
 88d4 32456900 5f5a4e37 616e6472 6f696436  2Ei._ZN7android6
 88e4 50617263 656c4331 4576005f 5a4e3761  ParcelC1Ev._ZN7a
 88f4 6e64726f 69643650 61726365 6c443145  ndroid6ParcelD1E
 8904 76005f5a 4e37616e 64726f69 64327370  v._ZN7android2sp
 8914 494e535f 37494269 6e646572 45454431  INS_7IBinderEED1
 8924 4576005f 5a4e3761 6e64726f 69643650  Ev._ZN7android6P
 8934 61726365 6c313977 72697465 496e7465  arcel19writeInte
 8944 72666163 65546f6b 656e4552 4b4e535f  rfaceTokenERKNS_
 8954 38537472 696e6731 3645005f 5a4e3761  8String16E._ZN7a
 8964 6e64726f 69643650 61726365 6c313777  ndroid6Parcel17w
 8974 72697465 5374726f 6e674269 6e646572  riteStrongBinder
 8984 45524b4e 535f3273 70494e53 5f374942  ERKNS_2spINS_7IB
 8994 696e6465 72454545 005f5a4e 37616e64  inderEEE._ZN7and
 89a4 726f6964 38537472 696e6731 36433145  roid8String16C1E
 89b4 504b6300 5f5a4e4b 37616e64 726f6964  PKc._ZNK7android
 89c4 36506172 63656c31 32646174 61506f73  6Parcel12dataPos
 89d4 6974696f 6e457600 5f5a4e37 616e6472  itionEv._ZN7andr
 89e4 6f696432 31646566 61756c74 53657276  oid21defaultServ
 89f4 6963654d 616e6167 65724576 005f5a4e  iceManagerEv._ZN
 8a04 37616e64 726f6964 36506172 63656c31  7android6Parcel1
 8a14 33777269 74655374 72696e67 31364550  3writeString16EP
 8a24 4b746a00 6d6b6469 72005f5f 6c696263  Ktj.mkdir.__libc
 8a34 5f696e69 74006578 69740067 65747070  _init.exit.getpp
 8a44 69640073 65746769 64006578 65637670  id.setgid.execvp
 8a54 00657865 636c7000 73657475 69640062  .execlp.setuid.b
 8a64 73645f73 69676e61 6c006d6b 74656d70  sd_signal.mktemp
 8a74 00707574 63686172 00707574 73006174  .putchar.puts.at
 8a84 65786974 006c6962 6c6f672e 736f006c  exit.liblog.so.l
 8a94 69627371 6c697465 2e736f00 6c696263  ibsqlite.so.libc
 8aa4 7574696c 732e736f 006c6962 62696e64  utils.so.libbind
 8ab4 65722e73 6f006c69 62757469 6c732e73  er.so.libutils.s
 8ac4 6f006c69 62632e73 6f006c69 62737464  o.libc.so.libstd
 8ad4 632b2b2e 736f006c 69626d2e 736f00    c++.so.libm.so. 
Contents of section .rel.plt:
 8ae4 18a10000 16340000 1ca10000 16250000  .....4.......%..
 8af4 20a10000 161a0000 24a10000 161f0000   .......$.......
 8b04 28a10000 161b0000 2ca10000 16310000  (.......,....1..
 8b14 30a10000 162f0000 34a10000 16260000  0..../..4....&..
 8b24 38a10000 162a0000 3ca10000 162d0000  8....*..<....-..
 8b34 40a10000 162e0000 44a10000 16270000  @.......D....'..
 8b44 48a10000 16290000 4ca10000 16320000  H....)..L....2..
 8b54 50a10000 16300000 54a10000 16280000  P....0..T....(..
 8b64 58a10000 162b0000 5ca10000 16020000  X....+..\.......
 8b74 60a10000 163e0000 64a10000 163d0000  `....>..d....=..
 8b84 68a10000 16350000 6ca10000 16200000  h....5..l.... ..
 8b94 70a10000 160a0000 74a10000 163c0000  p.......t....<..
 8ba4 78a10000 16050000 7ca10000 161d0000  x.......|.......
 8bb4 80a10000 16210000 84a10000 16040000  .....!..........
 8bc4 88a10000 16220000 8ca10000 16240000  .....".......$..
 8bd4 90a10000 16230000 94a10000 16060000  .....#..........
 8be4 98a10000 16380000 9ca10000 16390000  .....8.......9..
 8bf4 a0a10000 16080000 a4a10000 161c0000  ................
 8c04 a8a10000 160b0000 aca10000 16070000  ................
 8c14 b0a10000 16370000 b4a10000 16360000  .....7.......6..
 8c24 b8a10000 16090000 bca10000 161e0000  ................
 8c34 c0a10000 16330000 c4a10000 163a0000  .....3.......:..
 8c44 c8a10000 163b0000 cca10000 163f0000  .....;.......?..
Contents of section .rel.dyn:
 8c54 08a10000 15030000                    ........        
Contents of section .plt:
 8c5c 04e02de5 04e09fe5 0ee08fe0 08f0bee5  ..-.............
 8c6c a0140000 00c68fe2 01ca8ce2 a0f4bce5  ................
 8c7c 00c68fe2 01ca8ce2 98f4bce5 00c68fe2  ................
 8c8c 01ca8ce2 90f4bce5 00c68fe2 01ca8ce2  ................
 8c9c 88f4bce5 00c68fe2 01ca8ce2 80f4bce5  ................
 8cac 00c68fe2 01ca8ce2 78f4bce5 00c68fe2  ........x.......
 8cbc 01ca8ce2 70f4bce5 00c68fe2 01ca8ce2  ....p...........
 8ccc 68f4bce5 00c68fe2 01ca8ce2 60f4bce5  h...........`...
 8cdc 00c68fe2 01ca8ce2 58f4bce5 00c68fe2  ........X.......
 8cec 01ca8ce2 50f4bce5 00c68fe2 01ca8ce2  ....P...........
 8cfc 48f4bce5 00c68fe2 01ca8ce2 40f4bce5  H...........@...
 8d0c 00c68fe2 01ca8ce2 38f4bce5 00c68fe2  ........8.......
 8d1c 01ca8ce2 30f4bce5 00c68fe2 01ca8ce2  ....0...........
 8d2c 28f4bce5 00c68fe2 01ca8ce2 20f4bce5  (........... ...
 8d3c 00c68fe2 01ca8ce2 18f4bce5 00c68fe2  ................
 8d4c 01ca8ce2 10f4bce5 00c68fe2 01ca8ce2  ................
 8d5c 08f4bce5 00c68fe2 01ca8ce2 00f4bce5  ................
 8d6c 00c68fe2 01ca8ce2 f8f3bce5 00c68fe2  ................
 8d7c 01ca8ce2 f0f3bce5 00c68fe2 01ca8ce2  ................
 8d8c e8f3bce5 00c68fe2 01ca8ce2 e0f3bce5  ................
 8d9c 00c68fe2 01ca8ce2 d8f3bce5 00c68fe2  ................
 8dac 01ca8ce2 d0f3bce5 00c68fe2 01ca8ce2  ................
 8dbc c8f3bce5 00c68fe2 01ca8ce2 c0f3bce5  ................
 8dcc 00c68fe2 01ca8ce2 b8f3bce5 00c68fe2  ................
 8ddc 01ca8ce2 b0f3bce5 00c68fe2 01ca8ce2  ................
 8dec a8f3bce5 00c68fe2 01ca8ce2 a0f3bce5  ................
 8dfc 00c68fe2 01ca8ce2 98f3bce5 00c68fe2  ................
 8e0c 01ca8ce2 90f3bce5 00c68fe2 01ca8ce2  ................
 8e1c 88f3bce5 00c68fe2 01ca8ce2 80f3bce5  ................
 8e2c 00c68fe2 01ca8ce2 78f3bce5 00c68fe2  ........x.......
 8e3c 01ca8ce2 70f3bce5 00c68fe2 01ca8ce2  ....p...........
 8e4c 68f3bce5 00c68fe2 01ca8ce2 60f3bce5  h...........`...
 8e5c 00c68fe2 01ca8ce2 58f3bce5 00c68fe2  ........X.......
 8e6c 01ca8ce2 50f3bce5 00c68fe2 01ca8ce2  ....P...........
 8e7c 48f3bce5 00c68fe2 01ca8ce2 40f3bce5  H...........@...
 8e8c 00c68fe2 01ca8ce2 38f3bce5           ........8...    
Contents of section .text:
 8ea0 0d00a0e1 0010a0e3 04208fe2 04308fe2  ......... ...0..
 8eb0 6effffea d80200ea 00a00000 08a00000  n...............
 8ec0 10a00000 18a00000 0000a0e1 0000a0e1  ................
 8ed0 10b50446 036833b1 1a682146 52f80c0c  ...F.h3..h!FR...
 8ee0 1818fff7 ccee2046 10bd00bf 00230360  ...... F.....#.`
 8ef0 704700bf 2de9f04f dff8f092 bfb0bc4d  pG..-..O.......M
 8f00 80467d44 0f4655f8 09603021 92462691  .F}D.FU..`0!.F&.
 8f10 32680021 3d9227a8 5822fff7 b6ee26ac  2h.!=.'.X"....&.
 8f20 b4482146 7844b44a 7a4423ae fff7b2ee  .H!FxD.JzD#.....
 8f30 2046fff7 b6ee0446 25a8fff7 b8eeddf8   F.....F%.......
 8f40 94b0ae49 dbf80000 7944d0f8 14903046  ...I....yD....0F
 8f50 fff7b2ee 24a85946 3246c847 3046fff7  ....$.YF2F.G0F..
 8f60 b2ee249b 13b94ff0 ff3722e1 0eae3046  ..$...O..7"...0F
 8f70 fff7aeee 02a8fff7 acee0df1 8809a049  ...............I
 8f80 48467944 fff798ee 49463046 fff7a6ee  HFyD....IF0F....
 8f90 4846fff7 98ee0df1 84094846 fff7a6ff  HF........HF....
 8fa0 49463046 fff7a0ee 4846fff7 91ff0df1  IF0F....HF......
 8fb0 80099449 48467944 fff77eee 49463046  ...IHFyD..~.IF0F
 8fc0 fff798ee 4846fff7 7eee0021 3046fff7  ....HF..~..!0F..
 8fd0 98ee0021 30460a46 fff798ee 00213046  ...!0F.F.....!0F
 8fe0 fff78eee 032c04dd 00213046 0a46fff7  .....,...!0F.F..
 8ff0 8eee0021 0eae0a46 3046fff7 88ee0021  ...!...F0F.....!
 9000 3046fff7 7eee062c 09dd0021 3046fff7  0F..~..,...!0F..
 9010 78ee0e2c 03dd3046 0021fff7 72ee0eac  x..,..0F.!..r...
 9020 4ff0ff31 20461fae fff76aee 2046fff7  O..1 F....j. F..
 9030 74ee6d49 81462046 fff762ee 07212046  t.mI.F F..b..! F
 9040 fff75eee 00212046 fff75aee 30466e49  ..^..! F..Z.0FnI
 9050 7944fff7 32ee3146 2046fff7 4cee3046  yD..2.1F F..L.0F
 9060 fff730ee 00212046 1eaefff7 4aee3046  ..0..! F....J.0F
 9070 4146fff7 22ee3146 2046fff7 3cee3046  AF..".1F F..<.0F
 9080 fff720ee 00212046 1daefff7 3aee3046  .. ..! F....:.0F
 9090 5e497944 fff710ee 31462046 fff72aee  ^IyD....1F F..*.
 90a0 3046fff7 10ee0121 2046fff7 2aee3946  0F.....! F..*.9F
 90b0 20461caf fff724ee 00212046 fff720ee   F....$..! F.. .
 90c0 38465349 7944fff7 f8ed3946 2046fff7  8FSIyD....9F F..
 90d0 12ee3846 fff7f6ed 01212046 1baffff7  ..8F.....! F....
 90e0 10ee5146 2046fff7 0cee2046 fff714ee  ..QF F.... F....
 90f0 a9f10401 06462046 fff714ee c9eb0601  .....F F........
 9100 2046fff7 feed3146 20461aae fff70aee   F....1F F......
 9110 00212046 0a46fff7 faed4ff0 ff312046  .! F.F....O..1 F
 9120 fff7eeed 3846fff7 e1fe3946 2046fff7  ....8F....9F F..
 9130 dced3846 fff7ccfe 4ff0ff31 2046fff7  ..8F....O..1 F..
 9140 e0ed0021 20460a46 fff7e0ed 4ff0ff31  ...! F.F....O..1
 9150 2046fff7 d6ed3046 2e497944 fff7aced   F....0F.IyD....
 9160 31462046 fff7c6ed 3046fff7 aced0021  1F F....0F.....!
 9170 204602ae fff7c4ed 00212046 fff7c0ed   F.......! F....
 9180 4ff0ff31 2046fff7 bced2498 00210368  O..1 F....$..!.h
 9190 22460091 0e215f69 3346b847 0028b4bf  "F...!_i3F.G.(..
 91a0 4ff0ff37 00273046 fff7c2ed 2046fff7  O..7.'0F.... F..
 91b0 c0ed24a8 fff78cfe 259b33b1 1a6825a9  ..$.....%.3..h%.
 91c0 52f80c0c 1818fff7 5aed3d99 dff81cc0  R.......Z.=.....
 91d0 384655f8 0c201368 994201d0 fff7aeed  8FU.. .h.B......
 91e0 3fb0bde8 f08f00bf 424e444c fcffffff  ?.......BNDL....
 91f0 06120000 fc0a0000 0d0b0000 ef0a0000  ................
 9200 be0a0000 a70a0000 350a0000 ff090000  ........5.......
 9210 d1090000 3f090000 2de9f04f dff8e892  ....?...-..O....
 9220 bfb0ba4d 80467d44 0f4655f8 09603021  ...M.F}D.FU..`0!
 9230 92462691 32680021 3d9227a8 5822fff7  .F&.2h.!=.'.X"..
 9240 24ed26ac b2482146 7844b24a 7a4423ae  $.&..H!FxD.JzD#.
 9250 fff720ed 2046fff7 24ed0446 25a8fff7  .. . F..$..F%...
 9260 26edddf8 94b0ac49 dbf80000 7944d0f8  &......I....yD..
 9270 14903046 fff720ed 24a85946 3246c847  ..0F.. .$.YF2F.G
 9280 3046fff7 20ed249b 13b94ff0 ff371fe1  0F.. .$...O..7..
 9290 0fae3046 fff71ced 03a8fff7 1aed0df1  ..0F............
 92a0 88099e49 48467944 fff706ed 49463046  ...IHFyD....IF0F
 92b0 fff714ed 4846fff7 06ed0df1 84094846  ....HF........HF
 92c0 fff714fe 49463046 fff70eed 4846fff7  ....IF0F....HF..
 92d0 fffd0df1 80099249 48467944 fff7ecec  .......IHFyD....
 92e0 49463046 fff706ed 4846fff7 ecec0021  IF0F....HF.....!
 92f0 3046fff7 06ed0021 30460a46 fff706ed  0F.....!0F.F....
 9300 00213046 fff7fcec 032c04dd 00213046  .!0F.....,...!0F
 9310 0a46fff7 fcec0021 0fae0a46 3046fff7  .F.....!...F0F..
 9320 f6ec0021 3046fff7 ecec062c 09dd0021  ...!0F.....,...!
 9330 3046fff7 e6ec0e2c 03dd3046 0021fff7  0F.....,..0F.!..
 9340 e0ec0fac 4ff0ff31 20461fae fff7d8ec  ....O..1 F......
 9350 2046fff7 e2ec6b49 81462046 fff7d0ec   F....kI.F F....
 9360 07212046 fff7ccec 00212046 fff7c8ec  .! F.....! F....
 9370 30466c49 7944fff7 a0ec3146 2046fff7  0FlIyD....1F F..
 9380 baec3046 fff79eec 01212046 1eaefff7  ..0F.....! F....
 9390 b8ec4146 2046fff7 b4ec0021 2046fff7  ..AF F.....! F..
 93a0 b0ec3046 60497944 fff786ec 31462046  ..0F`IyD....1F F
 93b0 fff7a0ec 3046fff7 86ec0121 2046fff7  ....0F.....! F..
 93c0 a0ec3946 20461daf fff79aec 00212046  ..9F F.......! F
 93d0 fff796ec 38465549 7944fff7 6eec3946  ....8FUIyD..n.9F
 93e0 2046fff7 88ec3846 fff76cec 01212046   F....8F..l..! F
 93f0 1caffff7 86ec5146 2046fff7 82ec2046  ......QF F.... F
 9400 fff78aec a9f10401 06462046 fff78aec  .........F F....
 9410 c9eb0601 2046fff7 74ec3146 20461bae  .... F..t.1F F..
 9420 fff780ec 00212046 0a46fff7 70ec4ff0  .....! F.F..p.O.
 9430 ff312046 fff764ec 3846fff7 57fd3946  .1 F..d.8F..W.9F
 9440 2046fff7 52ec3846 fff742fd 4ff0ff31   F..R.8F..B.O..1
 9450 2046fff7 56ec0021 20460a46 fff756ec   F..V..! F.F..V.
 9460 4ff0ff31 2046fff7 4cec3046 30497944  O..1 F..L.0F0IyD
 9470 fff722ec 31462046 fff73cec 3046fff7  ..".1F F..<.0F..
 9480 22ec0021 20460a46 fff740ec 00212046  "..! F.F..@..! F
 9490 03aefff7 36ec0021 2046fff7 32ec4ff0  ....6..! F..2.O.
 94a0 ff312046 fff72cec 24980021 03682246  .1 F..,.$..!.h"F
 94b0 00910e21 5f693346 b8470028 b4bf4ff0  ...!_i3F.G.(..O.
 94c0 ff370027 3046fff7 34ec2046 fff730ec  .7.'0F..4. F..0.
 94d0 24a8fff7 fdfc259b 33b11a68 25a952f8  $.....%.3..h%.R.
 94e0 0c0c1818 fff7caeb 3d99dff8 1cc03846  ........=.....8F
 94f0 55f80c20 13689942 01d0fff7 20ec3fb0  U.. .h.B.... .?.
 9500 bde8f08f 424e444c fcffffff e20e0000  ....BNDL........
 9510 d8070000 e9070000 cb070000 9a070000  ................
 9520 e9070000 78070000 eb060000 bd060000  ....x...........
 9530 2b060000 10b50f48 7844fff7 06ec0e48  +......HxD.....H
 9540 7844fff7 02ec0d48 7844fff7 feeb0c48  xD.....HxD.....H
 9550 7844fff7 faeb0a20 fff7fceb 09487844  xD..... .....HxD
 9560 fff7f2eb 08487844 fff7eeeb 0020fff7  .....HxD..... ..
 9570 f8eb00bf c1050000 cd050000 ce050000  ................
 9580 e3050000 ee050000 f6050000 2de9f04f  ............-..O
 9590 30499fb0 0022304d 7d446858 03680120  0I..."0M}DhX.h. 
 95a0 01461d93 fff7e2eb 04460028 b8bf4ff0  .F.......F.(..O.
 95b0 ff3440db 0df10409 284fdff8 a480294e  .4@.....(O....)N
 95c0 dff8a4a0 7f44f844 7e4409f1 020bfa44  .....D.D~D.....D
 95d0 00216e22 4846fff7 58eb4146 38464ff0  .!n"HF..X.AF8FO.
 95e0 0102adf8 0420fff7 c8eb3846 fff7caeb  ..... ....8F....
 95f0 6c210346 524646f8 f80c5846 fff7c8eb  l!.FRFF...XF....
 9600 56f8f80c fff7caeb 6e222046 4946fff7  V.......n" FIF..
 9610 cceb0028 07dafff7 ceeb0368 622bd7d0  ...(.......hb+..
 9620 6ff00104 07e02046 0121fff7 caeb0028  o..... F.!.....(
 9630 b8bf6ff0 02041d99 dff818c0 204655f8  ..o......... FU.
 9640 0c301a68 914201d0 fff778eb 1fb0bde8  .0.h.B....x.....
 9650 f08f00bf fcffffff 700b0000 280c0000  ........p...(...
 9660 af050000 1c1d0000 e8050000 70b58022  ............p.."
 9670 a4b00546 1e2402ae 22943046 00242146  ...F.$..".0F.$!F
 9680 2394fff7 02eb6b11 01210df1 900c05f0  #.....k..!......
 9690 1f020ceb 830011fa 02f222ab 50f8881c  ..........".P...
 96a0 0a433146 40f8882c 681c0093 22462346  .C1F@..,h..."F#F
 96b0 fff78ceb a04206dd 28462146 2246fff7  .....B..(F!F"F..
 96c0 8ceba042 01da4ff0 ff3024b0 70bd00bf  ...B..O..0$.p...
 96d0 70b50020 184b7b44 5a681968 fff79cfd  p.. .K{DZh.h....
 96e0 164b7b44 53f8f42c 022a1bdd 53f8f04c  .K{DS..,.*..S..L
 96f0 13496568 79442846 fff774eb 28b11149  .IehyD(F..t.(..I
 9700 28467944 fff76eeb 60b904f1 0801a068  (FyD..n.`......h
 9710 fff76eeb 00280cda 0b487844 fff714eb  ..n..(...HxD....
 9720 012007e0 09480a49 78447944 0022fff7  . ...H.IxDyD."..
 9730 66eb0020 70bd00bf f60a0000 021c0000  f.. p...........
 9740 c5040000 ba040000 ac040000 b4040000  ................
 9750 c1040000 10b5054b 4ff0ff30 7b441968  .......KO..0{D.h
 9760 5a68fff7 59fd0120 10bd00bf 700a0000  Zh..Y.. ....p...
 9770 10b5074c 7c4454f8 f80cfff7 10eb54f8  ...L|DT.......T.
 9780 f00c20b1 fff740eb 002344f8 f03c10bd  .. ...@..#D..<..
 9790 701b0000 10b5fff7 ebff10bd 10b50446  p..............F
 97a0 fff7e6ff 2046fff7 dcea00bf 70b50546  .... F......p..F
 97b0 0c462846 fff75aff 00280adb 3f222146  .F(F..Z..(..?"!F
 97c0 fff728eb 002804db f3d00023 23541846  ..(..(.....##T.F
 97d0 01e04ff0 ff3070bd f0b50646 edb07a4d  ..O..0p....F..zM
 97e0 0f467d44 79496858 022e0368 6b930ed1  .F}DyIhX...hk...
 97f0 7c687749 20467944 fff7f4ea 28b17549  |hwI FyD....(.uI
 9800 20467944 fff7eeea 08b9fff7 93fe721c   FyD..........r.
 9810 714c9000 7c4444f8 f46cfff7 02eb44f8  qL..|DD..l....D.
 9820 f00c88b1 54f8f42c 511c8a00 0021fff7  ....T..,Q....!..
 9830 2cea54f8 f43c54f8 f00c9a00 3946fff7  ,.T..<T.....9F..
 9840 f6ea012e 03dc12e0 44f8f40c abe06349  ........D.....cI
 9850 78687944 fff7c6ea 064640b9 60487844  xhyD.....F@.`HxD
 9860 fff772ea 3046fff7 e8ea58b3 2de0fff7  ..r.0F....X.-...
 9870 eaea1bae 00214ff4 80725a4c 7c446060  .....!O..rZL|D``
 9880 3046fff7 02ea6268 30465749 79446f46  0F....bh0FWIyDoF
 9890 fff7deea 30466946 fff7e0ea 4022069e  ....0FiF....@"..
 98a0 00212660 5bae3046 fff7eee9 4ff4fc71  .!&`[.0F....O..q
 98b0 4e487844 fff7d8ea fff768fe a0600028  NHxD......h..`.(
 98c0 33da2de0 fff7d6ea 10b14948 78441be0  3.-.......IHxD..
 98d0 54f8f40c 03281add 54f8f04c 4549a668  T....(..T..LEI.h
 98e0 79443046 fff77eea 28b14349 30467944  yD0F..~.(.CI0FyD
 98f0 fff778ea 58b904f1 0c01e068 fff778ea  ..x.X......h..x.
 9900 002853da 3d487844 fff71eea 06e03c48  .(S.=HxD......<H
 9910 3c497844 79440022 fff770ea 012046e0  <IxDyD."..p.. F.
 9920 fff718ff 4ff0ff30 41e06268 2168364f  ....O..0A.bh!h6O
 9930 7f4457f8 f80c354d fff7dcfa 7d440120  .DW...5M....}D. 
 9940 2946fff7 9eea0d20 2946fff7 9aea0f20  )F..... )F..... 
 9950 2946fff7 96ea2946 0620fff7 92ea2c48  )F....)F. ....,H
 9960 7844fff7 94eaa068 3146fff7 1fff0028  xD.....h1F.....(
 9970 08da6ff0 01002168 6268fff7 4dfc0120  ..o...!hbh..M.. 
 9980 fff7eee9 23493046 7944fff7 2cea50b1  ....#I0FyD..,.P.
 9990 21493046 7944fff7 26ea0446 18b9fff7  !I0FyD..&..F....
 99a0 97fe2046 ece7fff7 d5fee8e7 00206b99  .. F......... k.
 99b0 dff818c0 55f80c20 13689942 01d0fff7  ....U.. .h.B....
 99c0 bee96db0 f0bd00bf 26090000 fcffffff  ..m.....&.......
 99d0 f8030000 ef030000 d01a0000 a6030000  ................
 99e0 a7030000 50090000 98030000 7b030000  ....P.......{...
 99f0 8d030000 d9020000 ce020000 65030000  ............e...
 9a00 ca020000 d7020000 b4190000 5dfeffff  ............]...
 9a10 31feffff f6020000 ef020000 04f01fe5  1...............
 9a20 d9970000                             ....            
Contents of section .rodata:
 9a24 726f2e62 75696c64 2e766572 73696f6e  ro.build.version
 9a34 2e73646b 00300061 63746976 69747900  .sdk.0.activity.
 9a44 616e6472 6f69642e 6170702e 49416374  android.app.IAct
 9a54 69766974 794d616e 61676572 00737263  ivityManager.src
 9a64 6c69622e 68757961 6e776569 2e706572  lib.huyanwei.per
 9a74 6d697373 696f6e67 72616e74 2e726571  missiongrant.req
 9a84 75657374 00736f63 6b65745f 61646472  uest.socket_addr
 9a94 00756964 00706964 00737263 6c69622e  .uid.pid.srclib.
 9aa4 68757961 6e776569 2e706572 6d697373  huyanwei.permiss
 9ab4 696f6e67 72616e74 2e62726f 61646361  iongrant.broadca
 9ac4 73740073 72636c69 622e6875 79616e77  st.srclib.huyanw
 9ad4 65692e70 65726d69 7373696f 6e677261  ei.permissiongra
 9ae4 6e742e72 6573706f 6e736500 6772616e  nt.response.gran
 9af4 745f7265 73756c74 00557361 67653a20  t_result.Usage: 
 9b04 7375205b 6f707469 6f6e735d 004f7074  su [options].Opt
 9b14 696f6e73 3a002020 2d632c2d 2d636f6d  ions:.  -c,--com
 9b24 6d616e64 20636d64 20207275 6e20636d  mand cmd  run cm
 9b34 642e0020 202d682c 2d2d6865 6c702020  d..  -h,--help  
 9b44 20202020 20202068 656c7000 41757468         help.Auth
 9b54 6f723a68 7579616e 77656900 456d6169  or:huyanwei.Emai
 9b64 6c3a7372 636c6962 40686f74 6d61696c  l:srclib@hotmail
 9b74 2e636f6d 002f6461 74612f64 6174612f  .com./data/data/
 9b84 7372636c 69622e68 7579616e 7765692e  srclib.huyanwei.
 9b94 7065726d 69737369 6f6e6772 616e742f  permissiongrant/
 9ba4 2e736f63 6b65742e 7372636c 69622e58  .socket.srclib.X
 9bb4 58585858 58002573 002d6300 2d2d636f  XXXXX.%s.-c.--co
 9bc4 6d6d616e 64007375 202d6320 636f6d6d  mmand.su -c comm
 9bd4 616e6420 6572726f 722e0d00 2f737973  and error.../sys
 9be4 74656d2f 62696e2f 73680073 68002d68  tem/bin/sh.sh.-h
 9bf4 002d2d68 656c7000 2a236875 79616e77  .--help.*#huyanw
 9c04 6569232a 00687579 616e7765 69206772  ei#*.huyanwei gr
 9c14 616e7420 73756363 65737366 756c202e  ant successful .
 9c24 2e2e0d00 2f70726f 632f2564 002f6461  ..../proc/%d./da
 9c34 74612f64 6174612f 7372636c 69622e68  ta/data/srclib.h
 9c44 7579616e 7765692e 7065726d 69737369  uyanwei.permissi
 9c54 6f6e6772 616e742f 00737520 73776974  ongrant/.su swit
 9c64 63682065 72726f72 2e0d0073 7520636f  ch error...su co
 9c74 6d6d616e 64206572 726f722e 0d004445  mmand error...DE
 9c84 4e590041 4c4c4f57 00                 NY.ALLOW.       
Contents of section .ARM.exidx:
 9c90 8cfdff7f 01000000 38f2ff7f b0b0a880  ........8.......
 9ca0 4cf2ff7f b0b0b080 4cf2ff7f b0af3e80  L.......L.....>.
 9cb0 84f8ff7f b0b0a880 d4f8ff7f b0af1e80  ................
 9cc0 acf9ff7f b0aa2380 08faff7f b0b0aa80  ......#.........
 9cd0 84faff7f b0b0a880 d4faff7f b0b0aa80  ................
 9ce0 f8faff7f ab3f2c80                    .....?,.        
Contents of section .preinit_array:
 a000 ffffffff 00000000                    ........        
Contents of section .init_array:
 a008 ffffffff 00000000                    ........        
Contents of section .fini_array:
 a010 ffffffff 00000000                    ........        
Contents of section .ctors:
 a018 ffffffff 00000000                    ........        
Contents of section .dynamic:
 a020 03000000 0ca10000 02000000 70010000  ............p...
 a030 17000000 e48a0000 14000000 11000000  ................
 a040 11000000 548c0000 12000000 08000000  ....T...........
 a050 13000000 08000000 15000000 00000000  ................
 a060 06000000 c4820000 0b000000 10000000  ................
 a070 05000000 c4860000 0a000000 1f040000  ................
 a080 04000000 28810000 01000000 c5030000  ....(...........
 a090 01000000 cf030000 01000000 dc030000  ................
 a0a0 01000000 e9030000 01000000 f6030000  ................
 a0b0 01000000 02040000 01000000 0a040000  ................
 a0c0 01000000 17040000 20000000 00a00000  ........ .......
 a0d0 21000000 08000000 19000000 08a00000  !...............
 a0e0 1b000000 08000000 1a000000 10a00000  ................
 a0f0 1c000000 08000000 1e000000 00000000  ................
 a100 00000000 00000000                    ........        
Contents of section .got:
 a108 00000000 00000000 00000000 00000000  ................
 a118 5c8c0000 5c8c0000 5c8c0000 5c8c0000  \...\...\...\...
 a128 5c8c0000 5c8c0000 5c8c0000 5c8c0000  \...\...\...\...
 a138 5c8c0000 5c8c0000 5c8c0000 5c8c0000  \...\...\...\...
 a148 5c8c0000 5c8c0000 5c8c0000 5c8c0000  \...\...\...\...
 a158 5c8c0000 5c8c0000 5c8c0000 5c8c0000  \...\...\...\...
 a168 5c8c0000 5c8c0000 5c8c0000 5c8c0000  \...\...\...\...
 a178 5c8c0000 5c8c0000 5c8c0000 5c8c0000  \...\...\...\...
 a188 5c8c0000 5c8c0000 5c8c0000 5c8c0000  \...\...\...\...
 a198 5c8c0000 5c8c0000 5c8c0000 5c8c0000  \...\...\...\...
 a1a8 5c8c0000 5c8c0000 5c8c0000 5c8c0000  \...\...\...\...
 a1b8 5c8c0000 5c8c0000 5c8c0000 5c8c0000  \...\...\...\...
 a1c8 5c8c0000 5c8c0000                    \...\...        
Contents of section .data:
 a1d0 ffffffff ffffffff ffffffff           ............    
Contents of section .note.gnu.gold-version:
 0000 04000000 08000000 04000000 474e5500  ............GNU.
 0010 676f6c64 20312e39                    gold 1.9        
Contents of section .ARM.attributes:
 0000 41310000 00616561 62690001 27000000  A1...aeabi..'...
 0010 0541524d 20763700 060a0741 08010902  .ARM v7....A....
 0020 0a030c01 12041401 15011703 18011a02  ................
 0030 1b03                                 ..              

Disassembly of section .plt:

00008c5c <__libc_init@plt-0x14>:
    8c5c:   e52de004    push    {lr}        ; (str lr, [sp, #-4]!)
    8c60:   e59fe004    ldr lr, [pc, #4]    ; 8c6c <__libc_init@plt-0x4>
    8c64:   e08fe00e    add lr, pc, lr
    8c68:   e5bef008    ldr pc, [lr, #8]!
    8c6c:   000014a0    andeq   r1, r0, r0, lsr #9

00008c70 <__libc_init@plt>:
    8c70:   e28fc600    add ip, pc, #0, 12
    8c74:   e28cca01    add ip, ip, #4096   ; 0x1000
    8c78:   e5bcf4a0    ldr pc, [ip, #1184]!    ; 0x4a0

00008c7c <android::RefBase::decStrong(void const*) const@plt>:
    8c7c:   e28fc600    add ip, pc, #0, 12
    8c80:   e28cca01    add ip, ip, #4096   ; 0x1000
    8c84:   e5bcf498    ldr pc, [ip, #1176]!    ; 0x498

00008c88 <memset@plt>:
    8c88:   e28fc600    add ip, pc, #0, 12
    8c8c:   e28cca01    add ip, ip, #4096   ; 0x1000
    8c90:   e5bcf490    ldr pc, [ip, #1168]!    ; 0x490

00008c94 <property_get@plt>:
    8c94:   e28fc600    add ip, pc, #0, 12
    8c98:   e28cca01    add ip, ip, #4096   ; 0x1000
    8c9c:   e5bcf488    ldr pc, [ip, #1160]!    ; 0x488

00008ca0 <atoi@plt>:
    8ca0:   e28fc600    add ip, pc, #0, 12
    8ca4:   e28cca01    add ip, ip, #4096   ; 0x1000
    8ca8:   e5bcf480    ldr pc, [ip, #1152]!    ; 0x480

00008cac <android::defaultServiceManager()@plt>:
    8cac:   e28fc600    add ip, pc, #0, 12
    8cb0:   e28cca01    add ip, ip, #4096   ; 0x1000
    8cb4:   e5bcf478    ldr pc, [ip, #1144]!    ; 0x478

00008cb8 <android::String16::String16(char const*)@plt>:
    8cb8:   e28fc600    add ip, pc, #0, 12
    8cbc:   e28cca01    add ip, ip, #4096   ; 0x1000
    8cc0:   e5bcf470    ldr pc, [ip, #1136]!    ; 0x470

00008cc4 <android::String16::~String16()@plt>:
    8cc4:   e28fc600    add ip, pc, #0, 12
    8cc8:   e28cca01    add ip, ip, #4096   ; 0x1000
    8ccc:   e5bcf468    ldr pc, [ip, #1128]!    ; 0x468

00008cd0 <android::Parcel::Parcel()@plt>:
    8cd0:   e28fc600    add ip, pc, #0, 12
    8cd4:   e28cca01    add ip, ip, #4096   ; 0x1000
    8cd8:   e5bcf460    ldr pc, [ip, #1120]!    ; 0x460

00008cdc <android::Parcel::writeInterfaceToken(android::String16 const&)@plt>:
    8cdc:   e28fc600    add ip, pc, #0, 12
    8ce0:   e28cca01    add ip, ip, #4096   ; 0x1000
    8ce4:   e5bcf458    ldr pc, [ip, #1112]!    ; 0x458

00008ce8 <android::Parcel::writeStrongBinder(android::sp<android::IBinder> const&)@plt>:
    8ce8:   e28fc600    add ip, pc, #0, 12
    8cec:   e28cca01    add ip, ip, #4096   ; 0x1000
    8cf0:   e5bcf450    ldr pc, [ip, #1104]!    ; 0x450

00008cf4 <android::Parcel::writeString16(android::String16 const&)@plt>:
    8cf4:   e28fc600    add ip, pc, #0, 12
    8cf8:   e28cca01    add ip, ip, #4096   ; 0x1000
    8cfc:   e5bcf448    ldr pc, [ip, #1096]!    ; 0x448

00008d00 <android::Parcel::writeInt32(int)@plt>:
    8d00:   e28fc600    add ip, pc, #0, 12
    8d04:   e28cca01    add ip, ip, #4096   ; 0x1000
    8d08:   e5bcf440    ldr pc, [ip, #1088]!    ; 0x440

00008d0c <android::Parcel::writeString16(unsigned short const*, unsigned int)@plt>:
    8d0c:   e28fc600    add ip, pc, #0, 12
    8d10:   e28cca01    add ip, ip, #4096   ; 0x1000
    8d14:   e5bcf438    ldr pc, [ip, #1080]!    ; 0x438

00008d18 <android::Parcel::dataPosition() const@plt>:
    8d18:   e28fc600    add ip, pc, #0, 12
    8d1c:   e28cca01    add ip, ip, #4096   ; 0x1000
    8d20:   e5bcf430    ldr pc, [ip, #1072]!    ; 0x430

00008d24 <android::Parcel::setDataPosition(unsigned int) const@plt>:
    8d24:   e28fc600    add ip, pc, #0, 12
    8d28:   e28cca01    add ip, ip, #4096   ; 0x1000
    8d2c:   e5bcf428    ldr pc, [ip, #1064]!    ; 0x428

00008d30 <android::Parcel::~Parcel()@plt>:
    8d30:   e28fc600    add ip, pc, #0, 12
    8d34:   e28cca01    add ip, ip, #4096   ; 0x1000
    8d38:   e5bcf420    ldr pc, [ip, #1056]!    ; 0x420

00008d3c <__stack_chk_fail@plt>:
    8d3c:   e28fc600    add ip, pc, #0, 12
    8d40:   e28cca01    add ip, ip, #4096   ; 0x1000
    8d44:   e5bcf418    ldr pc, [ip, #1048]!    ; 0x418

00008d48 <puts@plt>:
    8d48:   e28fc600    add ip, pc, #0, 12
    8d4c:   e28cca01    add ip, ip, #4096   ; 0x1000
    8d50:   e5bcf410    ldr pc, [ip, #1040]!    ; 0x410

00008d54 <putchar@plt>:
    8d54:   e28fc600    add ip, pc, #0, 12
    8d58:   e28cca01    add ip, ip, #4096   ; 0x1000
    8d5c:   e5bcf408    ldr pc, [ip, #1032]!    ; 0x408

00008d60 <exit@plt>:
    8d60:   e28fc600    add ip, pc, #0, 12
    8d64:   e28cca01    add ip, ip, #4096   ; 0x1000
    8d68:   e5bcf400    ldr pc, [ip, #1024]!    ; 0x400

00008d6c <socket@plt>:
    8d6c:   e28fc600    add ip, pc, #0, 12
    8d70:   e28cca01    add ip, ip, #4096   ; 0x1000
    8d74:   e5bcf3f8    ldr pc, [ip, #1016]!    ; 0x3f8

00008d78 <strcpy@plt>:
    8d78:   e28fc600    add ip, pc, #0, 12
    8d7c:   e28cca01    add ip, ip, #4096   ; 0x1000
    8d80:   e5bcf3f0    ldr pc, [ip, #1008]!    ; 0x3f0

00008d84 <mktemp@plt>:
    8d84:   e28fc600    add ip, pc, #0, 12
    8d88:   e28cca01    add ip, ip, #4096   ; 0x1000
    8d8c:   e5bcf3e8    ldr pc, [ip, #1000]!    ; 0x3e8

00008d90 <snprintf@plt>:
    8d90:   e28fc600    add ip, pc, #0, 12
    8d94:   e28cca01    add ip, ip, #4096   ; 0x1000
    8d98:   e5bcf3e0    ldr pc, [ip, #992]! ; 0x3e0

00008d9c <unlink@plt>:
    8d9c:   e28fc600    add ip, pc, #0, 12
    8da0:   e28cca01    add ip, ip, #4096   ; 0x1000
    8da4:   e5bcf3d8    ldr pc, [ip, #984]! ; 0x3d8

00008da8 <bind@plt>:
    8da8:   e28fc600    add ip, pc, #0, 12
    8dac:   e28cca01    add ip, ip, #4096   ; 0x1000
    8db0:   e5bcf3d0    ldr pc, [ip, #976]! ; 0x3d0

00008db4 <__errno@plt>:
    8db4:   e28fc600    add ip, pc, #0, 12
    8db8:   e28cca01    add ip, ip, #4096   ; 0x1000
    8dbc:   e5bcf3c8    ldr pc, [ip, #968]! ; 0x3c8

00008dc0 <listen@plt>:
    8dc0:   e28fc600    add ip, pc, #0, 12
    8dc4:   e28cca01    add ip, ip, #4096   ; 0x1000
    8dc8:   e5bcf3c0    ldr pc, [ip, #960]! ; 0x3c0

00008dcc <select@plt>:
    8dcc:   e28fc600    add ip, pc, #0, 12
    8dd0:   e28cca01    add ip, ip, #4096   ; 0x1000
    8dd4:   e5bcf3b8    ldr pc, [ip, #952]! ; 0x3b8

00008dd8 <accept@plt>:
    8dd8:   e28fc600    add ip, pc, #0, 12
    8ddc:   e28cca01    add ip, ip, #4096   ; 0x1000
    8de0:   e5bcf3b0    ldr pc, [ip, #944]! ; 0x3b0

00008de4 <strcmp@plt>:
    8de4:   e28fc600    add ip, pc, #0, 12
    8de8:   e28cca01    add ip, ip, #4096   ; 0x1000
    8dec:   e5bcf3a8    ldr pc, [ip, #936]! ; 0x3a8

00008df0 <execvp@plt>:
    8df0:   e28fc600    add ip, pc, #0, 12
    8df4:   e28cca01    add ip, ip, #4096   ; 0x1000
    8df8:   e5bcf3a0    ldr pc, [ip, #928]! ; 0x3a0

00008dfc <execlp@plt>:
    8dfc:   e28fc600    add ip, pc, #0, 12
    8e00:   e28cca01    add ip, ip, #4096   ; 0x1000
    8e04:   e5bcf398    ldr pc, [ip, #920]! ; 0x398

00008e08 <free@plt>:
    8e08:   e28fc600    add ip, pc, #0, 12
    8e0c:   e28cca01    add ip, ip, #4096   ; 0x1000
    8e10:   e5bcf390    ldr pc, [ip, #912]! ; 0x390

00008e14 <read@plt>:
    8e14:   e28fc600    add ip, pc, #0, 12
    8e18:   e28cca01    add ip, ip, #4096   ; 0x1000
    8e1c:   e5bcf388    ldr pc, [ip, #904]! ; 0x388

00008e20 <malloc@plt>:
    8e20:   e28fc600    add ip, pc, #0, 12
    8e24:   e28cca01    add ip, ip, #4096   ; 0x1000
    8e28:   e5bcf380    ldr pc, [ip, #896]! ; 0x380

00008e2c <memcpy@plt>:
    8e2c:   e28fc600    add ip, pc, #0, 12
    8e30:   e28cca01    add ip, ip, #4096   ; 0x1000
    8e34:   e5bcf378    ldr pc, [ip, #888]! ; 0x378

00008e38 <setgid@plt>:
    8e38:   e28fc600    add ip, pc, #0, 12
    8e3c:   e28cca01    add ip, ip, #4096   ; 0x1000
    8e40:   e5bcf370    ldr pc, [ip, #880]! ; 0x370

00008e44 <getppid@plt>:
    8e44:   e28fc600    add ip, pc, #0, 12
    8e48:   e28cca01    add ip, ip, #4096   ; 0x1000
    8e4c:   e5bcf368    ldr pc, [ip, #872]! ; 0x368

00008e50 <sprintf@plt>:
    8e50:   e28fc600    add ip, pc, #0, 12
    8e54:   e28cca01    add ip, ip, #4096   ; 0x1000
    8e58:   e5bcf360    ldr pc, [ip, #864]! ; 0x360

00008e5c <stat@plt>:
    8e5c:   e28fc600    add ip, pc, #0, 12
    8e60:   e28cca01    add ip, ip, #4096   ; 0x1000
    8e64:   e5bcf358    ldr pc, [ip, #856]! ; 0x358

00008e68 <mkdir@plt>:
    8e68:   e28fc600    add ip, pc, #0, 12
    8e6c:   e28cca01    add ip, ip, #4096   ; 0x1000
    8e70:   e5bcf350    ldr pc, [ip, #848]! ; 0x350

00008e74 <setuid@plt>:
    8e74:   e28fc600    add ip, pc, #0, 12
    8e78:   e28cca01    add ip, ip, #4096   ; 0x1000
    8e7c:   e5bcf348    ldr pc, [ip, #840]! ; 0x348

00008e80 <bsd_signal@plt>:
    8e80:   e28fc600    add ip, pc, #0, 12
    8e84:   e28cca01    add ip, ip, #4096   ; 0x1000
    8e88:   e5bcf340    ldr pc, [ip, #832]! ; 0x340

00008e8c <atexit@plt>:
    8e8c:   e28fc600    add ip, pc, #0, 12
    8e90:   e28cca01    add ip, ip, #4096   ; 0x1000
    8e94:   e5bcf338    ldr pc, [ip, #824]! ; 0x338

Disassembly of section .text:

00008ea0 <android::sp<android::IBinder>::~sp()-0x30>:
    8ea0:   e1a0000d    mov r0, sp
    8ea4:   e3a01000    mov r1, #0
    8ea8:   e28f2004    add r2, pc, #4
    8eac:   e28f3004    add r3, pc, #4
    8eb0:   eaffff6e    b   8c70 <__libc_init@plt>
    8eb4:   ea0002d8    b   9a1c <android::sp<android::IBinder>::~sp()+0xb4c>
    8eb8:   0000a000    andeq   sl, r0, r0
    8ebc:   0000a008    andeq   sl, r0, r8
    8ec0:   0000a010    andeq   sl, r0, r0, lsl r0
    8ec4:   0000a018    andeq   sl, r0, r8, lsl r0
    8ec8:   e1a00000    nop         ; (mov r0, r0)
    8ecc:   e1a00000    nop         ; (mov r0, r0)

00008ed0 <android::sp<android::IBinder>::~sp()>:
    8ed0:   b510        push    {r4, lr}
    8ed2:   4604        mov r4, r0
    8ed4:   6803        ldr r3, [r0, #0]
    8ed6:   b133        cbz r3, 8ee6 <android::sp<android::IBinder>::~sp()+0x16>
    8ed8:   681a        ldr r2, [r3, #0]
    8eda:   4621        mov r1, r4
    8edc:   f852 0c0c   ldr.w   r0, [r2, #-12]
    8ee0:   1818        adds    r0, r3, r0
    8ee2:   f7ff eecc   blx 8c7c <android::RefBase::decStrong(void const*) const@plt>
    8ee6:   4620        mov r0, r4
    8ee8:   bd10        pop {r4, pc}
    8eea:   bf00        nop
    8eec:   2300        movs    r3, #0
    8eee:   6003        str r3, [r0, #0]
    8ef0:   4770        bx  lr
    8ef2:   bf00        nop
    8ef4:   e92d 4ff0   stmdb   sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
    8ef8:   f8df 92f0   ldr.w   r9, [pc, #752]  ; 91ec <android::sp<android::IBinder>::~sp()+0x31c>
    8efc:   b0bf        sub sp, #252    ; 0xfc
    8efe:   4dbc        ldr r5, [pc, #752]  ; (91f0 <android::sp<android::IBinder>::~sp()+0x320>)
    8f00:   4680        mov r8, r0
    8f02:   447d        add r5, pc
    8f04:   460f        mov r7, r1
    8f06:   f855 6009   ldr.w   r6, [r5, r9]
    8f0a:   2130        movs    r1, #48 ; 0x30
    8f0c:   4692        mov sl, r2
    8f0e:   9126        str r1, [sp, #152]  ; 0x98
    8f10:   6832        ldr r2, [r6, #0]
    8f12:   2100        movs    r1, #0
    8f14:   923d        str r2, [sp, #244]  ; 0xf4
    8f16:   a827        add r0, sp, #156    ; 0x9c
    8f18:   2258        movs    r2, #88 ; 0x58
    8f1a:   f7ff eeb6   blx 8c88 <memset@plt>
    8f1e:   ac26        add r4, sp, #152    ; 0x98
    8f20:   48b4        ldr r0, [pc, #720]  ; (91f4 <android::sp<android::IBinder>::~sp()+0x324>)
    8f22:   4621        mov r1, r4
    8f24:   4478        add r0, pc
    8f26:   4ab4        ldr r2, [pc, #720]  ; (91f8 <android::sp<android::IBinder>::~sp()+0x328>)
    8f28:   447a        add r2, pc
    8f2a:   ae23        add r6, sp, #140    ; 0x8c
    8f2c:   f7ff eeb2   blx 8c94 <property_get@plt>
    8f30:   4620        mov r0, r4
    8f32:   f7ff eeb6   blx 8ca0 <atoi@plt>
    8f36:   4604        mov r4, r0
    8f38:   a825        add r0, sp, #148    ; 0x94
    8f3a:   f7ff eeb8   blx 8cac <android::defaultServiceManager()@plt>
    8f3e:   f8dd b094   ldr.w   fp, [sp, #148]  ; 0x94
    8f42:   49ae        ldr r1, [pc, #696]  ; (91fc <android::sp<android::IBinder>::~sp()+0x32c>)
    8f44:   f8db 0000   ldr.w   r0, [fp]
    8f48:   4479        add r1, pc
    8f4a:   f8d0 9014   ldr.w   r9, [r0, #20]
    8f4e:   4630        mov r0, r6
    8f50:   f7ff eeb2   blx 8cb8 <android::String16::String16(char const*)@plt>
    8f54:   a824        add r0, sp, #144    ; 0x90
    8f56:   4659        mov r1, fp
    8f58:   4632        mov r2, r6
    8f5a:   47c8        blx r9
    8f5c:   4630        mov r0, r6
    8f5e:   f7ff eeb2   blx 8cc4 <android::String16::~String16()@plt>
    8f62:   9b24        ldr r3, [sp, #144]  ; 0x90
    8f64:   b913        cbnz    r3, 8f6c <android::sp<android::IBinder>::~sp()+0x9c>
    8f66:   f04f 37ff   mov.w   r7, #4294967295 ; 0xffffffff
    8f6a:   e122        b.n 91b2 <android::sp<android::IBinder>::~sp()+0x2e2>
    8f6c:   ae0e        add r6, sp, #56 ; 0x38
    8f6e:   4630        mov r0, r6
    8f70:   f7ff eeae   blx 8cd0 <android::Parcel::Parcel()@plt>
    8f74:   a802        add r0, sp, #8
    8f76:   f7ff eeac   blx 8cd0 <android::Parcel::Parcel()@plt>
    8f7a:   f10d 0988   add.w   r9, sp, #136    ; 0x88
    8f7e:   49a0        ldr r1, [pc, #640]  ; (9200 <android::sp<android::IBinder>::~sp()+0x330>)
    8f80:   4648        mov r0, r9
    8f82:   4479        add r1, pc
    8f84:   f7ff ee98   blx 8cb8 <android::String16::String16(char const*)@plt>
    8f88:   4649        mov r1, r9
    8f8a:   4630        mov r0, r6
    8f8c:   f7ff eea6   blx 8cdc <android::Parcel::writeInterfaceToken(android::String16 const&)@plt>
    8f90:   4648        mov r0, r9
    8f92:   f7ff ee98   blx 8cc4 <android::String16::~String16()@plt>
    8f96:   f10d 0984   add.w   r9, sp, #132    ; 0x84
    8f9a:   4648        mov r0, r9
    8f9c:   f7ff ffa6   bl  8eec <android::sp<android::IBinder>::~sp()+0x1c>
    8fa0:   4649        mov r1, r9
    8fa2:   4630        mov r0, r6
    8fa4:   f7ff eea0   blx 8ce8 <android::Parcel::writeStrongBinder(android::sp<android::IBinder> const&)@plt>
    8fa8:   4648        mov r0, r9
    8faa:   f7ff ff91   bl  8ed0 <android::sp<android::IBinder>::~sp()>
    8fae:   f10d 0980   add.w   r9, sp, #128    ; 0x80
    8fb2:   4994        ldr r1, [pc, #592]  ; (9204 <android::sp<android::IBinder>::~sp()+0x334>)
    8fb4:   4648        mov r0, r9
    8fb6:   4479        add r1, pc
    8fb8:   f7ff ee7e   blx 8cb8 <android::String16::String16(char const*)@plt>
    8fbc:   4649        mov r1, r9
    8fbe:   4630        mov r0, r6
    8fc0:   f7ff ee98   blx 8cf4 <android::Parcel::writeString16(android::String16 const&)@plt>
    8fc4:   4648        mov r0, r9
    8fc6:   f7ff ee7e   blx 8cc4 <android::String16::~String16()@plt>
    8fca:   2100        movs    r1, #0
    8fcc:   4630        mov r0, r6
    8fce:   f7ff ee98   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    8fd2:   2100        movs    r1, #0
    8fd4:   4630        mov r0, r6
    8fd6:   460a        mov r2, r1
    8fd8:   f7ff ee98   blx 8d0c <android::Parcel::writeString16(unsigned short const*, unsigned int)@plt>
    8fdc:   2100        movs    r1, #0
    8fde:   4630        mov r0, r6
    8fe0:   f7ff ee8e   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    8fe4:   2c03        cmp r4, #3
    8fe6:   dd04        ble.n   8ff2 <android::sp<android::IBinder>::~sp()+0x122>
    8fe8:   2100        movs    r1, #0
    8fea:   4630        mov r0, r6
    8fec:   460a        mov r2, r1
    8fee:   f7ff ee8e   blx 8d0c <android::Parcel::writeString16(unsigned short const*, unsigned int)@plt>
    8ff2:   2100        movs    r1, #0
    8ff4:   ae0e        add r6, sp, #56 ; 0x38
    8ff6:   460a        mov r2, r1
    8ff8:   4630        mov r0, r6
    8ffa:   f7ff ee88   blx 8d0c <android::Parcel::writeString16(unsigned short const*, unsigned int)@plt>
    8ffe:   2100        movs    r1, #0
    9000:   4630        mov r0, r6
    9002:   f7ff ee7e   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9006:   2c06        cmp r4, #6
    9008:   dd09        ble.n   901e <android::sp<android::IBinder>::~sp()+0x14e>
    900a:   2100        movs    r1, #0
    900c:   4630        mov r0, r6
    900e:   f7ff ee78   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9012:   2c0e        cmp r4, #14
    9014:   dd03        ble.n   901e <android::sp<android::IBinder>::~sp()+0x14e>
    9016:   4630        mov r0, r6
    9018:   2100        movs    r1, #0
    901a:   f7ff ee72   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    901e:   ac0e        add r4, sp, #56 ; 0x38
    9020:   f04f 31ff   mov.w   r1, #4294967295 ; 0xffffffff
    9024:   4620        mov r0, r4
    9026:   ae1f        add r6, sp, #124    ; 0x7c
    9028:   f7ff ee6a   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    902c:   4620        mov r0, r4
    902e:   f7ff ee74   blx 8d18 <android::Parcel::dataPosition() const@plt>
    9032:   496d        ldr r1, [pc, #436]  ; (91e8 <android::sp<android::IBinder>::~sp()+0x318>)
    9034:   4681        mov r9, r0
    9036:   4620        mov r0, r4
    9038:   f7ff ee62   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    903c:   2107        movs    r1, #7
    903e:   4620        mov r0, r4
    9040:   f7ff ee5e   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9044:   2100        movs    r1, #0
    9046:   4620        mov r0, r4
    9048:   f7ff ee5a   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    904c:   4630        mov r0, r6
    904e:   496e        ldr r1, [pc, #440]  ; (9208 <android::sp<android::IBinder>::~sp()+0x338>)
    9050:   4479        add r1, pc
    9052:   f7ff ee32   blx 8cb8 <android::String16::String16(char const*)@plt>
    9056:   4631        mov r1, r6
    9058:   4620        mov r0, r4
    905a:   f7ff ee4c   blx 8cf4 <android::Parcel::writeString16(android::String16 const&)@plt>
    905e:   4630        mov r0, r6
    9060:   f7ff ee30   blx 8cc4 <android::String16::~String16()@plt>
    9064:   2100        movs    r1, #0
    9066:   4620        mov r0, r4
    9068:   ae1e        add r6, sp, #120    ; 0x78
    906a:   f7ff ee4a   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    906e:   4630        mov r0, r6
    9070:   4641        mov r1, r8
    9072:   f7ff ee22   blx 8cb8 <android::String16::String16(char const*)@plt>
    9076:   4631        mov r1, r6
    9078:   4620        mov r0, r4
    907a:   f7ff ee3c   blx 8cf4 <android::Parcel::writeString16(android::String16 const&)@plt>
    907e:   4630        mov r0, r6
    9080:   f7ff ee20   blx 8cc4 <android::String16::~String16()@plt>
    9084:   2100        movs    r1, #0
    9086:   4620        mov r0, r4
    9088:   ae1d        add r6, sp, #116    ; 0x74
    908a:   f7ff ee3a   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    908e:   4630        mov r0, r6
    9090:   495e        ldr r1, [pc, #376]  ; (920c <android::sp<android::IBinder>::~sp()+0x33c>)
    9092:   4479        add r1, pc
    9094:   f7ff ee10   blx 8cb8 <android::String16::String16(char const*)@plt>
    9098:   4631        mov r1, r6
    909a:   4620        mov r0, r4
    909c:   f7ff ee2a   blx 8cf4 <android::Parcel::writeString16(android::String16 const&)@plt>
    90a0:   4630        mov r0, r6
    90a2:   f7ff ee10   blx 8cc4 <android::String16::~String16()@plt>
    90a6:   2101        movs    r1, #1
    90a8:   4620        mov r0, r4
    90aa:   f7ff ee2a   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    90ae:   4639        mov r1, r7
    90b0:   4620        mov r0, r4
    90b2:   af1c        add r7, sp, #112    ; 0x70
    90b4:   f7ff ee24   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    90b8:   2100        movs    r1, #0
    90ba:   4620        mov r0, r4
    90bc:   f7ff ee20   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    90c0:   4638        mov r0, r7
    90c2:   4953        ldr r1, [pc, #332]  ; (9210 <android::sp<android::IBinder>::~sp()+0x340>)
    90c4:   4479        add r1, pc
    90c6:   f7ff edf8   blx 8cb8 <android::String16::String16(char const*)@plt>
    90ca:   4639        mov r1, r7
    90cc:   4620        mov r0, r4
    90ce:   f7ff ee12   blx 8cf4 <android::Parcel::writeString16(android::String16 const&)@plt>
    90d2:   4638        mov r0, r7
    90d4:   f7ff edf6   blx 8cc4 <android::String16::~String16()@plt>
    90d8:   2101        movs    r1, #1
    90da:   4620        mov r0, r4
    90dc:   af1b        add r7, sp, #108    ; 0x6c
    90de:   f7ff ee10   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    90e2:   4651        mov r1, sl
    90e4:   4620        mov r0, r4
    90e6:   f7ff ee0c   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    90ea:   4620        mov r0, r4
    90ec:   f7ff ee14   blx 8d18 <android::Parcel::dataPosition() const@plt>
    90f0:   f1a9 0104   sub.w   r1, r9, #4
    90f4:   4606        mov r6, r0
    90f6:   4620        mov r0, r4
    90f8:   f7ff ee14   blx 8d24 <android::Parcel::setDataPosition(unsigned int) const@plt>
    90fc:   ebc9 0106   rsb r1, r9, r6
    9100:   4620        mov r0, r4
    9102:   f7ff edfe   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9106:   4631        mov r1, r6
    9108:   4620        mov r0, r4
    910a:   ae1a        add r6, sp, #104    ; 0x68
    910c:   f7ff ee0a   blx 8d24 <android::Parcel::setDataPosition(unsigned int) const@plt>
    9110:   2100        movs    r1, #0
    9112:   4620        mov r0, r4
    9114:   460a        mov r2, r1
    9116:   f7ff edfa   blx 8d0c <android::Parcel::writeString16(unsigned short const*, unsigned int)@plt>
    911a:   f04f 31ff   mov.w   r1, #4294967295 ; 0xffffffff
    911e:   4620        mov r0, r4
    9120:   f7ff edee   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9124:   4638        mov r0, r7
    9126:   f7ff fee1   bl  8eec <android::sp<android::IBinder>::~sp()+0x1c>
    912a:   4639        mov r1, r7
    912c:   4620        mov r0, r4
    912e:   f7ff eddc   blx 8ce8 <android::Parcel::writeStrongBinder(android::sp<android::IBinder> const&)@plt>
    9132:   4638        mov r0, r7
    9134:   f7ff fecc   bl  8ed0 <android::sp<android::IBinder>::~sp()>
    9138:   f04f 31ff   mov.w   r1, #4294967295 ; 0xffffffff
    913c:   4620        mov r0, r4
    913e:   f7ff ede0   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9142:   2100        movs    r1, #0
    9144:   4620        mov r0, r4
    9146:   460a        mov r2, r1
    9148:   f7ff ede0   blx 8d0c <android::Parcel::writeString16(unsigned short const*, unsigned int)@plt>
    914c:   f04f 31ff   mov.w   r1, #4294967295 ; 0xffffffff
    9150:   4620        mov r0, r4
    9152:   f7ff edd6   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9156:   4630        mov r0, r6
    9158:   492e        ldr r1, [pc, #184]  ; (9214 <android::sp<android::IBinder>::~sp()+0x344>)
    915a:   4479        add r1, pc
    915c:   f7ff edac   blx 8cb8 <android::String16::String16(char const*)@plt>
    9160:   4631        mov r1, r6
    9162:   4620        mov r0, r4
    9164:   f7ff edc6   blx 8cf4 <android::Parcel::writeString16(android::String16 const&)@plt>
    9168:   4630        mov r0, r6
    916a:   f7ff edac   blx 8cc4 <android::String16::~String16()@plt>
    916e:   2100        movs    r1, #0
    9170:   4620        mov r0, r4
    9172:   ae02        add r6, sp, #8
    9174:   f7ff edc4   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9178:   2100        movs    r1, #0
    917a:   4620        mov r0, r4
    917c:   f7ff edc0   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9180:   f04f 31ff   mov.w   r1, #4294967295 ; 0xffffffff
    9184:   4620        mov r0, r4
    9186:   f7ff edbc   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    918a:   9824        ldr r0, [sp, #144]  ; 0x90
    918c:   2100        movs    r1, #0
    918e:   6803        ldr r3, [r0, #0]
    9190:   4622        mov r2, r4
    9192:   9100        str r1, [sp, #0]
    9194:   210e        movs    r1, #14
    9196:   695f        ldr r7, [r3, #20]
    9198:   4633        mov r3, r6
    919a:   47b8        blx r7
    919c:   2800        cmp r0, #0
    919e:   bfb4        ite lt
    91a0:   f04f 37ff   movlt.w r7, #4294967295 ; 0xffffffff
    91a4:   2700        movge   r7, #0
    91a6:   4630        mov r0, r6
    91a8:   f7ff edc2   blx 8d30 <android::Parcel::~Parcel()@plt>
    91ac:   4620        mov r0, r4
    91ae:   f7ff edc0   blx 8d30 <android::Parcel::~Parcel()@plt>
    91b2:   a824        add r0, sp, #144    ; 0x90
    91b4:   f7ff fe8c   bl  8ed0 <android::sp<android::IBinder>::~sp()>
    91b8:   9b25        ldr r3, [sp, #148]  ; 0x94
    91ba:   b133        cbz r3, 91ca <android::sp<android::IBinder>::~sp()+0x2fa>
    91bc:   681a        ldr r2, [r3, #0]
    91be:   a925        add r1, sp, #148    ; 0x94
    91c0:   f852 0c0c   ldr.w   r0, [r2, #-12]
    91c4:   1818        adds    r0, r3, r0
    91c6:   f7ff ed5a   blx 8c7c <android::RefBase::decStrong(void const*) const@plt>
    91ca:   993d        ldr r1, [sp, #244]  ; 0xf4
    91cc:   f8df c01c   ldr.w   ip, [pc, #28]   ; 91ec <android::sp<android::IBinder>::~sp()+0x31c>
    91d0:   4638        mov r0, r7
    91d2:   f855 200c   ldr.w   r2, [r5, ip]
    91d6:   6813        ldr r3, [r2, #0]
    91d8:   4299        cmp r1, r3
    91da:   d001        beq.n   91e0 <android::sp<android::IBinder>::~sp()+0x310>
    91dc:   f7ff edae   blx 8d3c <__stack_chk_fail@plt>
    91e0:   b03f        add sp, #252    ; 0xfc
    91e2:   e8bd 8ff0   ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
    91e6:   bf00        nop
    91e8:   4e42        ldr r6, [pc, #264]  ; (92f4 <android::sp<android::IBinder>::~sp()+0x424>)
    91ea:   4c44        ldr r4, [pc, #272]  ; (92fc <android::sp<android::IBinder>::~sp()+0x42c>)
    91ec:   fffc ffff           ; <UNDEFINED> instruction: 0xfffcffff
    91f0:   1206        asrs    r6, r0, #8
    91f2:   0000        movs    r0, r0
    91f4:   0afc        lsrs    r4, r7, #11
    91f6:   0000        movs    r0, r0
    91f8:   0b0d        lsrs    r5, r1, #12
    91fa:   0000        movs    r0, r0
    91fc:   0aef        lsrs    r7, r5, #11
    91fe:   0000        movs    r0, r0
    9200:   0abe        lsrs    r6, r7, #10
    9202:   0000        movs    r0, r0
    9204:   0aa7        lsrs    r7, r4, #10
    9206:   0000        movs    r0, r0
    9208:   0a35        lsrs    r5, r6, #8
    920a:   0000        movs    r0, r0
    920c:   09ff        lsrs    r7, r7, #7
    920e:   0000        movs    r0, r0
    9210:   09d1        lsrs    r1, r2, #7
    9212:   0000        movs    r0, r0
    9214:   093f        lsrs    r7, r7, #4
    9216:   0000        movs    r0, r0
    9218:   e92d 4ff0   stmdb   sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
    921c:   f8df 92e8   ldr.w   r9, [pc, #744]  ; 9508 <android::sp<android::IBinder>::~sp()+0x638>
    9220:   b0bf        sub sp, #252    ; 0xfc
    9222:   4dba        ldr r5, [pc, #744]  ; (950c <android::sp<android::IBinder>::~sp()+0x63c>)
    9224:   4680        mov r8, r0
    9226:   447d        add r5, pc
    9228:   460f        mov r7, r1
    922a:   f855 6009   ldr.w   r6, [r5, r9]
    922e:   2130        movs    r1, #48 ; 0x30
    9230:   4692        mov sl, r2
    9232:   9126        str r1, [sp, #152]  ; 0x98
    9234:   6832        ldr r2, [r6, #0]
    9236:   2100        movs    r1, #0
    9238:   923d        str r2, [sp, #244]  ; 0xf4
    923a:   a827        add r0, sp, #156    ; 0x9c
    923c:   2258        movs    r2, #88 ; 0x58
    923e:   f7ff ed24   blx 8c88 <memset@plt>
    9242:   ac26        add r4, sp, #152    ; 0x98
    9244:   48b2        ldr r0, [pc, #712]  ; (9510 <android::sp<android::IBinder>::~sp()+0x640>)
    9246:   4621        mov r1, r4
    9248:   4478        add r0, pc
    924a:   4ab2        ldr r2, [pc, #712]  ; (9514 <android::sp<android::IBinder>::~sp()+0x644>)
    924c:   447a        add r2, pc
    924e:   ae23        add r6, sp, #140    ; 0x8c
    9250:   f7ff ed20   blx 8c94 <property_get@plt>
    9254:   4620        mov r0, r4
    9256:   f7ff ed24   blx 8ca0 <atoi@plt>
    925a:   4604        mov r4, r0
    925c:   a825        add r0, sp, #148    ; 0x94
    925e:   f7ff ed26   blx 8cac <android::defaultServiceManager()@plt>
    9262:   f8dd b094   ldr.w   fp, [sp, #148]  ; 0x94
    9266:   49ac        ldr r1, [pc, #688]  ; (9518 <android::sp<android::IBinder>::~sp()+0x648>)
    9268:   f8db 0000   ldr.w   r0, [fp]
    926c:   4479        add r1, pc
    926e:   f8d0 9014   ldr.w   r9, [r0, #20]
    9272:   4630        mov r0, r6
    9274:   f7ff ed20   blx 8cb8 <android::String16::String16(char const*)@plt>
    9278:   a824        add r0, sp, #144    ; 0x90
    927a:   4659        mov r1, fp
    927c:   4632        mov r2, r6
    927e:   47c8        blx r9
    9280:   4630        mov r0, r6
    9282:   f7ff ed20   blx 8cc4 <android::String16::~String16()@plt>
    9286:   9b24        ldr r3, [sp, #144]  ; 0x90
    9288:   b913        cbnz    r3, 9290 <android::sp<android::IBinder>::~sp()+0x3c0>
    928a:   f04f 37ff   mov.w   r7, #4294967295 ; 0xffffffff
    928e:   e11f        b.n 94d0 <android::sp<android::IBinder>::~sp()+0x600>
    9290:   ae0f        add r6, sp, #60 ; 0x3c
    9292:   4630        mov r0, r6
    9294:   f7ff ed1c   blx 8cd0 <android::Parcel::Parcel()@plt>
    9298:   a803        add r0, sp, #12
    929a:   f7ff ed1a   blx 8cd0 <android::Parcel::Parcel()@plt>
    929e:   f10d 0988   add.w   r9, sp, #136    ; 0x88
    92a2:   499e        ldr r1, [pc, #632]  ; (951c <android::sp<android::IBinder>::~sp()+0x64c>)
    92a4:   4648        mov r0, r9
    92a6:   4479        add r1, pc
    92a8:   f7ff ed06   blx 8cb8 <android::String16::String16(char const*)@plt>
    92ac:   4649        mov r1, r9
    92ae:   4630        mov r0, r6
    92b0:   f7ff ed14   blx 8cdc <android::Parcel::writeInterfaceToken(android::String16 const&)@plt>
    92b4:   4648        mov r0, r9
    92b6:   f7ff ed06   blx 8cc4 <android::String16::~String16()@plt>
    92ba:   f10d 0984   add.w   r9, sp, #132    ; 0x84
    92be:   4648        mov r0, r9
    92c0:   f7ff fe14   bl  8eec <android::sp<android::IBinder>::~sp()+0x1c>
    92c4:   4649        mov r1, r9
    92c6:   4630        mov r0, r6
    92c8:   f7ff ed0e   blx 8ce8 <android::Parcel::writeStrongBinder(android::sp<android::IBinder> const&)@plt>
    92cc:   4648        mov r0, r9
    92ce:   f7ff fdff   bl  8ed0 <android::sp<android::IBinder>::~sp()>
    92d2:   f10d 0980   add.w   r9, sp, #128    ; 0x80
    92d6:   4992        ldr r1, [pc, #584]  ; (9520 <android::sp<android::IBinder>::~sp()+0x650>)
    92d8:   4648        mov r0, r9
    92da:   4479        add r1, pc
    92dc:   f7ff ecec   blx 8cb8 <android::String16::String16(char const*)@plt>
    92e0:   4649        mov r1, r9
    92e2:   4630        mov r0, r6
    92e4:   f7ff ed06   blx 8cf4 <android::Parcel::writeString16(android::String16 const&)@plt>
    92e8:   4648        mov r0, r9
    92ea:   f7ff ecec   blx 8cc4 <android::String16::~String16()@plt>
    92ee:   2100        movs    r1, #0
    92f0:   4630        mov r0, r6
    92f2:   f7ff ed06   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    92f6:   2100        movs    r1, #0
    92f8:   4630        mov r0, r6
    92fa:   460a        mov r2, r1
    92fc:   f7ff ed06   blx 8d0c <android::Parcel::writeString16(unsigned short const*, unsigned int)@plt>
    9300:   2100        movs    r1, #0
    9302:   4630        mov r0, r6
    9304:   f7ff ecfc   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9308:   2c03        cmp r4, #3
    930a:   dd04        ble.n   9316 <android::sp<android::IBinder>::~sp()+0x446>
    930c:   2100        movs    r1, #0
    930e:   4630        mov r0, r6
    9310:   460a        mov r2, r1
    9312:   f7ff ecfc   blx 8d0c <android::Parcel::writeString16(unsigned short const*, unsigned int)@plt>
    9316:   2100        movs    r1, #0
    9318:   ae0f        add r6, sp, #60 ; 0x3c
    931a:   460a        mov r2, r1
    931c:   4630        mov r0, r6
    931e:   f7ff ecf6   blx 8d0c <android::Parcel::writeString16(unsigned short const*, unsigned int)@plt>
    9322:   2100        movs    r1, #0
    9324:   4630        mov r0, r6
    9326:   f7ff ecec   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    932a:   2c06        cmp r4, #6
    932c:   dd09        ble.n   9342 <android::sp<android::IBinder>::~sp()+0x472>
    932e:   2100        movs    r1, #0
    9330:   4630        mov r0, r6
    9332:   f7ff ece6   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9336:   2c0e        cmp r4, #14
    9338:   dd03        ble.n   9342 <android::sp<android::IBinder>::~sp()+0x472>
    933a:   4630        mov r0, r6
    933c:   2100        movs    r1, #0
    933e:   f7ff ece0   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9342:   ac0f        add r4, sp, #60 ; 0x3c
    9344:   f04f 31ff   mov.w   r1, #4294967295 ; 0xffffffff
    9348:   4620        mov r0, r4
    934a:   ae1f        add r6, sp, #124    ; 0x7c
    934c:   f7ff ecd8   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9350:   4620        mov r0, r4
    9352:   f7ff ece2   blx 8d18 <android::Parcel::dataPosition() const@plt>
    9356:   496b        ldr r1, [pc, #428]  ; (9504 <android::sp<android::IBinder>::~sp()+0x634>)
    9358:   4681        mov r9, r0
    935a:   4620        mov r0, r4
    935c:   f7ff ecd0   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9360:   2107        movs    r1, #7
    9362:   4620        mov r0, r4
    9364:   f7ff eccc   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9368:   2100        movs    r1, #0
    936a:   4620        mov r0, r4
    936c:   f7ff ecc8   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9370:   4630        mov r0, r6
    9372:   496c        ldr r1, [pc, #432]  ; (9524 <android::sp<android::IBinder>::~sp()+0x654>)
    9374:   4479        add r1, pc
    9376:   f7ff eca0   blx 8cb8 <android::String16::String16(char const*)@plt>
    937a:   4631        mov r1, r6
    937c:   4620        mov r0, r4
    937e:   f7ff ecba   blx 8cf4 <android::Parcel::writeString16(android::String16 const&)@plt>
    9382:   4630        mov r0, r6
    9384:   f7ff ec9e   blx 8cc4 <android::String16::~String16()@plt>
    9388:   2101        movs    r1, #1
    938a:   4620        mov r0, r4
    938c:   ae1e        add r6, sp, #120    ; 0x78
    938e:   f7ff ecb8   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9392:   4641        mov r1, r8
    9394:   4620        mov r0, r4
    9396:   f7ff ecb4   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    939a:   2100        movs    r1, #0
    939c:   4620        mov r0, r4
    939e:   f7ff ecb0   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    93a2:   4630        mov r0, r6
    93a4:   4960        ldr r1, [pc, #384]  ; (9528 <android::sp<android::IBinder>::~sp()+0x658>)
    93a6:   4479        add r1, pc
    93a8:   f7ff ec86   blx 8cb8 <android::String16::String16(char const*)@plt>
    93ac:   4631        mov r1, r6
    93ae:   4620        mov r0, r4
    93b0:   f7ff eca0   blx 8cf4 <android::Parcel::writeString16(android::String16 const&)@plt>
    93b4:   4630        mov r0, r6
    93b6:   f7ff ec86   blx 8cc4 <android::String16::~String16()@plt>
    93ba:   2101        movs    r1, #1
    93bc:   4620        mov r0, r4
    93be:   f7ff eca0   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    93c2:   4639        mov r1, r7
    93c4:   4620        mov r0, r4
    93c6:   af1d        add r7, sp, #116    ; 0x74
    93c8:   f7ff ec9a   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    93cc:   2100        movs    r1, #0
    93ce:   4620        mov r0, r4
    93d0:   f7ff ec96   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    93d4:   4638        mov r0, r7
    93d6:   4955        ldr r1, [pc, #340]  ; (952c <android::sp<android::IBinder>::~sp()+0x65c>)
    93d8:   4479        add r1, pc
    93da:   f7ff ec6e   blx 8cb8 <android::String16::String16(char const*)@plt>
    93de:   4639        mov r1, r7
    93e0:   4620        mov r0, r4
    93e2:   f7ff ec88   blx 8cf4 <android::Parcel::writeString16(android::String16 const&)@plt>
    93e6:   4638        mov r0, r7
    93e8:   f7ff ec6c   blx 8cc4 <android::String16::~String16()@plt>
    93ec:   2101        movs    r1, #1
    93ee:   4620        mov r0, r4
    93f0:   af1c        add r7, sp, #112    ; 0x70
    93f2:   f7ff ec86   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    93f6:   4651        mov r1, sl
    93f8:   4620        mov r0, r4
    93fa:   f7ff ec82   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    93fe:   4620        mov r0, r4
    9400:   f7ff ec8a   blx 8d18 <android::Parcel::dataPosition() const@plt>
    9404:   f1a9 0104   sub.w   r1, r9, #4
    9408:   4606        mov r6, r0
    940a:   4620        mov r0, r4
    940c:   f7ff ec8a   blx 8d24 <android::Parcel::setDataPosition(unsigned int) const@plt>
    9410:   ebc9 0106   rsb r1, r9, r6
    9414:   4620        mov r0, r4
    9416:   f7ff ec74   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    941a:   4631        mov r1, r6
    941c:   4620        mov r0, r4
    941e:   ae1b        add r6, sp, #108    ; 0x6c
    9420:   f7ff ec80   blx 8d24 <android::Parcel::setDataPosition(unsigned int) const@plt>
    9424:   2100        movs    r1, #0
    9426:   4620        mov r0, r4
    9428:   460a        mov r2, r1
    942a:   f7ff ec70   blx 8d0c <android::Parcel::writeString16(unsigned short const*, unsigned int)@plt>
    942e:   f04f 31ff   mov.w   r1, #4294967295 ; 0xffffffff
    9432:   4620        mov r0, r4
    9434:   f7ff ec64   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9438:   4638        mov r0, r7
    943a:   f7ff fd57   bl  8eec <android::sp<android::IBinder>::~sp()+0x1c>
    943e:   4639        mov r1, r7
    9440:   4620        mov r0, r4
    9442:   f7ff ec52   blx 8ce8 <android::Parcel::writeStrongBinder(android::sp<android::IBinder> const&)@plt>
    9446:   4638        mov r0, r7
    9448:   f7ff fd42   bl  8ed0 <android::sp<android::IBinder>::~sp()>
    944c:   f04f 31ff   mov.w   r1, #4294967295 ; 0xffffffff
    9450:   4620        mov r0, r4
    9452:   f7ff ec56   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9456:   2100        movs    r1, #0
    9458:   4620        mov r0, r4
    945a:   460a        mov r2, r1
    945c:   f7ff ec56   blx 8d0c <android::Parcel::writeString16(unsigned short const*, unsigned int)@plt>
    9460:   f04f 31ff   mov.w   r1, #4294967295 ; 0xffffffff
    9464:   4620        mov r0, r4
    9466:   f7ff ec4c   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    946a:   4630        mov r0, r6
    946c:   4930        ldr r1, [pc, #192]  ; (9530 <android::sp<android::IBinder>::~sp()+0x660>)
    946e:   4479        add r1, pc
    9470:   f7ff ec22   blx 8cb8 <android::String16::String16(char const*)@plt>
    9474:   4631        mov r1, r6
    9476:   4620        mov r0, r4
    9478:   f7ff ec3c   blx 8cf4 <android::Parcel::writeString16(android::String16 const&)@plt>
    947c:   4630        mov r0, r6
    947e:   f7ff ec22   blx 8cc4 <android::String16::~String16()@plt>
    9482:   2100        movs    r1, #0
    9484:   4620        mov r0, r4
    9486:   460a        mov r2, r1
    9488:   f7ff ec40   blx 8d0c <android::Parcel::writeString16(unsigned short const*, unsigned int)@plt>
    948c:   2100        movs    r1, #0
    948e:   4620        mov r0, r4
    9490:   ae03        add r6, sp, #12
    9492:   f7ff ec36   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    9496:   2100        movs    r1, #0
    9498:   4620        mov r0, r4
    949a:   f7ff ec32   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    949e:   f04f 31ff   mov.w   r1, #4294967295 ; 0xffffffff
    94a2:   4620        mov r0, r4
    94a4:   f7ff ec2c   blx 8d00 <android::Parcel::writeInt32(int)@plt>
    94a8:   9824        ldr r0, [sp, #144]  ; 0x90
    94aa:   2100        movs    r1, #0
    94ac:   6803        ldr r3, [r0, #0]
    94ae:   4622        mov r2, r4
    94b0:   9100        str r1, [sp, #0]
    94b2:   210e        movs    r1, #14
    94b4:   695f        ldr r7, [r3, #20]
    94b6:   4633        mov r3, r6
    94b8:   47b8        blx r7
    94ba:   2800        cmp r0, #0
    94bc:   bfb4        ite lt
    94be:   f04f 37ff   movlt.w r7, #4294967295 ; 0xffffffff
    94c2:   2700        movge   r7, #0
    94c4:   4630        mov r0, r6
    94c6:   f7ff ec34   blx 8d30 <android::Parcel::~Parcel()@plt>
    94ca:   4620        mov r0, r4
    94cc:   f7ff ec30   blx 8d30 <android::Parcel::~Parcel()@plt>
    94d0:   a824        add r0, sp, #144    ; 0x90
    94d2:   f7ff fcfd   bl  8ed0 <android::sp<android::IBinder>::~sp()>
    94d6:   9b25        ldr r3, [sp, #148]  ; 0x94
    94d8:   b133        cbz r3, 94e8 <android::sp<android::IBinder>::~sp()+0x618>
    94da:   681a        ldr r2, [r3, #0]
    94dc:   a925        add r1, sp, #148    ; 0x94
    94de:   f852 0c0c   ldr.w   r0, [r2, #-12]
    94e2:   1818        adds    r0, r3, r0
    94e4:   f7ff ebca   blx 8c7c <android::RefBase::decStrong(void const*) const@plt>
    94e8:   993d        ldr r1, [sp, #244]  ; 0xf4
    94ea:   f8df c01c   ldr.w   ip, [pc, #28]   ; 9508 <android::sp<android::IBinder>::~sp()+0x638>
    94ee:   4638        mov r0, r7
    94f0:   f855 200c   ldr.w   r2, [r5, ip]
    94f4:   6813        ldr r3, [r2, #0]
    94f6:   4299        cmp r1, r3
    94f8:   d001        beq.n   94fe <android::sp<android::IBinder>::~sp()+0x62e>
    94fa:   f7ff ec20   blx 8d3c <__stack_chk_fail@plt>
    94fe:   b03f        add sp, #252    ; 0xfc
    9500:   e8bd 8ff0   ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
    9504:   4e42        ldr r6, [pc, #264]  ; (9610 <android::sp<android::IBinder>::~sp()+0x740>)
    9506:   4c44        ldr r4, [pc, #272]  ; (9618 <android::sp<android::IBinder>::~sp()+0x748>)
    9508:   fffc ffff           ; <UNDEFINED> instruction: 0xfffcffff
    950c:   0ee2        lsrs    r2, r4, #27
    950e:   0000        movs    r0, r0
    9510:   07d8        lsls    r0, r3, #31
    9512:   0000        movs    r0, r0
    9514:   07e9        lsls    r1, r5, #31
    9516:   0000        movs    r0, r0
    9518:   07cb        lsls    r3, r1, #31
    951a:   0000        movs    r0, r0
    951c:   079a        lsls    r2, r3, #30
    951e:   0000        movs    r0, r0
    9520:   07e9        lsls    r1, r5, #31
    9522:   0000        movs    r0, r0
    9524:   0778        lsls    r0, r7, #29
    9526:   0000        movs    r0, r0
    9528:   06eb        lsls    r3, r5, #27
    952a:   0000        movs    r0, r0
    952c:   06bd        lsls    r5, r7, #26
    952e:   0000        movs    r0, r0
    9530:   062b        lsls    r3, r5, #24
    9532:   0000        movs    r0, r0
    9534:   b510        push    {r4, lr}
    9536:   480f        ldr r0, [pc, #60]   ; (9574 <android::sp<android::IBinder>::~sp()+0x6a4>)
    9538:   4478        add r0, pc
    953a:   f7ff ec06   blx 8d48 <puts@plt>
    953e:   480e        ldr r0, [pc, #56]   ; (9578 <android::sp<android::IBinder>::~sp()+0x6a8>)
    9540:   4478        add r0, pc
    9542:   f7ff ec02   blx 8d48 <puts@plt>
    9546:   480d        ldr r0, [pc, #52]   ; (957c <android::sp<android::IBinder>::~sp()+0x6ac>)
    9548:   4478        add r0, pc
    954a:   f7ff ebfe   blx 8d48 <puts@plt>
    954e:   480c        ldr r0, [pc, #48]   ; (9580 <android::sp<android::IBinder>::~sp()+0x6b0>)
    9550:   4478        add r0, pc
    9552:   f7ff ebfa   blx 8d48 <puts@plt>
    9556:   200a        movs    r0, #10
    9558:   f7ff ebfc   blx 8d54 <putchar@plt>
    955c:   4809        ldr r0, [pc, #36]   ; (9584 <android::sp<android::IBinder>::~sp()+0x6b4>)
    955e:   4478        add r0, pc
    9560:   f7ff ebf2   blx 8d48 <puts@plt>
    9564:   4808        ldr r0, [pc, #32]   ; (9588 <android::sp<android::IBinder>::~sp()+0x6b8>)
    9566:   4478        add r0, pc
    9568:   f7ff ebee   blx 8d48 <puts@plt>
    956c:   2000        movs    r0, #0
    956e:   f7ff ebf8   blx 8d60 <exit@plt>
    9572:   bf00        nop
    9574:   05c1        lsls    r1, r0, #23
    9576:   0000        movs    r0, r0
    9578:   05cd        lsls    r5, r1, #23
    957a:   0000        movs    r0, r0
    957c:   05ce        lsls    r6, r1, #23
    957e:   0000        movs    r0, r0
    9580:   05e3        lsls    r3, r4, #23
    9582:   0000        movs    r0, r0
    9584:   05ee        lsls    r6, r5, #23
    9586:   0000        movs    r0, r0
    9588:   05f6        lsls    r6, r6, #23
    958a:   0000        movs    r0, r0
    958c:   e92d 4ff0   stmdb   sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
    9590:   4930        ldr r1, [pc, #192]  ; (9654 <android::sp<android::IBinder>::~sp()+0x784>)
    9592:   b09f        sub sp, #124    ; 0x7c
    9594:   2200        movs    r2, #0
    9596:   4d30        ldr r5, [pc, #192]  ; (9658 <android::sp<android::IBinder>::~sp()+0x788>)
    9598:   447d        add r5, pc
    959a:   5868        ldr r0, [r5, r1]
    959c:   6803        ldr r3, [r0, #0]
    959e:   2001        movs    r0, #1
    95a0:   4601        mov r1, r0
    95a2:   931d        str r3, [sp, #116]  ; 0x74
    95a4:   f7ff ebe2   blx 8d6c <socket@plt>
    95a8:   4604        mov r4, r0
    95aa:   2800        cmp r0, #0
    95ac:   bfb8        it  lt
    95ae:   f04f 34ff   movlt.w r4, #4294967295 ; 0xffffffff
    95b2:   db40        blt.n   9636 <android::sp<android::IBinder>::~sp()+0x766>
    95b4:   f10d 0904   add.w   r9, sp, #4
    95b8:   4f28        ldr r7, [pc, #160]  ; (965c <android::sp<android::IBinder>::~sp()+0x78c>)
    95ba:   f8df 80a4   ldr.w   r8, [pc, #164]  ; 9660 <android::sp<android::IBinder>::~sp()+0x790>
    95be:   4e29        ldr r6, [pc, #164]  ; (9664 <android::sp<android::IBinder>::~sp()+0x794>)
    95c0:   f8df a0a4   ldr.w   sl, [pc, #164]  ; 9668 <android::sp<android::IBinder>::~sp()+0x798>
    95c4:   447f        add r7, pc
    95c6:   44f8        add r8, pc
    95c8:   447e        add r6, pc
    95ca:   f109 0b02   add.w   fp, r9, #2
    95ce:   44fa        add sl, pc
    95d0:   2100        movs    r1, #0
    95d2:   226e        movs    r2, #110    ; 0x6e
    95d4:   4648        mov r0, r9
    95d6:   f7ff eb58   blx 8c88 <memset@plt>
    95da:   4641        mov r1, r8
    95dc:   4638        mov r0, r7
    95de:   f04f 0201   mov.w   r2, #1
    95e2:   f8ad 2004   strh.w  r2, [sp, #4]
    95e6:   f7ff ebc8   blx 8d78 <strcpy@plt>
    95ea:   4638        mov r0, r7
    95ec:   f7ff ebca   blx 8d84 <mktemp@plt>
    95f0:   216c        movs    r1, #108    ; 0x6c
    95f2:   4603        mov r3, r0
    95f4:   4652        mov r2, sl
    95f6:   f846 0cf8   str.w   r0, [r6, #-248]
    95fa:   4658        mov r0, fp
    95fc:   f7ff ebc8   blx 8d90 <snprintf@plt>
    9600:   f856 0cf8   ldr.w   r0, [r6, #-248]
    9604:   f7ff ebca   blx 8d9c <unlink@plt>
    9608:   226e        movs    r2, #110    ; 0x6e
    960a:   4620        mov r0, r4
    960c:   4649        mov r1, r9
    960e:   f7ff ebcc   blx 8da8 <bind@plt>
    9612:   2800        cmp r0, #0
    9614:   da07        bge.n   9626 <android::sp<android::IBinder>::~sp()+0x756>
    9616:   f7ff ebce   blx 8db4 <__errno@plt>
    961a:   6803        ldr r3, [r0, #0]
    961c:   2b62        cmp r3, #98 ; 0x62
    961e:   d0d7        beq.n   95d0 <android::sp<android::IBinder>::~sp()+0x700>
    9620:   f06f 0401   mvn.w   r4, #1
    9624:   e007        b.n 9636 <android::sp<android::IBinder>::~sp()+0x766>
    9626:   4620        mov r0, r4
    9628:   2101        movs    r1, #1
    962a:   f7ff ebca   blx 8dc0 <listen@plt>
    962e:   2800        cmp r0, #0
    9630:   bfb8        it  lt
    9632:   f06f 0402   mvnlt.w r4, #2
    9636:   991d        ldr r1, [sp, #116]  ; 0x74
    9638:   f8df c018   ldr.w   ip, [pc, #24]   ; 9654 <android::sp<android::IBinder>::~sp()+0x784>
    963c:   4620        mov r0, r4
    963e:   f855 300c   ldr.w   r3, [r5, ip]
    9642:   681a        ldr r2, [r3, #0]
    9644:   4291        cmp r1, r2
    9646:   d001        beq.n   964c <android::sp<android::IBinder>::~sp()+0x77c>
    9648:   f7ff eb78   blx 8d3c <__stack_chk_fail@plt>
    964c:   b01f        add sp, #124    ; 0x7c
    964e:   e8bd 8ff0   ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
    9652:   bf00        nop
    9654:   fffc ffff           ; <UNDEFINED> instruction: 0xfffcffff
    9658:   0b70        lsrs    r0, r6, #13
    965a:   0000        movs    r0, r0
    965c:   0c28        lsrs    r0, r5, #16
    965e:   0000        movs    r0, r0
    9660:   05af        lsls    r7, r5, #22
    9662:   0000        movs    r0, r0
    9664:   1d1c        adds    r4, r3, #4
    9666:   0000        movs    r0, r0
    9668:   05e8        lsls    r0, r5, #23
    966a:   0000        movs    r0, r0
    966c:   b570        push    {r4, r5, r6, lr}
    966e:   2280        movs    r2, #128    ; 0x80
    9670:   b0a4        sub sp, #144    ; 0x90
    9672:   4605        mov r5, r0
    9674:   241e        movs    r4, #30
    9676:   ae02        add r6, sp, #8
    9678:   9422        str r4, [sp, #136]  ; 0x88
    967a:   4630        mov r0, r6
    967c:   2400        movs    r4, #0
    967e:   4621        mov r1, r4
    9680:   9423        str r4, [sp, #140]  ; 0x8c
    9682:   f7ff eb02   blx 8c88 <memset@plt>
    9686:   116b        asrs    r3, r5, #5
    9688:   2101        movs    r1, #1
    968a:   f10d 0c90   add.w   ip, sp, #144    ; 0x90
    968e:   f005 021f   and.w   r2, r5, #31
    9692:   eb0c 0083   add.w   r0, ip, r3, lsl #2
    9696:   fa11 f202   lsls.w  r2, r1, r2
    969a:   ab22        add r3, sp, #136    ; 0x88
    969c:   f850 1c88   ldr.w   r1, [r0, #-136]
    96a0:   430a        orrs    r2, r1
    96a2:   4631        mov r1, r6
    96a4:   f840 2c88   str.w   r2, [r0, #-136]
    96a8:   1c68        adds    r0, r5, #1
    96aa:   9300        str r3, [sp, #0]
    96ac:   4622        mov r2, r4
    96ae:   4623        mov r3, r4
    96b0:   f7ff eb8c   blx 8dcc <select@plt>
    96b4:   42a0        cmp r0, r4
    96b6:   dd06        ble.n   96c6 <android::sp<android::IBinder>::~sp()+0x7f6>
    96b8:   4628        mov r0, r5
    96ba:   4621        mov r1, r4
    96bc:   4622        mov r2, r4
    96be:   f7ff eb8c   blx 8dd8 <accept@plt>
    96c2:   42a0        cmp r0, r4
    96c4:   da01        bge.n   96ca <android::sp<android::IBinder>::~sp()+0x7fa>
    96c6:   f04f 30ff   mov.w   r0, #4294967295 ; 0xffffffff
    96ca:   b024        add sp, #144    ; 0x90
    96cc:   bd70        pop {r4, r5, r6, pc}
    96ce:   bf00        nop
    96d0:   b570        push    {r4, r5, r6, lr}
    96d2:   2000        movs    r0, #0
    96d4:   4b18        ldr r3, [pc, #96]   ; (9738 <android::sp<android::IBinder>::~sp()+0x868>)
    96d6:   447b        add r3, pc
    96d8:   685a        ldr r2, [r3, #4]
    96da:   6819        ldr r1, [r3, #0]
    96dc:   f7ff fd9c   bl  9218 <android::sp<android::IBinder>::~sp()+0x348>
    96e0:   4b16        ldr r3, [pc, #88]   ; (973c <android::sp<android::IBinder>::~sp()+0x86c>)
    96e2:   447b        add r3, pc
    96e4:   f853 2cf4   ldr.w   r2, [r3, #-244]
    96e8:   2a02        cmp r2, #2
    96ea:   dd1b        ble.n   9724 <android::sp<android::IBinder>::~sp()+0x854>
    96ec:   f853 4cf0   ldr.w   r4, [r3, #-240]
    96f0:   4913        ldr r1, [pc, #76]   ; (9740 <android::sp<android::IBinder>::~sp()+0x870>)
    96f2:   6865        ldr r5, [r4, #4]
    96f4:   4479        add r1, pc
    96f6:   4628        mov r0, r5
    96f8:   f7ff eb74   blx 8de4 <strcmp@plt>
    96fc:   b128        cbz r0, 970a <android::sp<android::IBinder>::~sp()+0x83a>
    96fe:   4911        ldr r1, [pc, #68]   ; (9744 <android::sp<android::IBinder>::~sp()+0x874>)
    9700:   4628        mov r0, r5
    9702:   4479        add r1, pc
    9704:   f7ff eb6e   blx 8de4 <strcmp@plt>
    9708:   b960        cbnz    r0, 9724 <android::sp<android::IBinder>::~sp()+0x854>
    970a:   f104 0108   add.w   r1, r4, #8
    970e:   68a0        ldr r0, [r4, #8]
    9710:   f7ff eb6e   blx 8df0 <execvp@plt>
    9714:   2800        cmp r0, #0
    9716:   da0c        bge.n   9732 <android::sp<android::IBinder>::~sp()+0x862>
    9718:   480b        ldr r0, [pc, #44]   ; (9748 <android::sp<android::IBinder>::~sp()+0x878>)
    971a:   4478        add r0, pc
    971c:   f7ff eb14   blx 8d48 <puts@plt>
    9720:   2001        movs    r0, #1
    9722:   e007        b.n 9734 <android::sp<android::IBinder>::~sp()+0x864>
    9724:   4809        ldr r0, [pc, #36]   ; (974c <android::sp<android::IBinder>::~sp()+0x87c>)
    9726:   490a        ldr r1, [pc, #40]   ; (9750 <android::sp<android::IBinder>::~sp()+0x880>)
    9728:   4478        add r0, pc
    972a:   4479        add r1, pc
    972c:   2200        movs    r2, #0
    972e:   f7ff eb66   blx 8dfc <execlp@plt>
    9732:   2000        movs    r0, #0
    9734:   bd70        pop {r4, r5, r6, pc}
    9736:   bf00        nop
    9738:   0af6        lsrs    r6, r6, #11
    973a:   0000        movs    r0, r0
    973c:   1c02        adds    r2, r0, #0
    973e:   0000        movs    r0, r0
    9740:   04c5        lsls    r5, r0, #19
    9742:   0000        movs    r0, r0
    9744:   04ba        lsls    r2, r7, #18
    9746:   0000        movs    r0, r0
    9748:   04ac        lsls    r4, r5, #18
    974a:   0000        movs    r0, r0
    974c:   04b4        lsls    r4, r6, #18
    974e:   0000        movs    r0, r0
    9750:   04c1        lsls    r1, r0, #19
    9752:   0000        movs    r0, r0
    9754:   b510        push    {r4, lr}
    9756:   4b05        ldr r3, [pc, #20]   ; (976c <android::sp<android::IBinder>::~sp()+0x89c>)
    9758:   f04f 30ff   mov.w   r0, #4294967295 ; 0xffffffff
    975c:   447b        add r3, pc
    975e:   6819        ldr r1, [r3, #0]
    9760:   685a        ldr r2, [r3, #4]
    9762:   f7ff fd59   bl  9218 <android::sp<android::IBinder>::~sp()+0x348>
    9766:   2001        movs    r0, #1
    9768:   bd10        pop {r4, pc}
    976a:   bf00        nop
    976c:   0a70        lsrs    r0, r6, #9
    976e:   0000        movs    r0, r0
    9770:   b510        push    {r4, lr}
    9772:   4c07        ldr r4, [pc, #28]   ; (9790 <android::sp<android::IBinder>::~sp()+0x8c0>)
    9774:   447c        add r4, pc
    9776:   f854 0cf8   ldr.w   r0, [r4, #-248]
    977a:   f7ff eb10   blx 8d9c <unlink@plt>
    977e:   f854 0cf0   ldr.w   r0, [r4, #-240]
    9782:   b120        cbz r0, 978e <android::sp<android::IBinder>::~sp()+0x8be>
    9784:   f7ff eb40   blx 8e08 <free@plt>
    9788:   2300        movs    r3, #0
    978a:   f844 3cf0   str.w   r3, [r4, #-240]
    978e:   bd10        pop {r4, pc}
    9790:   1b70        subs    r0, r6, r5
    9792:   0000        movs    r0, r0
    9794:   b510        push    {r4, lr}
    9796:   f7ff ffeb   bl  9770 <android::sp<android::IBinder>::~sp()+0x8a0>
    979a:   bd10        pop {r4, pc}
    979c:   b510        push    {r4, lr}
    979e:   4604        mov r4, r0
    97a0:   f7ff ffe6   bl  9770 <android::sp<android::IBinder>::~sp()+0x8a0>
    97a4:   4620        mov r0, r4
    97a6:   f7ff eadc   blx 8d60 <exit@plt>
    97aa:   bf00        nop
    97ac:   b570        push    {r4, r5, r6, lr}
    97ae:   4605        mov r5, r0
    97b0:   460c        mov r4, r1
    97b2:   4628        mov r0, r5
    97b4:   f7ff ff5a   bl  966c <android::sp<android::IBinder>::~sp()+0x79c>
    97b8:   2800        cmp r0, #0
    97ba:   db0a        blt.n   97d2 <android::sp<android::IBinder>::~sp()+0x902>
    97bc:   223f        movs    r2, #63 ; 0x3f
    97be:   4621        mov r1, r4
    97c0:   f7ff eb28   blx 8e14 <read@plt>
    97c4:   2800        cmp r0, #0
    97c6:   db04        blt.n   97d2 <android::sp<android::IBinder>::~sp()+0x902>
    97c8:   d0f3        beq.n   97b2 <android::sp<android::IBinder>::~sp()+0x8e2>
    97ca:   2300        movs    r3, #0
    97cc:   5423        strb    r3, [r4, r0]
    97ce:   4618        mov r0, r3
    97d0:   e001        b.n 97d6 <android::sp<android::IBinder>::~sp()+0x906>
    97d2:   f04f 30ff   mov.w   r0, #4294967295 ; 0xffffffff
    97d6:   bd70        pop {r4, r5, r6, pc}
    97d8:   b5f0        push    {r4, r5, r6, r7, lr}
    97da:   4606        mov r6, r0
    97dc:   b0ed        sub sp, #436    ; 0x1b4
    97de:   4d7a        ldr r5, [pc, #488]  ; (99c8 <android::sp<android::IBinder>::~sp()+0xaf8>)
    97e0:   460f        mov r7, r1
    97e2:   447d        add r5, pc
    97e4:   4979        ldr r1, [pc, #484]  ; (99cc <android::sp<android::IBinder>::~sp()+0xafc>)
    97e6:   5868        ldr r0, [r5, r1]
    97e8:   2e02        cmp r6, #2
    97ea:   6803        ldr r3, [r0, #0]
    97ec:   936b        str r3, [sp, #428]  ; 0x1ac
    97ee:   d10e        bne.n   980e <android::sp<android::IBinder>::~sp()+0x93e>
    97f0:   687c        ldr r4, [r7, #4]
    97f2:   4977        ldr r1, [pc, #476]  ; (99d0 <android::sp<android::IBinder>::~sp()+0xb00>)
    97f4:   4620        mov r0, r4
    97f6:   4479        add r1, pc
    97f8:   f7ff eaf4   blx 8de4 <strcmp@plt>
    97fc:   b128        cbz r0, 980a <android::sp<android::IBinder>::~sp()+0x93a>
    97fe:   4975        ldr r1, [pc, #468]  ; (99d4 <android::sp<android::IBinder>::~sp()+0xb04>)
    9800:   4620        mov r0, r4
    9802:   4479        add r1, pc
    9804:   f7ff eaee   blx 8de4 <strcmp@plt>
    9808:   b908        cbnz    r0, 980e <android::sp<android::IBinder>::~sp()+0x93e>
    980a:   f7ff fe93   bl  9534 <android::sp<android::IBinder>::~sp()+0x664>
    980e:   1c72        adds    r2, r6, #1
    9810:   4c71        ldr r4, [pc, #452]  ; (99d8 <android::sp<android::IBinder>::~sp()+0xb08>)
    9812:   0090        lsls    r0, r2, #2
    9814:   447c        add r4, pc
    9816:   f844 6cf4   str.w   r6, [r4, #-244]
    981a:   f7ff eb02   blx 8e20 <malloc@plt>
    981e:   f844 0cf0   str.w   r0, [r4, #-240]
    9822:   b188        cbz r0, 9848 <android::sp<android::IBinder>::~sp()+0x978>
    9824:   f854 2cf4   ldr.w   r2, [r4, #-244]
    9828:   1c51        adds    r1, r2, #1
    982a:   008a        lsls    r2, r1, #2
    982c:   2100        movs    r1, #0
    982e:   f7ff ea2c   blx 8c88 <memset@plt>
    9832:   f854 3cf4   ldr.w   r3, [r4, #-244]
    9836:   f854 0cf0   ldr.w   r0, [r4, #-240]
    983a:   009a        lsls    r2, r3, #2
    983c:   4639        mov r1, r7
    983e:   f7ff eaf6   blx 8e2c <memcpy@plt>
    9842:   2e01        cmp r6, #1
    9844:   dc03        bgt.n   984e <android::sp<android::IBinder>::~sp()+0x97e>
    9846:   e012        b.n 986e <android::sp<android::IBinder>::~sp()+0x99e>
    9848:   f844 0cf4   str.w   r0, [r4, #-244]
    984c:   e0ab        b.n 99a6 <android::sp<android::IBinder>::~sp()+0xad6>
    984e:   4963        ldr r1, [pc, #396]  ; (99dc <android::sp<android::IBinder>::~sp()+0xb0c>)
    9850:   6878        ldr r0, [r7, #4]
    9852:   4479        add r1, pc
    9854:   f7ff eac6   blx 8de4 <strcmp@plt>
    9858:   4606        mov r6, r0
    985a:   b940        cbnz    r0, 986e <android::sp<android::IBinder>::~sp()+0x99e>
    985c:   4860        ldr r0, [pc, #384]  ; (99e0 <android::sp<android::IBinder>::~sp()+0xb10>)
    985e:   4478        add r0, pc
    9860:   f7ff ea72   blx 8d48 <puts@plt>
    9864:   4630        mov r0, r6
    9866:   f7ff eae8   blx 8e38 <setgid@plt>
    986a:   b358        cbz r0, 98c4 <android::sp<android::IBinder>::~sp()+0x9f4>
    986c:   e02d        b.n 98ca <android::sp<android::IBinder>::~sp()+0x9fa>
    986e:   f7ff eaea   blx 8e44 <getppid@plt>
    9872:   ae1b        add r6, sp, #108    ; 0x6c
    9874:   2100        movs    r1, #0
    9876:   f44f 7280   mov.w   r2, #256    ; 0x100
    987a:   4c5a        ldr r4, [pc, #360]  ; (99e4 <android::sp<android::IBinder>::~sp()+0xb14>)
    987c:   447c        add r4, pc
    987e:   6060        str r0, [r4, #4]
    9880:   4630        mov r0, r6
    9882:   f7ff ea02   blx 8c88 <memset@plt>
    9886:   6862        ldr r2, [r4, #4]
    9888:   4630        mov r0, r6
    988a:   4957        ldr r1, [pc, #348]  ; (99e8 <android::sp<android::IBinder>::~sp()+0xb18>)
    988c:   4479        add r1, pc
    988e:   466f        mov r7, sp
    9890:   f7ff eade   blx 8e50 <sprintf@plt>
    9894:   4630        mov r0, r6
    9896:   4669        mov r1, sp
    9898:   f7ff eae0   blx 8e5c <stat@plt>
    989c:   2240        movs    r2, #64 ; 0x40
    989e:   9e06        ldr r6, [sp, #24]
    98a0:   2100        movs    r1, #0
    98a2:   6026        str r6, [r4, #0]
    98a4:   ae5b        add r6, sp, #364    ; 0x16c
    98a6:   4630        mov r0, r6
    98a8:   f7ff e9ee   blx 8c88 <memset@plt>
    98ac:   f44f 71fc   mov.w   r1, #504    ; 0x1f8
    98b0:   484e        ldr r0, [pc, #312]  ; (99ec <android::sp<android::IBinder>::~sp()+0xb1c>)
    98b2:   4478        add r0, pc
    98b4:   f7ff ead8   blx 8e68 <mkdir@plt>
    98b8:   f7ff fe68   bl  958c <android::sp<android::IBinder>::~sp()+0x6bc>
    98bc:   60a0        str r0, [r4, #8]
    98be:   2800        cmp r0, #0
    98c0:   da33        bge.n   992a <android::sp<android::IBinder>::~sp()+0xa5a>
    98c2:   e02d        b.n 9920 <android::sp<android::IBinder>::~sp()+0xa50>
    98c4:   f7ff ead6   blx 8e74 <setuid@plt>
    98c8:   b110        cbz r0, 98d0 <android::sp<android::IBinder>::~sp()+0xa00>
    98ca:   4849        ldr r0, [pc, #292]  ; (99f0 <android::sp<android::IBinder>::~sp()+0xb20>)
    98cc:   4478        add r0, pc
    98ce:   e01b        b.n 9908 <android::sp<android::IBinder>::~sp()+0xa38>
    98d0:   f854 0cf4   ldr.w   r0, [r4, #-244]
    98d4:   2803        cmp r0, #3
    98d6:   dd1a        ble.n   990e <android::sp<android::IBinder>::~sp()+0xa3e>
    98d8:   f854 4cf0   ldr.w   r4, [r4, #-240]
    98dc:   4945        ldr r1, [pc, #276]  ; (99f4 <android::sp<android::IBinder>::~sp()+0xb24>)
    98de:   68a6        ldr r6, [r4, #8]
    98e0:   4479        add r1, pc
    98e2:   4630        mov r0, r6
    98e4:   f7ff ea7e   blx 8de4 <strcmp@plt>
    98e8:   b128        cbz r0, 98f6 <android::sp<android::IBinder>::~sp()+0xa26>
    98ea:   4943        ldr r1, [pc, #268]  ; (99f8 <android::sp<android::IBinder>::~sp()+0xb28>)
    98ec:   4630        mov r0, r6
    98ee:   4479        add r1, pc
    98f0:   f7ff ea78   blx 8de4 <strcmp@plt>
    98f4:   b958        cbnz    r0, 990e <android::sp<android::IBinder>::~sp()+0xa3e>
    98f6:   f104 010c   add.w   r1, r4, #12
    98fa:   68e0        ldr r0, [r4, #12]
    98fc:   f7ff ea78   blx 8df0 <execvp@plt>
    9900:   2800        cmp r0, #0
    9902:   da53        bge.n   99ac <android::sp<android::IBinder>::~sp()+0xadc>
    9904:   483d        ldr r0, [pc, #244]  ; (99fc <android::sp<android::IBinder>::~sp()+0xb2c>)
    9906:   4478        add r0, pc
    9908:   f7ff ea1e   blx 8d48 <puts@plt>
    990c:   e006        b.n 991c <android::sp<android::IBinder>::~sp()+0xa4c>
    990e:   483c        ldr r0, [pc, #240]  ; (9a00 <android::sp<android::IBinder>::~sp()+0xb30>)
    9910:   493c        ldr r1, [pc, #240]  ; (9a04 <android::sp<android::IBinder>::~sp()+0xb34>)
    9912:   4478        add r0, pc
    9914:   4479        add r1, pc
    9916:   2200        movs    r2, #0
    9918:   f7ff ea70   blx 8dfc <execlp@plt>
    991c:   2001        movs    r0, #1
    991e:   e046        b.n 99ae <android::sp<android::IBinder>::~sp()+0xade>
    9920:   f7ff ff18   bl  9754 <android::sp<android::IBinder>::~sp()+0x884>
    9924:   f04f 30ff   mov.w   r0, #4294967295 ; 0xffffffff
    9928:   e041        b.n 99ae <android::sp<android::IBinder>::~sp()+0xade>
    992a:   6862        ldr r2, [r4, #4]
    992c:   6821        ldr r1, [r4, #0]
    992e:   4f36        ldr r7, [pc, #216]  ; (9a08 <android::sp<android::IBinder>::~sp()+0xb38>)
    9930:   447f        add r7, pc
    9932:   f857 0cf8   ldr.w   r0, [r7, #-248]
    9936:   4d35        ldr r5, [pc, #212]  ; (9a0c <android::sp<android::IBinder>::~sp()+0xb3c>)
    9938:   f7ff fadc   bl  8ef4 <android::sp<android::IBinder>::~sp()+0x24>
    993c:   447d        add r5, pc
    993e:   2001        movs    r0, #1
    9940:   4629        mov r1, r5
    9942:   f7ff ea9e   blx 8e80 <bsd_signal@plt>
    9946:   200d        movs    r0, #13
    9948:   4629        mov r1, r5
    994a:   f7ff ea9a   blx 8e80 <bsd_signal@plt>
    994e:   200f        movs    r0, #15
    9950:   4629        mov r1, r5
    9952:   f7ff ea96   blx 8e80 <bsd_signal@plt>
    9956:   4629        mov r1, r5
    9958:   2006        movs    r0, #6
    995a:   f7ff ea92   blx 8e80 <bsd_signal@plt>
    995e:   482c        ldr r0, [pc, #176]  ; (9a10 <android::sp<android::IBinder>::~sp()+0xb40>)
    9960:   4478        add r0, pc
    9962:   f7ff ea94   blx 8e8c <atexit@plt>
    9966:   68a0        ldr r0, [r4, #8]
    9968:   4631        mov r1, r6
    996a:   f7ff ff1f   bl  97ac <android::sp<android::IBinder>::~sp()+0x8dc>
    996e:   2800        cmp r0, #0
    9970:   da08        bge.n   9984 <android::sp<android::IBinder>::~sp()+0xab4>
    9972:   f06f 0001   mvn.w   r0, #1
    9976:   6821        ldr r1, [r4, #0]
    9978:   6862        ldr r2, [r4, #4]
    997a:   f7ff fc4d   bl  9218 <android::sp<android::IBinder>::~sp()+0x348>
    997e:   2001        movs    r0, #1
    9980:   f7ff e9ee   blx 8d60 <exit@plt>
    9984:   4923        ldr r1, [pc, #140]  ; (9a14 <android::sp<android::IBinder>::~sp()+0xb44>)
    9986:   4630        mov r0, r6
    9988:   4479        add r1, pc
    998a:   f7ff ea2c   blx 8de4 <strcmp@plt>
    998e:   b150        cbz r0, 99a6 <android::sp<android::IBinder>::~sp()+0xad6>
    9990:   4921        ldr r1, [pc, #132]  ; (9a18 <android::sp<android::IBinder>::~sp()+0xb48>)
    9992:   4630        mov r0, r6
    9994:   4479        add r1, pc
    9996:   f7ff ea26   blx 8de4 <strcmp@plt>
    999a:   4604        mov r4, r0
    999c:   b918        cbnz    r0, 99a6 <android::sp<android::IBinder>::~sp()+0xad6>
    999e:   f7ff fe97   bl  96d0 <android::sp<android::IBinder>::~sp()+0x800>
    99a2:   4620        mov r0, r4
    99a4:   e7ec        b.n 9980 <android::sp<android::IBinder>::~sp()+0xab0>
    99a6:   f7ff fed5   bl  9754 <android::sp<android::IBinder>::~sp()+0x884>
    99aa:   e7e8        b.n 997e <android::sp<android::IBinder>::~sp()+0xaae>
    99ac:   2000        movs    r0, #0
    99ae:   996b        ldr r1, [sp, #428]  ; 0x1ac
    99b0:   f8df c018   ldr.w   ip, [pc, #24]   ; 99cc <android::sp<android::IBinder>::~sp()+0xafc>
    99b4:   f855 200c   ldr.w   r2, [r5, ip]
    99b8:   6813        ldr r3, [r2, #0]
    99ba:   4299        cmp r1, r3
    99bc:   d001        beq.n   99c2 <android::sp<android::IBinder>::~sp()+0xaf2>
    99be:   f7ff e9be   blx 8d3c <__stack_chk_fail@plt>
    99c2:   b06d        add sp, #436    ; 0x1b4
    99c4:   bdf0        pop {r4, r5, r6, r7, pc}
    99c6:   bf00        nop
    99c8:   0926        lsrs    r6, r4, #4
    99ca:   0000        movs    r0, r0
    99cc:   fffc ffff           ; <UNDEFINED> instruction: 0xfffcffff
    99d0:   03f8        lsls    r0, r7, #15
    99d2:   0000        movs    r0, r0
    99d4:   03ef        lsls    r7, r5, #15
    99d6:   0000        movs    r0, r0
    99d8:   1ad0        subs    r0, r2, r3
    99da:   0000        movs    r0, r0
    99dc:   03a6        lsls    r6, r4, #14
    99de:   0000        movs    r0, r0
    99e0:   03a7        lsls    r7, r4, #14
    99e2:   0000        movs    r0, r0
    99e4:   0950        lsrs    r0, r2, #5
    99e6:   0000        movs    r0, r0
    99e8:   0398        lsls    r0, r3, #14
    99ea:   0000        movs    r0, r0
    99ec:   037b        lsls    r3, r7, #13
    99ee:   0000        movs    r0, r0
    99f0:   038d        lsls    r5, r1, #14
    99f2:   0000        movs    r0, r0
    99f4:   02d9        lsls    r1, r3, #11
    99f6:   0000        movs    r0, r0
    99f8:   02ce        lsls    r6, r1, #11
    99fa:   0000        movs    r0, r0
    99fc:   0365        lsls    r5, r4, #13
    99fe:   0000        movs    r0, r0
    9a00:   02ca        lsls    r2, r1, #11
    9a02:   0000        movs    r0, r0
    9a04:   02d7        lsls    r7, r2, #11
    9a06:   0000        movs    r0, r0
    9a08:   19b4        adds    r4, r6, r6
    9a0a:   0000        movs    r0, r0
    9a0c:   fe5d ffff   mrc2    15, 2, pc, cr13, cr15, {7}
    9a10:   fe31 ffff   mrc2    15, 1, pc, cr1, cr15, {7}
    9a14:   02f6        lsls    r6, r6, #11
    9a16:   0000        movs    r0, r0
    9a18:   02ef        lsls    r7, r5, #11
    9a1a:   0000        movs    r0, r0
    9a1c:   f004 e51f           ; <UNDEFINED> instruction: 0xf004e51f
    9a20:   97d9        str r7, [sp, #868]  ; 0x364
    ...

I can see there are human-readable strings in the .rodata section. It's very likely that constant function call arguments are to be found in this section.

Reverse-engineering is largely an exercise in pattern identification and in this way it is one step removed from pathological pareidolia. Something Gestalt something something bicameral mind. This is why reliable information is so valuable in this process - it's what anchors us to the reality of the system under study.

So yeah. I'll have to watch out for addresses that point to .rodata.

The .text section in this file is large enough that figuring it out in its entirety would be a protracted exercise. Since what I really want is for this su to give me a root shell, I've decided to start from somewhere I know implements this behaviour I want and work my way back until I find out how I can trigger that.

I know thanks to nm(1) that my su has a linker table entry for setuid(3). The output of objdump very conveniently includes the names of PLT entries after the bl and blx function call instructions. As it happens, there's only one call to setuid, so I know that no matter what, I want to execute the instruction at offset 0x98c4.

All that's left to do now is work my way up until I can figure out how I can cause su to execute this call. I've chosen to focus on the section of code in .text between this call and the first function header found before it, in this case the push {r4, r5, r6, r7, lr} at offset 0x97d8. Here's the relevant section of disassembled ARM code:

97d8:    b5f0        push    {r4, r5, r6, r7, lr}
97da:   4606        mov r6, r0
97dc:   b0ed        sub sp, #436    ; 0x1b4
97de:   4d7a        ldr r5, [pc, #488]  ; (99c8 <android::sp<android::IBinder>::~sp()+0xaf8>)
97e0:   460f        mov r7, r1
97e2:   447d        add r5, pc
97e4:   4979        ldr r1, [pc, #484]  ; (99cc <android::sp<android::IBinder>::~sp()+0xafc>)
97e6:   5868        ldr r0, [r5, r1]
97e8:   2e02        cmp r6, #2
97ea:   6803        ldr r3, [r0, #0]
97ec:   936b        str r3, [sp, #428]  ; 0x1ac
97ee:   d10e        bne.n   980e <android::sp<android::IBinder>::~sp()+0x93e>
97f0:   687c        ldr r4, [r7, #4]
97f2:   4977        ldr r1, [pc, #476]  ; (99d0 <android::sp<android::IBinder>::~sp()+0xb00>)
97f4:   4620        mov r0, r4
97f6:   4479        add r1, pc
97f8:   f7ff eaf4   blx 8de4 <strcmp@plt>
97fc:   b128        cbz r0, 980a <android::sp<android::IBinder>::~sp()+0x93a>
97fe:   4975        ldr r1, [pc, #468]  ; (99d4 <android::sp<android::IBinder>::~sp()+0xb04>)
9800:   4620        mov r0, r4
9802:   4479        add r1, pc
9804:   f7ff eaee   blx 8de4 <strcmp@plt>
9808:   b908        cbnz    r0, 980e <android::sp<android::IBinder>::~sp()+0x93e>
980a:   f7ff fe93   bl  9534 <android::sp<android::IBinder>::~sp()+0x664>
980e:   1c72        adds    r2, r6, #1
9810:   4c71        ldr r4, [pc, #452]  ; (99d8 <android::sp<android::IBinder>::~sp()+0xb08>)
9812:   0090        lsls    r0, r2, #2
9814:   447c        add r4, pc
9816:   f844 6cf4   str.w   r6, [r4, #-244]
981a:   f7ff eb02   blx 8e20 <malloc@plt>
981e:   f844 0cf0   str.w   r0, [r4, #-240]
9822:   b188        cbz r0, 9848 <android::sp<android::IBinder>::~sp()+0x978>
9824:   f854 2cf4   ldr.w   r2, [r4, #-244]
9828:   1c51        adds    r1, r2, #1
982a:   008a        lsls    r2, r1, #2
982c:   2100        movs    r1, #0
982e:   f7ff ea2c   blx 8c88 <memset@plt>
9832:   f854 3cf4   ldr.w   r3, [r4, #-244]
9836:   f854 0cf0   ldr.w   r0, [r4, #-240]
983a:   009a        lsls    r2, r3, #2
983c:   4639        mov r1, r7
983e:   f7ff eaf6   blx 8e2c <memcpy@plt>
9842:   2e01        cmp r6, #1
9844:   dc03        bgt.n   984e <android::sp<android::IBinder>::~sp()+0x97e>
9846:   e012        b.n 986e <android::sp<android::IBinder>::~sp()+0x99e>
9848:   f844 0cf4   str.w   r0, [r4, #-244]
984c:   e0ab        b.n 99a6 <android::sp<android::IBinder>::~sp()+0xad6>
984e:   4963        ldr r1, [pc, #396]  ; (99dc <android::sp<android::IBinder>::~sp()+0xb0c>)
9850:   6878        ldr r0, [r7, #4]
9852:   4479        add r1, pc
9854:   f7ff eac6   blx 8de4 <strcmp@plt>
9858:   4606        mov r6, r0
985a:   b940        cbnz    r0, 986e <android::sp<android::IBinder>::~sp()+0x99e>
985c:   4860        ldr r0, [pc, #384]  ; (99e0 <android::sp<android::IBinder>::~sp()+0xb10>)
985e:   4478        add r0, pc
9860:   f7ff ea72   blx 8d48 <puts@plt>
9864:   4630        mov r0, r6
9866:   f7ff eae8   blx 8e38 <setgid@plt>
986a:   b358        cbz r0, 98c4 <android::sp<android::IBinder>::~sp()+0x9f4>
986c:   e02d        b.n 98ca <android::sp<android::IBinder>::~sp()+0x9fa>
986e:   f7ff eaea   blx 8e44 <getppid@plt>
9872:   ae1b        add r6, sp, #108    ; 0x6c
9874:   2100        movs    r1, #0
9876:   f44f 7280   mov.w   r2, #256    ; 0x100
987a:   4c5a        ldr r4, [pc, #360]  ; (99e4 <android::sp<android::IBinder>::~sp()+0xb14>)
987c:   447c        add r4, pc
987e:   6060        str r0, [r4, #4]
9880:   4630        mov r0, r6
9882:   f7ff ea02   blx 8c88 <memset@plt>
9886:   6862        ldr r2, [r4, #4]
9888:   4630        mov r0, r6
988a:   4957        ldr r1, [pc, #348]  ; (99e8 <android::sp<android::IBinder>::~sp()+0xb18>)
988c:   4479        add r1, pc
988e:   466f        mov r7, sp
9890:   f7ff eade   blx 8e50 <sprintf@plt>
9894:   4630        mov r0, r6
9896:   4669        mov r1, sp
9898:   f7ff eae0   blx 8e5c <stat@plt>
989c:   2240        movs    r2, #64 ; 0x40
989e:   9e06        ldr r6, [sp, #24]
98a0:   2100        movs    r1, #0
98a2:   6026        str r6, [r4, #0]
98a4:   ae5b        add r6, sp, #364    ; 0x16c
98a6:   4630        mov r0, r6
98a8:   f7ff e9ee   blx 8c88 <memset@plt>
98ac:   f44f 71fc   mov.w   r1, #504    ; 0x1f8
98b0:   484e        ldr r0, [pc, #312]  ; (99ec <android::sp<android::IBinder>::~sp()+0xb1c>)
98b2:   4478        add r0, pc
98b4:   f7ff ead8   blx 8e68 <mkdir@plt>
98b8:   f7ff fe68   bl  958c <android::sp<android::IBinder>::~sp()+0x6bc>
98bc:   60a0        str r0, [r4, #8]
98be:   2800        cmp r0, #0
98c0:   da33        bge.n   992a <android::sp<android::IBinder>::~sp()+0xa5a>
98c2:   e02d        b.n 9920 <android::sp<android::IBinder>::~sp()+0xa50>
98c4:   f7ff ead6   blx 8e74 <setuid@plt> ; <--- I want this!


98c8:   b110        cbz r0, 98d0 <android::sp<android::IBinder>::~sp()+0xa00>
98ca:   4849        ldr r0, [pc, #292]  ; (99f0 <android::sp<android::IBinder>::~sp()+0xb20>)
98cc:   4478        add r0, pc
98ce:   e01b        b.n 9908 <android::sp<android::IBinder>::~sp()+0xa38>

Scratching the Turing turntable

The instruction immediately preceding the call to setuid is a b.n unconditional branch and the one before that is a bge.n conditional branch. This is a pattern typical of compiled code that is found at the "seams" between sequences of instructions compiled from different control flow branches. The upshot is that if and when the ARM CPU executes the instruction at offset 0x98c4, it must be after it's jumped there from somewhere else.

Sure enough, there's a cbz conditional branching instruction that points here at offset 0x986a:

985c:        4860              ldr        r0, [pc, #384]        ; (99e0 <android::sp<android::IBinder>::~sp()+0xb10>)
985e:        4478              add        r0, pc
9860:        f7ff ea72         blx        8d48 <puts@plt>
9864:        4630              mov        r0, r6
9866:        f7ff eae8         blx        8e38 <setgid@plt>
986a:        b358              cbz        r0, 98c4 <android::sp<android::IBinder>::~sp()+0x9f4>

So that makes sense, right? First we set the effective Group ID with setgid(3) then if that returned 0, we move on to the effective UID. We even reuse the 0 return code from setgid as setuid's argument.

The GID is loaded into r0 from r6 at 0x9864. Before that, there's a call to puts(3). The argument given to puts in r0 is *0x99e0(==0x03a7) + 0x985e + 0x4 == 0x9c09, which points to a string in .rodata: "huyanwei grant successful ...\n". Looks like I'm on the right track, alright!

This call to puts(3) is preceded by a call to strcmp(3) and a cbnz conditional branch instruction:

984e:        4963              ldr        r1, [pc, #396]        ; (99dc <android::sp<android::IBinder>::~sp()+0xb0c>)
9850:        6878              ldr        r0, [r7, #4]
9852:        4479              add        r1, pc
9854:        f7ff eac6         blx        8de4 <strcmp@plt>
9858:        4606              mov        r6, r0
985a:        b940              cbnz       r0, 986e <android::sp<android::IBinder>::~sp()+0x99e>

This is very promising, as it means a zero return value in this call to strcmp is what triggers the privilege escalation performed by setgid then setuid.

So what are we comparing, and against what? The second argument passed to strcmp in r1 is a static char* with a value of *0x99dc(==0x03a6) + 0x9852 + 0x4 == 0x9bfc. This once again points to a string in .rodata with the value "*#huyanwei#*". This includes the name of the author and looks like some sort of hardcoded passphrase. But what are we comparing against this value? The immediate answer is *(r7+4) but what is at that address?

To find out more, I searched for instructions before the call to strcmp that involve the r7 register. There's a mov r1, r7 at offset 0x983c where we use r7 as the second argument in a call to memcpy(3), ie. as the source. Before that, we have the following:

97f0:        687c              ldr        r4, [r7, #4]
97f2:        4977              ldr        r1, [pc, #476]        ; (99d0 <android::sp<android::IBinder>::~sp()+0xb00>)
97f4:        4620              mov        r0, r4
97f6:        4479              add        r1, pc
97f8:        f7ff eaf4         blx        8de4 <strcmp@plt>
97fc:        b128              cbz        r0, 980a <android::sp<android::IBinder>::~sp()+0x93a>
97fe:        4975              ldr        r1, [pc, #468]        ; (99d4 <android::sp<android::IBinder>::~sp()+0xb04>)
9800:        4620              mov        r0, r4
9802:        4479              add        r1, pc
9804:        f7ff eaee         blx        8de4 <strcmp@plt>
9808:        b908              cbnz       r0, 980e <android::sp<android::IBinder>::~sp()+0x93e>
980a:        f7ff fe93         bl         9534 <android::sp<android::IBinder>::~sp()+0x664>

So we copy *(r7 + 4) - the same address we'll later compare against *#huyanwei#* to decide whether to escalate privileges - into r4 and then r0. This becomes the first argument passed in another call to strcmp at offset 0x97f8. What's the second argument, then? *0x99d0 (==0x3f8) + 0x97f6 + 4 == 0x9bf2, which points to a string in .rodata: "-h".

Wait a minute! That looks a lot like one of the CLI options documented in the usage message, doesn't it? If *(r7 + 4) is indeed equal to "-h" then we jump to 0x980a, else we compare that address again, this time to *0x99d4 (==0x3ef) + 0x9802 + 4 == 0x9bf5. Once again, this points to .rodata and this time to "--help".

I can now reasonably infer that r7 + 4 points to the first CLI argument given to su. Considering we have mov r7, r1 at offset 0x97e0 immediately after the function header, this would mean that -GASP!- r1 was argv when the function was called!

Since we're looking at 32-bit ARM code, argv + 4 == argv[1]. This would make the function starting at 0x97d8 the program's main and r0 our argc.

Let's try it out

I tried running su with *#huyanwei#* as the first argument on the CLI:

That escalated quickly

...and it worked. Yay!

Now what?

So I've finally obtained superuser privileges on my phone. I did this by leveraging a rootkit that was present out of the box rather than writing a proper exploit. The whole experience was a bit hollow - I really expected to have to figure out what su does with sockets and build a program that would trigger escalation in this way. I was looking forward to that. Instead, I got there by feeding it a magic string as a CLI argument. It's expedient but a bit disappointing all the same. For a moment there, I... I believed. And I wanted more.

I did a teeny bit of searching online and there are pages that reference the author's name, Huyan Wei. They are mostly in Chinese however, which I cannot read. I chose not to spend too much time searching for third-party information as I know from bitter experience that nothing kills momentum on a little project like this quite like stumbling upon the answers.

As things stand I thought I should recap the objectives I set in the first hacklog:

  • ✔ Gain superuser privileges
  • ✔ Access the full filesystem (superuser privilege lets me access the full filesystem)
  • ✘ Investigate the presence of su(1), tcpdump(1)

So far, this project has been more about hacking than it has been about forensics. Now that I have unfettered access to the device, I expect this to change and future posts to focus more on the what than the how do I get access.