tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

FormatterATT.h (8699B)


      1 /***************************************************************************************************
      2 
      3  Zyan Disassembler Library (Zydis)
      4 
      5  Original Author : Florian Bernd, Joel Hoener
      6 
      7 * Permission is hereby granted, free of charge, to any person obtaining a copy
      8 * of this software and associated documentation files (the "Software"), to deal
      9 * in the Software without restriction, including without limitation the rights
     10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     11 * copies of the Software, and to permit persons to whom the Software is
     12 * furnished to do so, subject to the following conditions:
     13 *
     14 * The above copyright notice and this permission notice shall be included in all
     15 * copies or substantial portions of the Software.
     16 *
     17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     23 * SOFTWARE.
     24 
     25 ***************************************************************************************************/
     26 
     27 /**
     28 * @file
     29 * Implements the `AT&T` style instruction-formatter.
     30 */
     31 
     32 #ifndef ZYDIS_FORMATTER_ATT_H
     33 #define ZYDIS_FORMATTER_ATT_H
     34 
     35 #include "zydis/Zydis/Formatter.h"
     36 #include "zydis/Zydis/Internal/FormatterBase.h"
     37 #include "zydis/Zydis/Internal/String.h"
     38 
     39 #ifdef __cplusplus
     40 extern "C" {
     41 #endif
     42 
     43 /* ============================================================================================== */
     44 /* Formatter functions                                                                            */
     45 /* ============================================================================================== */
     46 
     47 /* ---------------------------------------------------------------------------------------------- */
     48 /* Instruction                                                                                    */
     49 /* ---------------------------------------------------------------------------------------------- */
     50 
     51 ZyanStatus ZydisFormatterATTFormatInstruction(const ZydisFormatter* formatter,
     52    ZydisFormatterBuffer* buffer, ZydisFormatterContext* context);
     53 
     54 /* ---------------------------------------------------------------------------------------------- */
     55 /* Operands                                                                                       */
     56 /* ---------------------------------------------------------------------------------------------- */
     57 
     58 ZyanStatus ZydisFormatterATTFormatOperandMEM(const ZydisFormatter* formatter,
     59    ZydisFormatterBuffer* buffer, ZydisFormatterContext* context);
     60 
     61 /* ---------------------------------------------------------------------------------------------- */
     62 /* Elemental tokens                                                                               */
     63 /* ---------------------------------------------------------------------------------------------- */
     64 
     65 ZyanStatus ZydisFormatterATTPrintMnemonic(const ZydisFormatter* formatter,
     66    ZydisFormatterBuffer* buffer, ZydisFormatterContext* context);
     67 
     68 ZyanStatus ZydisFormatterATTPrintRegister(const ZydisFormatter* formatter,
     69    ZydisFormatterBuffer* buffer, ZydisFormatterContext* context, ZydisRegister reg);
     70 
     71 ZyanStatus ZydisFormatterATTPrintAddressABS(const ZydisFormatter* formatter,
     72    ZydisFormatterBuffer* buffer, ZydisFormatterContext* context);
     73 
     74 ZyanStatus ZydisFormatterATTPrintDISP(const ZydisFormatter* formatter,
     75    ZydisFormatterBuffer* buffer, ZydisFormatterContext* context);
     76 
     77 ZyanStatus ZydisFormatterATTPrintIMM(const ZydisFormatter* formatter,
     78    ZydisFormatterBuffer* buffer, ZydisFormatterContext* context);
     79 
     80 /* ---------------------------------------------------------------------------------------------- */
     81 
     82 /* ============================================================================================== */
     83 /* Fomatter presets                                                                               */
     84 /* ============================================================================================== */
     85 
     86 /* ---------------------------------------------------------------------------------------------- */
     87 /* AT&T                                                                                           */
     88 /* ---------------------------------------------------------------------------------------------- */
     89 
     90 /**
     91 * The default formatter configuration for `AT&T` style disassembly.
     92 */
     93 static const ZydisFormatter FORMATTER_ATT =
     94 {
     95    /* style                    */ ZYDIS_FORMATTER_STYLE_ATT,
     96    /* force_memory_size        */ ZYAN_FALSE,
     97    /* force_memory_seg         */ ZYAN_FALSE,
     98    /* force_memory_scale       */ ZYAN_TRUE,
     99    /* force_relative_branches  */ ZYAN_FALSE,
    100    /* force_relative_riprel    */ ZYAN_FALSE,
    101    /* print_branch_size        */ ZYAN_FALSE,
    102    /* detailed_prefixes        */ ZYAN_FALSE,
    103    /* addr_base                */ ZYDIS_NUMERIC_BASE_HEX,
    104    /* addr_signedness          */ ZYDIS_SIGNEDNESS_SIGNED,
    105    /* addr_padding_absolute    */ ZYDIS_PADDING_AUTO,
    106    /* addr_padding_relative    */ 2,
    107    /* disp_base                */ ZYDIS_NUMERIC_BASE_HEX,
    108    /* disp_signedness          */ ZYDIS_SIGNEDNESS_SIGNED,
    109    /* disp_padding             */ 2,
    110    /* imm_base                 */ ZYDIS_NUMERIC_BASE_HEX,
    111    /* imm_signedness           */ ZYDIS_SIGNEDNESS_AUTO,
    112    /* imm_padding              */ 2,
    113    /* case_prefixes            */ ZYDIS_LETTER_CASE_DEFAULT,
    114    /* case_mnemonic            */ ZYDIS_LETTER_CASE_DEFAULT,
    115    /* case_registers           */ ZYDIS_LETTER_CASE_DEFAULT,
    116    /* case_typecasts           */ ZYDIS_LETTER_CASE_DEFAULT,
    117    /* case_decorators          */ ZYDIS_LETTER_CASE_DEFAULT,
    118    /* hex_uppercase            */ ZYAN_TRUE,
    119    /* hex_force_leading_number */ ZYAN_FALSE,
    120    /* number_format            */
    121    {
    122        // ZYDIS_NUMERIC_BASE_DEC
    123        {
    124            // Prefix
    125            {
    126                /* string       */ ZYAN_NULL,
    127                /* string_data  */ ZYAN_DEFINE_STRING_VIEW(""),
    128                /* buffer       */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    129            },
    130            // Suffix
    131            {
    132                /* string       */ ZYAN_NULL,
    133                /* string_data  */ ZYAN_DEFINE_STRING_VIEW(""),
    134                /* buffer       */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    135            }
    136        },
    137        // ZYDIS_NUMERIC_BASE_HEX
    138        {
    139            // Prefix
    140            {
    141                /* string       */ &FORMATTER_ATT.number_format[
    142                                     ZYDIS_NUMERIC_BASE_HEX][0].string_data,
    143                /* string_data  */ ZYAN_DEFINE_STRING_VIEW("0x"),
    144                /* buffer       */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    145            },
    146            // Suffix
    147            {
    148                /* string       */ ZYAN_NULL,
    149                /* string_data  */ ZYAN_DEFINE_STRING_VIEW(""),
    150                /* buffer       */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    151            }
    152        }
    153    },
    154    /* func_pre_instruction     */ ZYAN_NULL,
    155    /* func_post_instruction    */ ZYAN_NULL,
    156    /* func_format_instruction  */ &ZydisFormatterATTFormatInstruction,
    157    /* func_pre_operand         */ ZYAN_NULL,
    158    /* func_post_operand        */ ZYAN_NULL,
    159    /* func_format_operand_reg  */ &ZydisFormatterBaseFormatOperandREG,
    160    /* func_format_operand_mem  */ &ZydisFormatterATTFormatOperandMEM,
    161    /* func_format_operand_ptr  */ &ZydisFormatterBaseFormatOperandPTR,
    162    /* func_format_operand_imm  */ &ZydisFormatterBaseFormatOperandIMM,
    163    /* func_print_mnemonic      */ &ZydisFormatterATTPrintMnemonic,
    164    /* func_print_register      */ &ZydisFormatterATTPrintRegister,
    165    /* func_print_address_abs   */ &ZydisFormatterATTPrintAddressABS,
    166    /* func_print_address_rel   */ &ZydisFormatterBasePrintAddressREL,
    167    /* func_print_disp          */ &ZydisFormatterATTPrintDISP,
    168    /* func_print_imm           */ &ZydisFormatterATTPrintIMM,
    169    /* func_print_typecast      */ ZYAN_NULL,
    170    /* func_print_segment       */ &ZydisFormatterBasePrintSegment,
    171    /* func_print_prefixes      */ &ZydisFormatterBasePrintPrefixes,
    172    /* func_print_decorator     */ &ZydisFormatterBasePrintDecorator
    173 };
    174 
    175 /* ---------------------------------------------------------------------------------------------- */
    176 
    177 /* ============================================================================================== */
    178 
    179 #ifdef __cplusplus
    180 }
    181 #endif
    182 
    183 #endif // ZYDIS_FORMATTER_ATT_H