udis86sx/udis86/docs/manual/libudis86.rst
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 14 Jun 2016 22:40:22 +0100
changeset 21 7d99b51b4784
parent 0 e4a716697bef
permissions -rw-r--r--
Build files for udis86 regenerated using newer autotools ...in order to support building under MSYS2 environment.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
libudis86
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
=========
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
libudis86 is a disassembler library for the x86 architecture, including support
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
for the newer 64bit variants (IA32e, amd64, etc.) It provides you the ability
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
to decode a stream of bytes as x86 instructions, inspect various bits
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
of information about those instructions and even translate to human readable
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
assembly language format.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
.. default-domain:: c
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
.. contents::
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
ud_t: udis86 object
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
-------------------
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
libudis86 is reentrant, and to maintain that property it does not use static
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
data. All data related to the disassembly are stored in a single object, called
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
the udis86 object :type:`ud_t`. 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
.. c:type:: ud_t
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
    A structure encapsulating udis86 disassembler state.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
To use libudis86 you must create an instance of this object,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
.. code-block:: c
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
    ud_t ud_obj;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
and initialize it,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
.. code-block:: c
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
    ud_init(&ud_obj);
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
You can create multiple such objects and use with the library, each one
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
an independent disassembler.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
Setup Machine State
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
-------------------
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
The decode semantics of a sequence of bytes depends on the target machine state
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
for which they are being disassembled. In x86, this means the current effective
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
processor mode (16, 32 or 64bits), the current program counter (ip/eip/rip), and
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
sometimes, the processor vendor. By default, libudis86 is initialized to be in
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
32 bit disassembly mode, program counter at 0, and vendor being :code:`UD_VENDOR_ANY`.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
The following functions allow you to override these default to suit your needs.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
.. c:function:: void ud_set_mode(ud_t*, uint8_t mode_bits)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
    Sets the mode of disassembly. Possible values are 16, 32, and 64. By
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
    default, the library works in 32bit mode.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
.. c:function:: void ud_set_pc(ud_t*, uint64_t pc)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
    Sets the program counter (IP/EIP/RIP). This changes the offset of the
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
    assembly output generated, with direct effect on branch instructions.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
.. c:function:: void ud_set_vendor(ud_t*, unsigned vendor)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
    Sets the vendor of whose instruction to choose from. This is only useful
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
    for selecting the VMX or SVM instruction sets at which point INTEL and AMD
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
    have diverged significantly. At a later stage, support for a more granular
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
    selection of instruction sets maybe added.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
    * :code:`UD_VENDOR_INTEL` - for INTEL instruction set.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
    * :code:`UD_VENDOR_ATT` - for AMD instruction set.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
    * :code:`UD_VENDOR_ANY` - for any valid instruction in either INTEL or AMD.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
Setup Input
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
-----------
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
libudis86 provides three ways in which you can input binary data: as a fixed
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
sized memory buffer, a standard library FILE object, or as a callback function.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
By default, a :type:`ud_t` object is initialized to read input from :code:`STDIN`.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
.. c:function:: void ud_set_input_buffer(ud_t*, unsigned char* buffer, size_t size)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
    Sets the input source for the library to a `buffer` of `size` bytes.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
.. c:function:: void ud_set_input_file(ud_t*, FILE* filep)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
    Sets the input source to a file pointed to by a given standard library
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
    :code:`FILE` pointer. Note that libudis86 does not perform any checks,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    and assumes that the file pointer is properly initialized and open for
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    reading.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
.. c:function:: void ud_set_input_hook(ud_t* ud_obj, int (*hook)(ud_t *ud_obj))
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
    Sets a pointer to a function, to callback for input. The callback is invoked
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
    each time libudis86 needs the next byte in the input stream. To single
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
    end-of-input, this callback must return the constant :code:`UD_EOI`.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
    .. seealso:: :func:`ud_set_user_opaque_data`, :func:`ud_set_user_opaque_data`
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
.. c:function:: void ud_input_skip(ud_t*, size_t n);
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
    Skips ahead `n` number of bytes in the input stream.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
.. c:function:: int ud_input_end(const ud_t*);
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
    Test for end of input. You can use this function to test if udis86
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
    has exhausted the input.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
At the end of input, udis86 stops disassembly. If you want to restart or
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
reset the source of input, you must again invoke one of the above functions.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
Sometimes you may want to associate custom data with a udis86 object, that you
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
can use with the input callback function, or even in different parts of your
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
own project as you pass the object around. You can use the following two
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
functions to achieve this.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
.. c:function:: void ud_set_user_opaque_data(ud_t* ud_obj, void* opaque)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
    Associates a pointer with the udis86 object to be retrieved and used in
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
    client functions, such as the input hook callback function.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
.. c:function:: void* ud_get_user_opaque_data(const ud_t* ud_obj)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
    Returns any pointer associated with the udis86 object, using the
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
    :func:`ud_set_user_opaque_data` function.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
Setup Translation
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
-----------------
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
libudis86 can translate the decoded instruction into one of two assembly
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
language dialects: the INTEL syntax (such as those found in NASM and YASM) and
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
the other which resembles GNU Assembler (AT&T style) syntax. By default, this
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
is set to INTEL like syntax. You can override the default or specify your own
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
translator using the following function.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
.. c:function:: void ud_set_syntax(ud_t*, void (*translator)(ud_t*))
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
    Sets the function that translates the intermediate decode information to
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
    a human readable form. There are two inbuilt translators,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
    - :code:`UD_SYN_INTEL` for INTEL (NASM-like) syntax. (default)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
    - :code:`UD_SYN_ATT` for AT&T (GAS-like) syntax.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
    If you do not want libudis86 to translate, you can pass :code:`NULL` to the
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
    function, with no more translations thereafter. This is useful when you
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
    only want to identify chunks of code and then create the assembly output if
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
    needed, or when you are only interested in examining the instructions and
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
    do not want to waste cycles generating the assembly language output.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
    If you want to create your own translator, you can specify a pointer to your
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
    own function. This function must accept a single parameter, the udis86 object
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
    :type:`ud_t`, and it will be invoked everytime an instruction is decoded.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
Disassemble
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
-----------
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
With target state and input source set up, you can now disassemble. At the core
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
of libudis86 api is the function :c:func:`ud_disassemble` which does this.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
libudis86 exposes decoded instructions in an intermediate form meant to be
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
useful for programs that want to examine them. This intermediate form is
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
available using functions and fields of :type:`ud_t` as described below.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
.. c:function:: unsigned int ud_disassemble(ud_t*)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
    Disassembles the next instruction in the input stream.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
    
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
    :returns: the number of bytes disassembled. A 0 indicates end of input.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
    
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
    Note, to restart disassembly after the end of input, you must call one of
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
    the input setting functions with a new source of input.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
    A common use-case pattern for this function is in a loop::
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
        while (ud_disassemble(&ud_obj)) {
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
            /* 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
             * use or print decode info.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
             */
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
        }
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
For each successful invocation of :c:func:`ud_disassemble`, you can use the
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
following functions to get information about the disassembled instruction.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
.. c:function:: unsigned int ud_insn_len(const ud_t* u)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
    Returns the number of bytes disassembled.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
.. c:function:: uint64_t ud_insn_off(const ud_t*)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
    Returns the offset of the disassembled instruction in terms of the
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
    program counter value specified initially.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
    .. seealso:: :func:`ud_set_pc`
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
.. c:function:: const char* ud_insn_hex(ud_t*)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
    Returns pointer to a character string holding the hexadecimal
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
    representation of the disassembled bytes.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
.. c:function:: const uint8_t* ud_insn_ptr(const ud_t* u)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
    Returns pointer to the buffer holding the instruction bytes. Use
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
    :func:`ud_insn_len` to determine the size of this buffer.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
.. c:function:: const char* ud_insn_asm(const ud_t* u)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
    If the syntax is specified, returns pointer to the character string holding
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
    assembly language representation of the disassembled instruction.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
.. c:function:: const ud_operand_t* ud_insn_opr(const ud_t* u, unsigned int n)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
    Returns a reference (:type:`ud_operand_t`) to the nth (starting with 0)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
    operand of the instruction. If the instruction does not have such an
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
    operand, the function returns :code:`NULL`.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
.. c:function:: enum ud_mnemonic_code ud_insn_mnemonic(const ud_t *u)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
    .. versionadded:: 1.7.2
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
    Returns the instruction mnemonic in the form of an enumerated constant
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
    (:code:`enum ud_mnemonic_code`). As a convention all mnemonic constants
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
    are composed by prefixing standard instruction mnemonics with :code:`UD_I`. 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
    For example, the enumerations for :code:`mov`, :code:`xor` and :code:`jmp`
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
    are :code:`UD_Imov`, :code:`UD_Ixor`, and :code:`UD_Ijmp`, respectively.::
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
      ud_disassemble(&ud_obj);
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
      switch (ud_insn_mnemonic(ud_obj)) {
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
        case UD_Imov:  printf("mov!"); break;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
        case UD_Ixor:  printf("xor!"); break;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
        case UD_Ijmp:  printf("jmp!"); break;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
        /*...*/
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
      }
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
    Prior to version 1.7.2, the way to access the mnemonic was by a field of
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
    :code:`ud_t`, :c:member:`ud_t.mnemonc`. This field is now deprecated and
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
    may not be supported in the future.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
    .. seealso:: :func:`ud_lookup_mnemonic`
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
.. c:function:: const char* ud_const lookup_mnemonic(enum ud_mnemonic_code)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
    Returns a pointer to a character string corresponding to the given
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
    mnemonic code. Returns a :code:`NULL` if the code is invalid.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
Inspect Operands
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
----------------
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
An intermediate representation of instruction operands is available in the
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
form of :type:`ud_operand_t`. You can retrieve the nth operand of a
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
disassembled instruction using the function :func:`ud_insn_opr`.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
.. c:type:: ud_operand_t
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
    The operand type, represents a single operand of an instruction. It
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
    contains the following fields.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
    
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
    - :c:member:`size <ud_operand_t.size>`
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
    - :c:member:`type <ud_operand_t.type>`
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
    - :c:member:`base <ud_operand_t.base>`
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
    - :c:member:`index <ud_operand_t.index>`
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
    - :c:member:`scale <ud_operand_t.scale>`
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
    - :c:member:`offset <ud_operand_t.offset>`
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
    - :c:member:`lval <ud_operand_t.lval>`
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
.. c:member:: unsigned ud_operand_t.size
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
    Size of the operand in number of bits.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
.. c:member:: enum ud_operand_type ud_operand_t.type
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   276
    Type of the operand. Possible values are,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   277
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
    .. c:var:: UD_OP_MEM
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
        A memory operand. The intermediate form normalizes all memory address
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
        equations to the scale-index-base form. The address equation is
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
        available in,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
        
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
        - :member:`base <ud_operand_t.base>` - base register as an enumerated
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
          constant of type :type:`enum ud_type`. Maybe :code:`UD_NONE`, in which
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
          case the memory addressing form does not include a base register.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
        - :member:`index <ud_operand_t.index>` - index register as an enumerated
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
          constant of type :type:`enum ud_type`. Maybe :code:`UD_NONE`, in which
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
          case the memory addressing form does not include an index register.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
        - :member:`scale <ud_operand_t.index>` - an integer value by which
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
          the index register must be scaled. Maybe 0, denoting the absence of
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
          a scale component in the address.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
        - :member:`offset <ud_operand_t.offset>` - An integer value, which if
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
          non-zero represents the size of the displacement offset, and is one
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
          of 8, 16, 32, and 64. The value is available in
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
          :member:`lval <ud_operand_t.lval>`.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
    .. c:var:: UD_OP_PTR
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   300
        A segment:offset pointer operand. The :member:`size <ud_operand_t.size>`
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
        field can have two values, 32 (for 16:16 seg:off) and 48 (for 16:32 seg:off).
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
        The pointer value is available in :member:`lval <ud_operand_t.lval>`
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
        (as :member:`lval.ptr.seg` and :member:`lval.ptr.off`)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
    .. c:var:: UD_OP_IMM
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
        An Immediate operand. Value available in :member:`lval <ud_operand_t.lval>`.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
    .. c:var:: UD_OP_JIMM
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
        An Immediate operand to a branch instruction (relative offsets). Value
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
        available in :member:`lval <ud_operand_t.lval>`.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
    .. c:var:: UD_OP_CONST
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
        Implicit constant operand. Value available in :member:`lval <ud_operand_t.lval>`.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
    .. c:var:: UD_OP_REG
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   320
        A register operand. The specific register is available in the
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
        :member:`base <ud_operand_t.base>` field as an enumerated constant of type
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
        :type:`enum ud_type`.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   323
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
.. c:member:: enum ud_register ud_operand_t.base
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   327
    Contains an enumerated constant of type :type:`enum ud_type` representing
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   328
    a :data:`register <UD_OP_REG>` operand or the base of a :data:`memory <UD_OP_MEM>`
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   329
    operand.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   331
.. c:member:: enum ud_register ud_operand_t.index
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   333
    Contains an enumerated constant of type :type:`enum ud_type` representing
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   334
    the index register of a :data:`memory <UD_OP_MEM>` operand.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
.. c:member:: unsigned ud_operand_t.scale
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   338
    Contains the scale component of a :data:`memory <UD_OP_MEM>` address operand.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   339
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   340
.. c:member:: unsigned ud_operand_t.offset
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   341
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   342
    Contains the size of the displacement component of a :data:`memory
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   343
    <UD_OP_MEM>` address operand. The displacement itself is given by
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   344
    :member:`lval <ud_operand_t.lval>`.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   345
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   346
.. c:member:: ud_lval_t ud_operand_t.lval
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   347
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   348
    A union data structure that aggregates integer fields of different sizes,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   349
    storing values depending on the :member:`type <ud_operand_t.type>` and 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   350
    :member:`size <ud_operand_t.size>` of the operand.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   351
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   352
    .. c:member:: lval.sbyte
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   353
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   354
        Signed Byte
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   355
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   356
    .. c:member:: lval.ubyte
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   357
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   358
        Unsigned Byte
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   359
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   360
    .. c:member:: lval.sword
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   361
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   362
        Signed Word
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   363
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   364
    .. c:member:: lval.uword
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   365
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   366
        Unsigned Word
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   367
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   368
    .. c:member:: lval.sdword
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   369
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   370
        Signed Double Word
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   371
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   372
    .. c:member:: lval.udword
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   373
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   374
        Unsigned Double Word
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   375
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   376
    .. c:member:: lval.sqword
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   377
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   378
        Signed Quad Word
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   379
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   380
    .. c:member:: lval.uqword
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   381
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   382
        Unsigned Quad Word
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   383
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   384
    .. c:member:: lval.ptr.seg
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   385
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   386
        Pointer Segment in Segment:Offset
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   387
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   388
    .. c:member:: lval.ptr.off
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   389
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   390
        Pointer Offset in Segment:Offset
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   391
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   392
.. c:type:: enum ud_type
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   393
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   394
    Instruction Pointer
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   395
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   396
    .. code-block:: c
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   397
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   398
        UD_R_RIP 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   399
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   400
    8-Bit Registers
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   401
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   402
    .. code-block:: c
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   403
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   404
        UD_NONE,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   405
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   406
        UD_R_AL,    UD_R_CL,    UD_R_DL,    UD_R_BL,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   407
        UD_R_AH,    UD_R_CH,    UD_R_DH,    UD_R_BH,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   408
        UD_R_SPL,   UD_R_BPL,   UD_R_SIL,   UD_R_DIL,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   409
        UD_R_R8B,   UD_R_R9B,   UD_R_R10B,  UD_R_R11B,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   410
        UD_R_R12B,  UD_R_R13B,  UD_R_R14B,  UD_R_R15B,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   411
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   412
    16-Bit General Purporse Registers
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   413
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   414
    .. code-block:: c
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   415
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   416
        UD_R_AX,    UD_R_CX,    UD_R_DX,    UD_R_BX,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   417
        UD_R_SP,    UD_R_BP,    UD_R_SI,    UD_R_DI,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   418
        UD_R_R8W,   UD_R_R9W,   UD_R_R10W,  UD_R_R11W,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   419
        UD_R_R12W,  UD_R_R13W,  UD_R_R14W,  UD_R_R15W,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   420
                
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   421
    32-Bit General Purporse Registers:
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   422
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   423
    .. code-block:: c
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   424
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   425
        UD_R_EAX,   UD_R_ECX,   UD_R_EDX,   UD_R_EBX,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   426
        UD_R_ESP,   UD_R_EBP,   UD_R_ESI,   UD_R_EDI,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   427
        UD_R_R8D,   UD_R_R9D,   UD_R_R10D,  UD_R_R11D,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   428
        UD_R_R12D,  UD_R_R13D,  UD_R_R14D,  UD_R_R15D,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   429
                
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   430
    64-Bit General Purporse Registers:
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   431
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   432
    .. code-block:: c
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   433
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   434
        UD_R_RAX,   UD_R_RCX,   UD_R_RDX,   UD_R_RBX,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   435
        UD_R_RSP,   UD_R_RBP,   UD_R_RSI,   UD_R_RDI,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   436
        UD_R_R8,    UD_R_R9,    UD_R_R10,   UD_R_R11,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   437
        UD_R_R12,   UD_R_R13,   UD_R_R14,   UD_R_R15,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   438
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   439
    Segment Registers:
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   440
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   441
    .. code-block:: c
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   442
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   443
        UD_R_ES,    UD_R_CS,    UD_R_SS,    UD_R_DS,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   444
        UD_R_FS,    UD_R_GS,    
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   445
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   446
    Control Registers:
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   447
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   448
    .. code-block:: c
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   449
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   450
        UD_R_CR0,   UD_R_CR1,   UD_R_CR2,   UD_R_CR3,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   451
        UD_R_CR4,   UD_R_CR5,   UD_R_CR6,   UD_R_CR7,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   452
        UD_R_CR8,   UD_R_CR9,   UD_R_CR10,  UD_R_CR11,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   453
        UD_R_CR12,  UD_R_CR13,  UD_R_CR14,  UD_R_CR15,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   454
                
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   455
    Debug Registers:
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   456
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   457
    .. code-block:: c
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   458
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   459
        UD_R_DR0,   UD_R_DR1,   UD_R_DR2,   UD_R_DR3,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   460
        UD_R_DR4,   UD_R_DR5,   UD_R_DR6,   UD_R_DR7,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   461
        UD_R_DR8,   UD_R_DR9,   UD_R_DR10,  UD_R_DR11,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   462
        UD_R_DR12,  UD_R_DR13,  UD_R_DR14,  UD_R_DR15,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   463
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   464
    MMX Registers:
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   465
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   466
    .. code-block:: c
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   467
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   468
        UD_R_MM0,   UD_R_MM1,   UD_R_MM2,   UD_R_MM3,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   469
        UD_R_MM4,   UD_R_MM5,   UD_R_MM6,   UD_R_MM7,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   470
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   471
    FPU Registers:
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   472
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   473
    .. code-block:: c
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   474
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   475
        UD_R_ST0,   UD_R_ST1,   UD_R_ST2,   UD_R_ST3,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   476
        UD_R_ST4,   UD_R_ST5,   UD_R_ST6,   UD_R_ST7, 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   477
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   478
    SSE Registers:
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   479
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   480
    .. code-block:: c
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   481
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   482
        UD_R_XMM0,  UD_R_XMM1,  UD_R_XMM2,  UD_R_XMM3,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   483
        UD_R_XMM4,  UD_R_XMM5,  UD_R_XMM6,  UD_R_XMM7,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   484
        UD_R_XMM8,  UD_R_XMM9,  UD_R_XMM10, UD_R_XMM11,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   485
        UD_R_XMM12, UD_R_XMM13, UD_R_XMM14, UD_R_XMM15,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   486
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   487
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   488
Inspect Prefixes
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   489
----------------
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   490
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   491
Prefix bytes that affect the disassembly of the instruction are availabe in the
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   492
following fields, each of which corressponds to a particular type or class of
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   493
prefixes.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   494
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   495
.. c:member:: uint8_t ud_t.pfx_rex
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   496
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   497
    64-bit mode REX prefix
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   498
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   499
.. c:member:: uint8_t ud_t.pfx_rex
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   500
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   501
    64-bit mode REX prefix
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   502
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   503
.. c:member:: uint8_t ud_t.pfx_seg
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   504
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   505
    Segment register prefix
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   506
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   507
.. c:member:: uint8_t ud_t.pfx_opr
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   508
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   509
    Operand-size prefix (66h)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   510
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   511
.. c:member:: uint8_t ud_t.pfx_adr
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   512
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   513
    Address-size prefix (67h)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   514
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   515
.. c:member:: uint8_t ud_t.pfx_lock
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   516
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   517
    Lock prefix
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   518
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   519
.. c:member:: uint8_t ud_t.pfx_rep
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   520
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   521
    Rep prefix
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   522
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   523
.. c:member:: uint8_t ud_t.pfx_repe
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   524
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   525
    Repe prefix
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   526
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   527
.. c:member:: uint8_t ud_t.pfx_repne
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   528
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   529
    Repne prefix
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   530
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   531
These fields default to :code:`UD_NONE` if the respective prefixes were not found.