smali Package Description

smali/baksmali is an assembler/disassembler for the dex format used by dalvik, Android’s Java VM implementation. The syntax is loosely based on Jasmin’s/dedexer’s syntax, and supports the full functionality of the dex format (annotations, debug info, line info, etc.)

Source: https://code.google.com/p/smali/
smali Homepage | Kali smali Repo

  • Author: Ben Gruver
  • License: BSD

Tools included in the smali package

smali – Assembles a set of smali files into a dex file
[email protected]:~# smali --help
usage: java -jar smali.jar [options] [--] [<smali-file>|folder]*
assembles a set of smali files into a dex file
 -?,--help                      prints the help message then exits. Specify twice for debug options
 -a,--api-level <API_LEVEL>     The numeric api-level of the file to generate, e.g. 14 for ICS. If not
                                specified, it defaults to 14 (ICS).
 -o,--output <FILE>             the name of the dex file that will be written. The default is out.dex
 -v,--version                   prints the version then exits
 -x,--allow-odex-instructions   allow odex instructions to be compiled into the dex file. Only a few
                                instructions are supported - the ones that can exist in a dead code path and not
                                cause dalvik to reject the class

baksmali – Disassembles and/or dumps a dex file

[email protected]:~# baksmali --help
usage: java -jar baksmali.jar [options] <dex-file>
disassembles and/or dumps a dex file
 -?,--help                                  prints the help message then exits. Specify twice for debug options
 -a,--api-level <API_LEVEL>                 The numeric api-level of the file being disassembled. If not
                                            specified, it defaults to 14 (ICS).
 -b,--no-debug-info                         don't write out debug info (.local, .param, .line, etc.)
 -c,--bootclasspath <BOOTCLASSPATH>         the bootclasspath jars to use, for analysis. Defaults to
                                            core.jar:ext.jar:framework.jar:android.policy.jar:services.jar. If
                                            the value begins with a :, it will be appended to the default
                                            bootclasspath instead of replacing it
 -d,--bootclasspath-dir <DIR>               the base folder to look for the bootclasspath files in. Defaults to
                                            the current directory
 -f,--code-offsets                          add comments to the disassembly containing the code offset for each
                                            address
 -l,--use-locals                            output the .locals directive with the number of non-parameter
                                            registers, rather than the .register directive with the total number
                                            of register
 -m,--no-accessor-comments                  don't output helper comments for synthetic accessors
 -o,--output <DIR>                          the directory where the disassembled files will be placed. The
                                            default is out
 -p,--no-parameter-registers                use the v<n> syntax instead of the p<n> syntax for registers mapped
                                            to method parameters
 -r,--register-info <REGISTER_INFO_TYPES>   print the specificed type(s) of register information for each
                                            instruction. "ARGS,DEST" is the default if no types are specified.
                                            Valid values are:
                                            ALL: all pre- and post-instruction registers.
                                            ALLPRE: all pre-instruction registers
                                            ALLPOST: all post-instruction registers
                                            ARGS: any pre-instruction registers used as arguments to the
                                            instruction
                                            DEST: the post-instruction destination register, if any
                                            MERGE: Any pre-instruction register has been merged from more than 1
                                            different post-instruction register from its predecessors
                                            FULLMERGE: For each register that would be printed by MERGE, also
                                            show the incoming register types that were merged
 -s,--sequential-labels                     create label names using a sequential numbering scheme per label
                                            type, rather than using the bytecode address
 -v,--version                               prints the version then exits
 -x,--deodex                                deodex the given odex file. This option is ignored if the input file
                                            is not an odex file

smali Usage Example

[email protected]:~# coming soon