# Chapter 14: Rasm

The inline assembler/disassembler. Initially 'rasm' was designed to be used for binary patching, just to get the bytes of a certain opcode. Here's the help

    $ rasm -h
    Usage: rasm [-elvV] [-f file] [-s offset] [-a arch] [-d bytes] "opcode"|-
     if 'opcode' is '-' reads from stdin
      -v           enables debug
      -d [bytes]   disassemble from hexpair bytes
      -f [file]    compiles assembly file to 'file'.o
      -s [offset]  offset where this opcode is suposed to be
      -a [arch]    selected architecture (x86, olly, ppc, arm, java, rsc)
      -e           use big endian
      -l           list all supported opcodes and architectures
      -V           show version information

The basic 'portable' assembler instructions can be listed with 'rasm -l':

    $ rasm -l
    Usage: rasm [-elvV] [-f file] [-s offset] [-a arch] [-d bytes] "opcode"|-
    Architectures:
     olly, x86, ppc, arm, java
    Opcodes:
     call [addr]  - call to address
     jmp [addr]   - jump to relative address
     jz  [addr]   - jump if equal
     jnz          - jump if not equal
     trap         - trap into the debugger
     nop          - no operation
     push 33      - push a value or reg in stack
     pop eax      - pop into a register
     int 0x80     - system call interrupt
     ret          - return from subroutine
     ret0         - return 0 from subroutine
     hang         - hang (infinite loop
     mov eax, 33  - asign a value to a register
    Directives:
     .zero 23     - fill 23 zeroes
     .org 0x8000  - offset

- 14.1 Assemble
- 14.2 Disassemble