mirror of https://github.com/acidanthera/audk.git
574 lines
10 KiB
C
574 lines
10 KiB
C
/** @file
|
|
|
|
Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
|
|
This program and the accompanying materials
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
|
|
**/
|
|
|
|
#ifndef _EFI_EDB_DISASM_SUPPORT_H_
|
|
#define _EFI_EDB_DISASM_SUPPORT_H_
|
|
|
|
#include <Uefi.h>
|
|
|
|
#define EDB_BYTECODE_NUMBER_IN_LINE 5
|
|
|
|
#ifdef EFI32
|
|
#define EDB_PRINT_ADDRESS_FORMAT L"%08x: "
|
|
#else
|
|
// To use 012l instead of 016l because space is not enough
|
|
#define EDB_PRINT_ADDRESS_FORMAT L"%012lx: "
|
|
#endif
|
|
|
|
#define OPCODE_MAX 0x40
|
|
|
|
#define EDB_INSTRUCTION_NAME_MAX_LENGTH 10
|
|
#define EDB_INSTRUCTION_NAME_MAX_SIZE (EDB_INSTRUCTION_NAME_MAX_LENGTH * sizeof(CHAR16))
|
|
#define EDB_INSTRUCTION_CONTENT_MAX_LENGTH 30
|
|
#define EDB_INSTRUCTION_CONTENT_MAX_SIZE (EDB_INSTRUCTION_CONTENT_MAX_LENGTH * sizeof(CHAR16))
|
|
|
|
/**
|
|
|
|
Set offset for Instruction name and content.
|
|
|
|
@param InstructionNameOffset - Instruction name offset
|
|
@param InstructionContentOffset - Instruction content offset
|
|
|
|
**/
|
|
VOID
|
|
EdbSetOffset (
|
|
IN UINTN InstructionNameOffset,
|
|
IN UINTN InstructionContentOffset
|
|
);
|
|
|
|
/**
|
|
|
|
Pre instruction string construction.
|
|
|
|
@return Instruction string
|
|
|
|
**/
|
|
CHAR16 *
|
|
EdbPreInstructionString (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
|
|
Post instruction string construction.
|
|
|
|
@return Instruction string
|
|
|
|
**/
|
|
CHAR16 *
|
|
EdbPostInstructionString (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
|
|
Print the instruction name.
|
|
|
|
@param Name - instruction name
|
|
|
|
@return Instruction name offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintInstructionName (
|
|
IN CHAR16 *Name
|
|
);
|
|
|
|
/**
|
|
|
|
Get Sign, NaturalUnits, and ConstantUnits of the WORD data.
|
|
|
|
@param Data16 - WORD data
|
|
@param NaturalUnits - Natural Units of the WORD
|
|
@param ConstantUnits - Constant Units of the WORD
|
|
|
|
@return Sign value of WORD
|
|
|
|
**/
|
|
BOOLEAN
|
|
EdbGetNaturalIndex16 (
|
|
IN UINT16 Data16,
|
|
OUT UINTN *NaturalUnits,
|
|
OUT UINTN *ConstantUnits
|
|
);
|
|
|
|
/**
|
|
|
|
Get Sign, NaturalUnits, and ConstantUnits of the DWORD data.
|
|
|
|
@param Data32 - DWORD data
|
|
@param NaturalUnits - Natural Units of the DWORD
|
|
@param ConstantUnits - Constant Units of the DWORD
|
|
|
|
@return Sign value of DWORD
|
|
|
|
**/
|
|
BOOLEAN
|
|
EdbGetNaturalIndex32 (
|
|
IN UINT32 Data32,
|
|
OUT UINTN *NaturalUnits,
|
|
OUT UINTN *ConstantUnits
|
|
);
|
|
|
|
/**
|
|
|
|
Get Sign, NaturalUnits, and ConstantUnits of the QWORD data.
|
|
|
|
@param Data64 - QWORD data
|
|
@param NaturalUnits - Natural Units of the QWORD
|
|
@param ConstantUnits - Constant Units of the QWORD
|
|
|
|
@return Sign value of QWORD
|
|
|
|
**/
|
|
BOOLEAN
|
|
EdbGetNaturalIndex64 (
|
|
IN UINT64 Data64,
|
|
OUT UINT64 *NaturalUnits,
|
|
OUT UINT64 *ConstantUnits
|
|
);
|
|
|
|
/**
|
|
|
|
Print the hexical WORD raw index data to instruction content.
|
|
|
|
@param Data16 - WORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintRawIndexData16 (
|
|
IN UINT16 Data16
|
|
);
|
|
|
|
/**
|
|
|
|
Print the hexical DWORD raw index data to instruction content.
|
|
|
|
@param Data32 - DWORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintRawIndexData32 (
|
|
IN UINT32 Data32
|
|
);
|
|
|
|
/**
|
|
|
|
Print the hexical QWORD raw index data to instruction content.
|
|
|
|
@param Data64 - QWORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintRawIndexData64 (
|
|
IN UINT64 Data64
|
|
);
|
|
|
|
/**
|
|
|
|
Print register 1 in operands.
|
|
|
|
@param Operands - instruction operands
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintRegister1 (
|
|
IN UINT8 Operands
|
|
);
|
|
|
|
/**
|
|
|
|
Print register 2 in operands.
|
|
|
|
@param Operands - instruction operands
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintRegister2 (
|
|
IN UINT8 Operands
|
|
);
|
|
|
|
/**
|
|
|
|
Print dedicated register 1 in operands.
|
|
|
|
@param Operands - instruction operands
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintDedicatedRegister1 (
|
|
IN UINT8 Operands
|
|
);
|
|
|
|
/**
|
|
|
|
Print dedicated register 2 in operands.
|
|
|
|
@param Operands - instruction operands
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintDedicatedRegister2 (
|
|
IN UINT8 Operands
|
|
);
|
|
|
|
/**
|
|
|
|
Print the hexical UINTN index data to instruction content.
|
|
|
|
@param Sign - Signed bit of UINTN data
|
|
@param NaturalUnits - natural units of UINTN data
|
|
@param ConstantUnits - natural units of UINTN data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintIndexData (
|
|
IN BOOLEAN Sign,
|
|
IN UINTN NaturalUnits,
|
|
IN UINTN ConstantUnits
|
|
);
|
|
|
|
/**
|
|
|
|
Print the hexical QWORD index data to instruction content.
|
|
|
|
@param Sign - Signed bit of QWORD data
|
|
@param NaturalUnits - natural units of QWORD data
|
|
@param ConstantUnits - natural units of QWORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintIndexData64 (
|
|
IN BOOLEAN Sign,
|
|
IN UINT64 NaturalUnits,
|
|
IN UINT64 ConstantUnits
|
|
);
|
|
|
|
/**
|
|
|
|
Print the hexical BYTE immediate data to instruction content.
|
|
|
|
@param Data - BYTE data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintImmData8 (
|
|
IN UINT8 Data
|
|
);
|
|
|
|
/**
|
|
|
|
Print the hexical WORD immediate data to instruction content.
|
|
|
|
@param Data - WORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintImmData16 (
|
|
IN UINT16 Data
|
|
);
|
|
|
|
/**
|
|
|
|
Print the hexical DWORD immediate data to instruction content.
|
|
|
|
@param Data - DWORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintImmData32 (
|
|
IN UINT32 Data
|
|
);
|
|
|
|
/**
|
|
|
|
Print the hexical QWORD immediate data to instruction content.
|
|
|
|
@param Data - QWORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintImmData64 (
|
|
IN UINT64 Data
|
|
);
|
|
|
|
/**
|
|
|
|
Print the decimal UINTN immediate data to instruction content.
|
|
|
|
@param Data - UINTN data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintImmDatan (
|
|
IN UINTN Data
|
|
);
|
|
|
|
/**
|
|
|
|
Print the decimal QWORD immediate data to instruction content.
|
|
|
|
@param Data64 - QWORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintImmData64n (
|
|
IN UINT64 Data64
|
|
);
|
|
|
|
/**
|
|
|
|
Print the hexical BYTE to instruction content.
|
|
|
|
@param Data8 - BYTE data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintData8 (
|
|
IN UINT8 Data8
|
|
);
|
|
|
|
/**
|
|
|
|
Print the hexical WORD to instruction content.
|
|
|
|
@param Data16 - WORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintData16 (
|
|
IN UINT16 Data16
|
|
);
|
|
|
|
/**
|
|
|
|
Print the hexical DWORD to instruction content.
|
|
|
|
@param Data32 - DWORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintData32 (
|
|
IN UINT32 Data32
|
|
);
|
|
|
|
/**
|
|
|
|
Print the hexical QWORD to instruction content.
|
|
|
|
@param Data64 - QWORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintData64 (
|
|
IN UINT64 Data64
|
|
);
|
|
|
|
/**
|
|
|
|
Print the decimal unsigned UINTN to instruction content.
|
|
|
|
@param Data - unsigned UINTN data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintDatan (
|
|
IN UINTN Data
|
|
);
|
|
|
|
/**
|
|
|
|
Print the decimal unsigned QWORD to instruction content.
|
|
|
|
@param Data64 - unsigned QWORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintData64n (
|
|
IN UINT64 Data64
|
|
);
|
|
|
|
/**
|
|
|
|
Print the decimal signed BYTE to instruction content.
|
|
|
|
@param Data8 - signed BYTE data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintData8s (
|
|
IN UINT8 Data8
|
|
);
|
|
|
|
/**
|
|
|
|
Print the decimal signed WORD to instruction content.
|
|
|
|
@param Data16 - signed WORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintData16s (
|
|
IN UINT16 Data16
|
|
);
|
|
|
|
/**
|
|
|
|
Print the decimal signed DWORD to instruction content.
|
|
|
|
@param Data32 - signed DWORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintData32s (
|
|
IN UINT32 Data32
|
|
);
|
|
|
|
/**
|
|
|
|
Print the decimal signed QWORD to instruction content.
|
|
|
|
@param Data64 - signed QWORD data
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintData64s (
|
|
IN UINT64 Data64
|
|
);
|
|
|
|
/**
|
|
|
|
Print the comma to instruction content.
|
|
|
|
@return Instruction content offset
|
|
|
|
**/
|
|
UINTN
|
|
EdbPrintComma (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
|
|
Find the symbol string according to address, then print it.
|
|
|
|
@param Address - instruction address
|
|
|
|
@retval 1 - symbol string is found and printed
|
|
@retval 0 - symbol string not found
|
|
|
|
**/
|
|
UINTN
|
|
EdbFindAndPrintSymbol (
|
|
IN UINTN Address
|
|
);
|
|
|
|
/**
|
|
|
|
Print the EBC byte code.
|
|
|
|
@param InstructionAddress - instruction address
|
|
@param InstructionNumber - instruction number
|
|
|
|
**/
|
|
VOID
|
|
EdbPrintRaw (
|
|
IN EFI_PHYSICAL_ADDRESS InstructionAddress,
|
|
IN UINTN InstructionNumber
|
|
);
|
|
|
|
/**
|
|
|
|
Print the EBC asm code.
|
|
|
|
@param DebuggerPrivate - EBC Debugger private data structure
|
|
@param SystemContext - EBC system context.
|
|
|
|
@retval EFI_SUCCESS - show disasm successfully
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EdbShowDisasm (
|
|
IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,
|
|
IN EFI_SYSTEM_CONTEXT SystemContext
|
|
);
|
|
|
|
/**
|
|
|
|
Get register value according to the system context, and register index.
|
|
|
|
@param SystemContext - EBC system context.
|
|
@param Index - EBC register index
|
|
|
|
@return register value
|
|
|
|
**/
|
|
UINT64
|
|
GetRegisterValue (
|
|
IN EFI_SYSTEM_CONTEXT SystemContext,
|
|
IN UINT8 Index
|
|
);
|
|
|
|
#endif
|