# # This file is distributed under the MIT License. See LICENSE.md for details. # version: 3 definitions: - name: Binary doc: |- Data structure representing the whole binary. This is the entry point of the model. It contains the type system (`Types`), the list of functions (`Functions`), loading information (`Segments`) and more. type: struct fields: - name: Architecture doc: The architecture for this binary. type: Architecture optional: true - name: EntryPoint doc: The program entry point, if any. type: MetaAddress optional: true - name: DefaultABI doc: The default ABI to adopt for analysis purposes. type: ABI optional: true - name: DefaultPrototype doc: |- The default function prototype to adopt for functions that do not provide it explicitly. type: Type optional: true upcastable: true - name: Configuration type: Configuration optional: true - name: Segments doc: |- `Segment`s represent instructions on what part of the raw binary needs to be loaded at which address. sequence: type: SortedVector elementType: Segment optional: true - name: ExtraCodeAddresses doc: |- A list of addresses known to contain code. rev.ng is usually able to discover all the code by itself by recursively visiting the control-flow graph of functions and the call graph. However, certain pieces of code cannot be identified through these techniques. A prime example are the addresses of `catch` blocks of C++ exception handlers: no code ever directly jumps there and their address is not stored in jump tables. Their address can only be obtained by interpreting metadata in the ELF. optional: true sequence: type: SortedVector elementType: MetaAddress - name: ImportedLibraries doc: |- The list of imported libraries identified by their file name. For instance, if the input binary is linked to OpenSSL, this list would should `libcrypto.so.1.1`. sequence: type: SortedVector elementType: string optional: true - name: ImportedDynamicFunctions doc: List of functions imported from dynamic libraries (`.so`, `.dll`). sequence: type: SortedVector elementType: DynamicFunction optional: true - name: Functions doc: List of the functions present in the binary. sequence: type: SortedVector elementType: Function optional: true - name: TypeDefinitions doc: |- The set of types used in this binary. It contains `struct`, `union`, `typedef`, `enum` and function prototypes. sequence: type: SortedVector upcastable: true elementType: TypeDefinition optional: true - name: TypeDefinition doc: |- Base data structure for all the type definitions. A type definition differs from a `Type` in the fact that it has an identity. In fact, while two identical instances of `Type` can be considered to be the same `Type`, two instances of a `TypeDefinition` that only differ from their `ID` are two distinct types. A type definition can be a `struct`, a `union`, a `typedef`, an `enum` or a function prototype. type: struct fields: - name: ID type: uint64_t is_guid: true doc: |- A unique identifier for this type. - name: Kind type: TypeDefinitionKind - name: Name doc: |- A user-chosen `Identifier` for this type. type: string optional: true - name: Comment type: string optional: true key: - ID - Kind abstract: true - name: UnionDefinition doc: | A `union` type. type: struct inherits: TypeDefinition fields: - name: Fields doc: The list of alternative types in this `union`. sequence: type: SortedVector elementType: UnionField - name: CABIFunctionDefinition doc: | The function type described through a C-like prototype plus an ABI. This is an "high level" representation of the prototype of a function. It is expressed as list of arguments composed by an index and a type. No information about the register is embedded. That information is implicit in the ABI this type is associated to. In contrast, a `RawFunctionType` is not associated to any ABI and explicitly describes, among other things, what registers are used to pass arguments and return values. type: struct inherits: TypeDefinition fields: - name: ABI type: ABI doc: The C ABI associated to this function type. - name: ReturnType type: Type doc: The function return type. optional: true upcastable: true - name: ReturnValueComment type: string optional: true - name: Arguments doc: The list of formal arguments of the function type. sequence: type: SortedVector elementType: Argument - name: EnumDefinition doc: | An `enum` type definition. type: struct inherits: TypeDefinition fields: - name: UnderlyingType type: Type upcastable: true doc: |- The underlying type of the `enum`. This can only be a `PrimitiveType` with either a `Unsigned` or a `Signed` kind. - name: Entries doc: |- The entries of the `enum`. There can be no two entries associated to the same value. sequence: type: SortedVector elementType: EnumEntry - name: RawFunctionDefinition type: struct inherits: TypeDefinition doc: |- The function type described by explicitly listing how arguments and return values are passed. This is a "low level" representation of the prototype of a function. Where the list of registers used to pass arguments and return values is explicitl. For stack arguments, they are collected in a single `struct` (`StackArgumentsType`). In contrast, a `CABIFunctionDefinition` expresses the function type from a high-level perspective (e.g., a single argument might span multiple registers) and his associated to a well-known ABI. Given an ABI, it is always possible to convert a `CABIFunctionDefinition` into a `RawFunctionDefinition`. fields: - name: Architecture type: Architecture doc: The processor architecture of this function type. - name: Arguments optional: true sequence: type: SortedVector elementType: NamedTypedRegister doc: |- The list of registers used to pass arguments. The registers must belong to `Architecture`. - name: ReturnValues optional: true sequence: type: SortedVector elementType: NamedTypedRegister doc: |- The list of registers used to return values. The registers must belong to `Architecture`. - name: ReturnValueComment type: string optional: true - name: PreservedRegisters optional: true sequence: type: SortedVector elementType: Register doc: |- The list of registers preserved by functions using this function type. The registers must belong to `Architecture`. - name: FinalStackOffset type: uint64_t optional: true doc: |- The expected difference between the initial and final value of the stack pointer. For instance, in the x86-64 SystemV ABI, the difference between the initial and final value of the stack pointer is 8. This is due to the fact that `ret` instruction increase the stack pointer by 8. - name: StackArgumentsType doc: The type of the `struct` representing all of the stack arguments. type: Type optional: true upcastable: true - name: TypedefDefinition doc: |- A `typedef` type. Note, that unlike in C, two `typedef`s aliasing the same type are actually distinct types. type: struct inherits: TypeDefinition fields: - name: UnderlyingType type: Type doc: The type this `typedef` is aliasing. upcastable: true - name: StructDefinition doc: | A `struct` type. type: struct inherits: TypeDefinition fields: - name: Size doc: The size, in bytes, of the `struct`. type: uint64_t - name: CanContainCode doc: | When this field is set to `true` *and* this `struct` is reachable for a segment's root type without traversing pointer, arrays or other qualifiers, the padding of the struct is treated at if it contains code. type: bool optional: true - name: Fields doc: The list of fields of this `struct`. sequence: type: SortedVector elementType: StructField - name: Type doc: |- A type such as an array, a pointer, a primitive or a defined type. type: struct fields: - name: Kind type: TypeKind - name: IsConst type: bool optional: true abstract: true - name: PrimitiveType type: struct inherits: Type fields: - name: PrimitiveKind type: PrimitiveKind - name: Size doc: | As of now, for floating point primitives, supported sizes include: ``` { 2, 4, 8, 10, 12, 16 } ``` For non-floating point, they are: ``` { 1, 2, 4, 8, 16 } ``` Note that `Void` *must* have size of 0 while `Generic` can use all the supported sizes, floating point or not. type: uint64_t optional: true - name: PointerType type: struct inherits: Type doc: A pointer type. fields: - name: PointerSize doc: As of now, only 4 and 8 byte pointers are supported. type: uint64_t - name: PointeeType type: Type doc: The pointee type. upcastable: true - name: DefinedType type: struct inherits: Type doc: A reference to a `TypeDefinition`. fields: - name: Definition reference: pointeeType: TypeDefinition rootType: Binary - name: ArrayType type: struct doc: |- An array of `Type`s. inherits: Type fields: - name: ElementCount type: uint64_t doc: The number of elements. - name: ElementType type: Type upcastable: true doc: The type of the elements of the array. - name: UnionField doc: |- An alternative of a `UnionDefinition`. It is composed by a index and the `Type`. type: struct fields: - name: Index type: uint64_t - name: Name type: string optional: true - name: Comment type: string optional: true - name: Type type: Type doc: The type of this `union` alternative. upcastable: true key: - Index - name: StructField doc: |- A field of a `StructDefinition`. It is composed by the offset of the field and its type. type: struct fields: - name: Offset type: uint64_t - name: Name type: string optional: true - name: Comment type: string optional: true - name: Type type: Type doc: The type of the field. upcastable: true key: - Offset - name: Segment type: struct doc: |- A segment contains the information necessary for rev.ng to load the executable in memory. fields: - name: StartAddress type: MetaAddress doc: The address at which this segment should be loaded. - name: VirtualSize type: uint64_t doc: |- The size of the segment in memory. If this value is greater than `FileSize`, the discrepancy is considered to full of `00`. - name: StartOffset type: uint64_t doc: Start file offset from which the segment will be loaded. - name: FileSize type: uint64_t doc: Number of bytes that will be loaded in memory from the file. - name: IsReadable type: bool doc: Is this segment readable? - name: IsWriteable type: bool doc: Is this segment writable? - name: IsExecutable type: bool - name: Name type: string optional: true - name: Comment type: string optional: true - name: CanonicalRegisterValues optional: true sequence: type: SortedVector elementType: CanonicalRegisterValue - name: Relocations optional: true sequence: type: SortedVector elementType: Relocation - name: Type doc: |- The `StructDefinition` associated to this segment. Informally, each field of such `struct` is a global variable. type: Type upcastable: true optional: true key: - StartAddress - VirtualSize - name: PrimitiveKind type: enum members: - name: Void doc: The `void` type. - name: Generic doc: |- The most generic primitive kind: it can be any of the other primitive kinds, except for `Void`. - name: PointerOrNumber doc: |- A kind representing either a `Number` kind or a pointer. This can also be seen as not-a-`Float`. - name: Number doc: |- A two's complement integer number, either `Signed` or `Unsigned`. - name: Unsigned doc: |- An `unsigned` two's complement integer number. - name: Signed doc: |- An `signed` two's complement integer number. - name: Float doc: |- A IEEE 754 floating point number. - name: NamedTypedRegister type: struct doc: |- An argument or return values in a `RawFunctionDefinition`. It is basically a pair of a register and a `Type`. fields: - name: Location type: Register - name: Type type: Type upcastable: true - name: Name type: string optional: true - name: Comment type: string optional: true key: - Location - name: Function doc: A function defined within this binary. type: struct fields: - name: Entry doc: | The address of the entry point. Note: this does not necessarily correspond to the address of the basic block with the lowest address. type: MetaAddress - name: Name type: string optional: true - name: Comment type: string optional: true - name: StackFrameType doc: The type of the stack frame. type: Type upcastable: true optional: true - name: Prototype doc: The prototype of the function. type: Type upcastable: true optional: true - name: Attributes doc: Attributes for this call site. sequence: type: MutableSet elementType: FunctionAttribute optional: true - name: CallSitePrototypes doc: |- Information about specific call sites within this function. sequence: type: SortedVector elementType: CallSitePrototype optional: true - name: ExportedNames doc: |- The list of names used to make this function available as a dynamic symbol. sequence: type: SortedVector elementType: string optional: true - name: Comments sequence: type: vector elementType: StatementComment optional: true key: - Entry - name: EnumEntry doc: An entry in an `enum`. type: struct fields: - name: Value doc: |- The value associated to this `enum` entry. Has to be unique within the `enum`. type: uint64_t - name: Name type: string optional: true doc: |- A user-chosen `Identifier` for this `enum` entry. - name: Comment type: string optional: true key: - Value - name: DynamicFunction doc: A function defined in a dynamic library. type: struct fields: - name: Name doc: The name of the symbol for this dynamic function. type: string - name: Comment type: string optional: true - name: Prototype doc: The prototype of the function. type: Type upcastable: true optional: true - name: Attributes doc: The attributes of this dynamic function. sequence: type: MutableSet elementType: FunctionAttribute optional: true - name: Relocations doc: |- A list of locations where the address of this dynamic function should be placed. sequence: type: SortedVector elementType: Relocation optional: true key: - Name - name: Relocation type: struct doc: |- A relocation, i.e., a directive to write the address of an object (a `DynamicFunction` or a `Segment`) at a specific address. Optionally, the address of the object can be modified with a constant offset. fields: - name: Address type: MetaAddress doc: Where to write the address of the object. - name: Type type: RelocationType doc: |- How to write the address of the object (e.g., 32-bit vs 64-bit integer). - name: Addend type: uint64_t doc: Fixed offset to add when writing the address of the object. key: - Address - Type - name: RelocationType doc: |- A enumeration describing how a `Relocation` should be written at the target address. type: enum members: - name: WriteAbsoluteAddress32 doc: Write the absolute address of the object as a 32-bit integer. - name: WriteAbsoluteAddress64 doc: Write the absolute address of the object as a 64-bit integer. - name: AddAbsoluteAddress32 doc: |- Add to the 32-bit integer present at the target location the absolute address of the object. - name: AddAbsoluteAddress64 doc: |- Add to the 64-bit integer present at the target location the absolute address of the object. - name: WriteRelativeAddress32 doc: |- Write the address of the object as a 32-bit integer, expressed as a relative from the target of the relocation. - name: WriteRelativeAddress64 doc: |- Write the address of the object as a 64-bit integer, expressed as a relative from the target of the relocation. - name: AddRelativeAddress32 doc: |- Add to the 32-bit integer present at the target location the address of the object, expressed as a relative from the target of the relocation. - name: AddRelativeAddress64 doc: |- Add to the 32-bit integer present at the target location the address of the object, expressed as a relative from the target of the relocation. - name: CallSitePrototype doc: Information about the prototype of a specific callsite within a `Function`. type: struct fields: - name: CallerBlockAddress doc: Address of the basic block of the call. type: MetaAddress - name: Prototype type: Type upcastable: true - name: IsTailCall doc: Whether this call site is a tail call or not. type: bool optional: true - name: Attributes doc: Attributes for this call site. sequence: type: MutableSet elementType: FunctionAttribute optional: true key: - CallerBlockAddress - name: FunctionAttribute doc: | Attributes for functions. Can be applied both to functions and call sites. type: enum members: - name: NoReturn doc: The function does not return. - name: Inline doc: The function must be inlined in callers. - name: CanonicalRegisterValue doc: |- A [`Segment`](#Segment) can specify a set of *canonical values* for certain registers. This can be used to represent concepts such as the global pointer, which in certain ABIs, is not set by each function, but it's possible to assume it has a certain value at the entry of the function. type: struct fields: - name: Register doc: The register for which to specify the canonical value. type: Register - name: Value doc: |- The canonical value that `Register` can be assumed to hold upon function entry. type: uint64_t key: - Register - name: Register type: enum members: # x86 registers - name: eax_x86 - name: ebx_x86 - name: ecx_x86 - name: edx_x86 - name: esi_x86 - name: edi_x86 - name: ebp_x86 - name: esp_x86 - name: st0_x86 - name: xmm0_x86 - name: xmm1_x86 - name: xmm2_x86 - name: xmm3_x86 - name: xmm4_x86 - name: xmm5_x86 - name: xmm6_x86 - name: xmm7_x86 # x86-64 registers - name: rax_x86_64 - name: rbx_x86_64 - name: rcx_x86_64 - name: rdx_x86_64 - name: rbp_x86_64 - name: rsp_x86_64 - name: rsi_x86_64 - name: rdi_x86_64 - name: r8_x86_64 - name: r9_x86_64 - name: r10_x86_64 - name: r11_x86_64 - name: r12_x86_64 - name: r13_x86_64 - name: r14_x86_64 - name: r15_x86_64 - name: xmm0_x86_64 - name: xmm1_x86_64 - name: xmm2_x86_64 - name: xmm3_x86_64 - name: xmm4_x86_64 - name: xmm5_x86_64 - name: xmm6_x86_64 - name: xmm7_x86_64 - name: fs_x86_64 # ARM registers - name: r0_arm - name: r1_arm - name: r2_arm - name: r3_arm - name: r4_arm - name: r5_arm - name: r6_arm - name: r7_arm - name: r8_arm - name: r9_arm - name: r10_arm - name: r11_arm - name: r12_arm - name: r13_arm - name: r14_arm - name: r15_arm - name: q0_arm - name: q1_arm - name: q2_arm - name: q3_arm - name: q4_arm - name: q5_arm - name: q6_arm - name: q7_arm # AArch64 registers - name: x0_aarch64 - name: x1_aarch64 - name: x2_aarch64 - name: x3_aarch64 - name: x4_aarch64 - name: x5_aarch64 - name: x6_aarch64 - name: x7_aarch64 - name: x8_aarch64 - name: x9_aarch64 - name: x10_aarch64 - name: x11_aarch64 - name: x12_aarch64 - name: x13_aarch64 - name: x14_aarch64 - name: x15_aarch64 - name: x16_aarch64 - name: x17_aarch64 - name: x18_aarch64 - name: x19_aarch64 - name: x20_aarch64 - name: x21_aarch64 - name: x22_aarch64 - name: x23_aarch64 - name: x24_aarch64 - name: x25_aarch64 - name: x26_aarch64 - name: x27_aarch64 - name: x28_aarch64 - name: x29_aarch64 - name: lr_aarch64 - name: sp_aarch64 - name: v0_aarch64 - name: v1_aarch64 - name: v2_aarch64 - name: v3_aarch64 - name: v4_aarch64 - name: v5_aarch64 - name: v6_aarch64 - name: v7_aarch64 - name: v8_aarch64 - name: v9_aarch64 - name: v10_aarch64 - name: v11_aarch64 - name: v12_aarch64 - name: v13_aarch64 - name: v14_aarch64 - name: v15_aarch64 - name: v16_aarch64 - name: v17_aarch64 - name: v18_aarch64 - name: v19_aarch64 - name: v20_aarch64 - name: v21_aarch64 - name: v22_aarch64 - name: v23_aarch64 - name: v24_aarch64 - name: v25_aarch64 - name: v26_aarch64 - name: v27_aarch64 - name: v28_aarch64 - name: v29_aarch64 - name: v30_aarch64 - name: v31_aarch64 # MIPS registers - name: v0_mips - name: v1_mips - name: a0_mips - name: a1_mips - name: a2_mips - name: a3_mips - name: s0_mips - name: s1_mips - name: s2_mips - name: s3_mips - name: s4_mips - name: s5_mips - name: s6_mips - name: s7_mips - name: t0_mips - name: t1_mips - name: t2_mips - name: t3_mips - name: t4_mips - name: t5_mips - name: t6_mips - name: t7_mips - name: t8_mips - name: t9_mips - name: gp_mips - name: sp_mips - name: fp_mips - name: ra_mips - name: f0_mips - name: f1_mips - name: f2_mips - name: f3_mips - name: f4_mips - name: f5_mips - name: f6_mips - name: f7_mips - name: f8_mips - name: f9_mips - name: f10_mips - name: f11_mips - name: f12_mips - name: f13_mips - name: f14_mips - name: f15_mips - name: f16_mips - name: f17_mips - name: f18_mips - name: f19_mips - name: f20_mips - name: f21_mips - name: f22_mips - name: f23_mips - name: f24_mips - name: f25_mips - name: f26_mips - name: f27_mips - name: f28_mips - name: f29_mips - name: f30_mips - name: f31_mips # SystemZ registers - name: r0_systemz - name: r1_systemz - name: r2_systemz - name: r3_systemz - name: r4_systemz - name: r5_systemz - name: r6_systemz - name: r7_systemz - name: r8_systemz - name: r9_systemz - name: r10_systemz - name: r11_systemz - name: r12_systemz - name: r13_systemz - name: r14_systemz - name: r15_systemz - name: f0_systemz - name: f1_systemz - name: f2_systemz - name: f3_systemz - name: f4_systemz - name: f5_systemz - name: f6_systemz - name: f7_systemz - name: f8_systemz - name: f9_systemz - name: f10_systemz - name: f11_systemz - name: f12_systemz - name: f13_systemz - name: f14_systemz - name: f15_systemz - name: Configuration type: struct fields: - name: Disassembly type: DisassemblyConfiguration optional: true - name: Naming type: NamingConfiguration optional: true # Configuration options that don't belong anywhere else find themselves here. # As this list grows, they should be split into their own sub-sections. - name: CommentLineWidth doc: | Sets a recommended comment line width to improve their readability. The default value is `80`. Set to `-1` for unlimited line size. type: uint64_t optional: true - name: StatementComment type: struct fields: - name: Location doc: | The point this comment is attached to, encoded as a set of addresses. When emitted artifact contains a statement with a set of addresses exactly matching the set provided here, the comment is emitted before that statement. If there's no such statement, one is chosen based on how similar its address set is to the address set of the comment. Note that the same comment can be emitted multiple times if there are multiple statements (that do *not* dominate each other) with the same address set. sequence: type: SortedVector elementType: MetaAddress - name: Body type: string - name: NamingConfiguration type: struct fields: - name: UnnamedSegmentPrefix doc: | The prefix for a segment without a name. The default value is `segment_`. type: string optional: true - name: UnnamedDynamicFunctionPrefix doc: | The prefix for a dynamic function with an invalid name. The default value is `dynamic_function_`. type: string optional: true - name: UnnamedFunctionPrefix doc: | The prefix for a local function without a name. The default value is `function_`. type: string optional: true - name: UnnamedTypeDefinitionPrefix doc: | The prefix for a type definition without a name. The default value is "". Note that the type kind (like `struct`, or `typedef`) is going to be inserted automatically after this prefix. type: string optional: true - name: UnnamedEnumEntryPrefix doc: | The prefix for an enum entry without a name. The default value is `enum_entry_`. type: string optional: true - name: UnnamedStructFieldPrefix doc: | The prefix for a struct field without a name. The default value is `offset_`. type: string optional: true - name: UnnamedUnionFieldPrefix doc: | The prefix for a union member without a name. The default value is `member_`. type: string optional: true - name: UnnamedFunctionArgumentPrefix doc: | The prefix for a cabi function argument without a name. The default value is `argument_`. type: string optional: true - name: UnnamedFunctionRegisterPrefix doc: | The prefix for a raw function register without a name. The default value is `register_`. type: string optional: true - name: UnnamedLocalVariablePrefix doc: | The prefix for a local variable without a name. The default value is `var_`. type: string optional: true - name: UnnamedBreakFromLoopVariablePrefix doc: | The prefix for a local variable without a name. The default value is `break_from_loop_`. type: string optional: true - name: UndefinedValuePrefix doc: | The prefix for an undefined value. The default value is `undef_`. type: string optional: true - name: OpaqueCSVValuePrefix doc: | The prefix for accessing an opaque CSV Value. The default value is `undef_`. type: string optional: true - name: MaximumEnumValuePrefix doc: | The prefix for the maximum enum value. The default value is `enum_max_value_`. type: string optional: true - name: StackFrameVariableName doc: | The name of the variable representing stack. The default value is `stack`. type: string optional: true - name: RawStackArgumentName doc: | The name of the variable representing stack. The default value is `stack_arguments`. type: string optional: true - name: LoopStateVariableName doc: | The name of the variable representing stack. The default value is `loop_state_var`. type: string optional: true - name: StructPaddingPrefix doc: | The prefix for a padding struct field. The default value is `padding_at_`. type: string optional: true - name: ArtificialReturnValuePrefix doc: | The prefix for an artificial raw function return value. The default value is `artificial_struct_returned_by_`. type: string optional: true - name: ArtificialArrayWrapperPrefix doc: | The prefix for an artificial array wrapper. The default value is `artificial_wrapper_`. type: string optional: true - name: ArtificialArrayWrapperFieldName doc: | The name of the field within the artificial array wrapper. See `ArtificialArrayWrapperPrefix`. The default value is `the_array`. type: string optional: true - name: ReserveNamesStartingWithUnderscore doc: | When this is set to `true`, all the names starting with underscores will have a \ref ReservedNamePrefix prefix attached. type: bool optional: true - name: DisassemblyConfiguration type: struct fields: - name: DisableEmissionOfInstructionAddress type: bool optional: true - name: DisableEmissionOfRawBytes type: bool optional: true - name: UseX86ATTSyntax doc: x86-only. type: bool optional: true - name: AddressStyle doc: | The default value is `Smart`. See the related enum for further explanation. type: DisassemblyConfigurationAddressStyle optional: true - name: ImmediateStyle doc: | The default value is `CHexadecimal`. See the related enum for further explanation. type: DisassemblyConfigurationImmediateStyle optional: true - name: PrintFullMetaAddress doc: | Set this to true to include the full meta-address whenever one is printed. The default value of `false` omits the address type as long as it matches that of the binary. type: bool optional: true - name: BasicBlockPrefix doc: | The prefix attached to the basic block address in the disassembly views. The default value is `bb_`. type: string optional: true - name: DisassemblyConfigurationImmediateStyle type: enum members: - name: Decimal - name: CHexadecimal - name: AsmHexadecimal - name: DisassemblyConfigurationAddressStyle type: enum members: - name: Smart doc: | Look for the addresses among basic blocks and functions. When a match is found, replace the addresses with relevant labels. Otherwise, prints an absolute address instead. - name: SmartWithPCRelativeFallback doc: | Same as `Smart`, except when unable to single out the target, print a PC-relative address instead. - name: Strict doc: | Same as `Smart`, except when unable to single out the target, print an error token. - name: Global doc: | Convert PC relative addresses into global representation. - name: PCRelative doc: | Print all the addresses exactly how disassembler emitted them in PC-relative mode. - name: Argument doc: | The argument of a `CABIFunctionType`. type: struct fields: - name: Index type: uint64_t doc: The argument index. - name: Type type: Type doc: The type of the argument. upcastable: true - name: Name type: string optional: true - name: Comment type: string optional: true key: - Index - name: Architecture type: enum members: - name: x86 - name: x86_64 - name: arm - name: aarch64 - name: mips - name: mipsel - name: systemz - name: ABI type: enum members: - name: SystemV_x86_64 doc: | 64-bit SystemV ABI for x86 processor architecture ([reference](https://gitlab.com/x86-psABIs/x86-64-ABI)). - name: SystemV_x86 doc: | 32-bit SystemV ABI for x86 processor architecture ([reference][abi1]). [abi1]: https://gitlab.com/x86-psABIs/i386-ABI/-/tree/hjl/x86/master - name: SystemV_x86_regparm_3 doc: | A GCC specific modification of the 32-bit SystemV ABI for x86 processor architecture. It allows three first GPR-sized arguments to be passed using the EAX, EDX, and ECX registers. See the reference for `regparm` x86 function attribute. - name: SystemV_x86_regparm_2 doc: | A GCC specific modification of the 32-bit SystemV ABI for x86 processor architecture. It allows two first GPR-sized arguments to be passed using the EAX, and ECX registers. See the GCC documentation for `regparm` x86 function attribute. - name: SystemV_x86_regparm_1 doc: | A GCC specific modification of the 32-bit SystemV ABI for x86 processor architecture. It allows the first GPR-sized argument to be passed using the EAX register. See the GCC documentation for `regparm` x86 function attribute. - name: Microsoft_x86_64 doc: > 64-bit Microsoft ABI for x86 processor architecture ([reference][abi2]). [abi2]: https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention - name: Microsoft_x86_64_vectorcall doc: | A modification of 64-bit Microsoft ABI for x86 processor architecture ([reference](https://docs.microsoft.com/en-us/cpp/cpp/vectorcall)). It allows using extra vector registers for passing function arguments. - name: Microsoft_x86_cdecl doc: | The default 32-bit Microsoft ABI for x86 processor architecture ([reference](https://docs.microsoft.com/en-us/cpp/cpp/cdecl)). It was indented to be compatible with `SystemV_x86` but there are slight differences. - name: Microsoft_x86_cdecl_gcc doc: | 32-bit Microsoft x86 `cdecl` abi as implemented in GCC (subtly different from the original). - name: Microsoft_x86_stdcall doc: | A modification of the 32-bit `__cdecl` Microsoft ABI for x86 processor architecture ([reference](https://docs.microsoft.com/en-us/cpp/cpp/stdcall)). The main difference is the fact that the callee is responsible for stack cleanup instead of the caller. - name: Microsoft_x86_stdcall_gcc doc: | 32-bit Microsoft x86 `stdcall` abi as implemented in GCC (subtly different from the original). - name: Microsoft_x86_thiscall doc: | A modification of the 32-bit `__stdcall` Microsoft ABI for x86 processor architecture ([reference](https://docs.microsoft.com/en-us/cpp/cpp/thiscall)). The main difference is the fact that it allows to pass a single (the first) function argument using a register. This ABI is only used for member function call where the first argument is always a `this` pointer. - name: Microsoft_x86_fastcall doc: | A modification of the 32-bit `__stdcall` Microsoft ABI for x86 processor architecture ([reference](https://docs.microsoft.com/en-us/cpp/cpp/fastcall)). The main difference is the fact that it allows to pass two first GPR-sized non-aggregate function arguments in registers. - name: Microsoft_x86_fastcall_gcc doc: | 32-bit Microsoft x86 `fastcall` abi as implemented in GCC (subtly different from the original). - name: Microsoft_x86_vectorcall doc: | A modification of the 32-bit `__fastcall` Microsoft ABI for x86 processor architecture ([reference](https://docs.microsoft.com/en-us/cpp/cpp/vectorcall)). It allows using extra vector registers for passing function arguments. - name: AAPCS64 doc: | Stands for `Arm Architecture Procedure Call Standard (64-bit)` ([reference](https://github.com/ARM-software/abi-aa/releases)). The official ABI for AArch64 (ARM64) processor architecture. - name: Microsoft_AAPCS64 doc: > Stands for "Arm Architecture Procedure Call Standard (64-bit)". This represents the version of the ABI used by windows-on-arm. For differences from the original ABI see the [reference][ab3]. [ab3]: https://learn.microsoft.com/cpp/build/arm64-windows-abi-conventions - name: Apple_AAPCS64 doc: "Stands for \"Arm Architecture Procedure Call Standard (64-bit)\".\n This represents the version of the ABI used by the apple products.\n For differences from the original ABI see the [reference](\ https://developer.apple.com/documentation/xcode/writing-arm64- code-for-apple-platforms)." - name: AAPCS doc: | Stands for "Arm Architecture Procedure Call Standard" ([reference](https://github.com/ARM-software/abi-aa/releases)). The official ABI for ARM processor architecture. - name: SystemV_MIPS_o32 doc: > The ABI for MIPS RISC processor architecture ([reference][abi4]). [abi4]: http://math-atlas.sourceforge.net/devel/assembly/mipsabi32.pdf - name: SystemV_MIPSEL_o32 doc: > The ABI for little-endian edition of the MIPS RISC processor architecture ([reference][abi5]). [abi5]: http://math-atlas.sourceforge.net/devel/assembly/mipsabi32.pdf - name: SystemZ_s390x doc: | The s390x ABI for SystemZ processor architecture ([reference](https://github.com/IBM/s390x-abi)).