mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-17 12:48:41 +00:00
Move msil and mdmp into radare2-extras, add r2pm pkgs
This commit is contained in:
parent
8c4430874d
commit
ad74a6ec6b
19
binr/r2pm/d/mdmp
Normal file
19
binr/r2pm/d/mdmp
Normal file
@ -0,0 +1,19 @@
|
||||
R2PM_BEGIN
|
||||
|
||||
R2PM_GIT "https://github.com/radare/radare2-extras"
|
||||
R2PM_DESC "[RBin] minidump support (wip)"
|
||||
|
||||
R2PM_INSTALL() {
|
||||
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
|
||||
./configure --prefix=/usr
|
||||
cd libr/bin
|
||||
make clean
|
||||
make mdmp
|
||||
make mdmp-install HOMEDEST=~/.config/radare2/plugins
|
||||
}
|
||||
|
||||
R2PM_UNINSTALL() {
|
||||
rm -f ~/.config/radare2/plugins/*mdmp*
|
||||
}
|
||||
|
||||
R2PM_END
|
19
binr/r2pm/d/msil
Normal file
19
binr/r2pm/d/msil
Normal file
@ -0,0 +1,19 @@
|
||||
R2PM_BEGIN
|
||||
|
||||
R2PM_GIT "https://github.com/radare/radare2-extras"
|
||||
R2PM_DESC "[RAsm] MSIL disassembler (wip)"
|
||||
|
||||
R2PM_INSTALL() {
|
||||
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
|
||||
./configure --prefix=/usr
|
||||
cd libr/asm
|
||||
make clean
|
||||
make msil
|
||||
make msil-install HOMEDEST=~/.config/radare2/plugins
|
||||
}
|
||||
|
||||
R2PM_UNINSTALL() {
|
||||
rm -f ~/.config/radare2/plugins/*msil*
|
||||
}
|
||||
|
||||
R2PM_END
|
File diff suppressed because it is too large
Load Diff
@ -1,356 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2008 Daniel Pistelli.
|
||||
//
|
||||
// One-byte opcodes
|
||||
//
|
||||
#define u8 unsigned char
|
||||
#define ut16 unsigned short
|
||||
#define ut32 unsigned int
|
||||
#define ut64 unsigned long long
|
||||
|
||||
/* TODO: use enum ! */
|
||||
#define ILOPCODE_NOP 0x00
|
||||
#define ILOPCODE_BREAK 0x01
|
||||
|
||||
#define ILOPCODE_LDARG_0 0x02
|
||||
#define ILOPCODE_LDARG_1 0x03
|
||||
#define ILOPCODE_LDARG_2 0x04
|
||||
#define ILOPCODE_LDARG_3 0x05
|
||||
|
||||
#define ILOPCODE_LDLOC_0 0x06
|
||||
#define ILOPCODE_LDLOC_1 0x07
|
||||
#define ILOPCODE_LDLOC_2 0x08
|
||||
#define ILOPCODE_LDLOC_3 0x09
|
||||
|
||||
#define ILOPCODE_STLOC_0 0x0A
|
||||
#define ILOPCODE_STLOC_1 0x0B
|
||||
#define ILOPCODE_STLOC_2 0x0C
|
||||
#define ILOPCODE_STLOC_3 0x0D
|
||||
|
||||
#define ILOPCODE_LDARG_S 0x0E
|
||||
#define ILOPCODE_LDARGA_S 0x0F
|
||||
#define ILOPCODE_STARG_S 0x10
|
||||
|
||||
#define ILOPCODE_LDLOC_S 0x11
|
||||
#define ILOPCODE_LDLOCA_S 0x12
|
||||
#define ILOPCODE_STLOC_S 0x13
|
||||
|
||||
#define ILOPCODE_LDNULL 0x14
|
||||
#define ILOPCODE_LDC_I4_M1 0x15
|
||||
#define ILOPCODE_LDC_I4_0 0x16
|
||||
#define ILOPCODE_LDC_I4_1 0x17
|
||||
#define ILOPCODE_LDC_I4_2 0x18
|
||||
#define ILOPCODE_LDC_I4_3 0x19
|
||||
#define ILOPCODE_LDC_I4_4 0x1A
|
||||
#define ILOPCODE_LDC_I4_5 0x1B
|
||||
#define ILOPCODE_LDC_I4_6 0x1C
|
||||
#define ILOPCODE_LDC_I4_7 0x1D
|
||||
#define ILOPCODE_LDC_I4_8 0x1E
|
||||
#define ILOPCODE_LDC_I4_S 0x1F
|
||||
#define ILOPCODE_LDC_I4 0x20
|
||||
#define ILOPCODE_LDC_I8 0x21
|
||||
#define ILOPCODE_LDC_R4 0x22
|
||||
#define ILOPCODE_LDC_R8 0x23
|
||||
|
||||
// #define ILOPCODE_? 0x24
|
||||
|
||||
#define ILOPCODE_DUP 0x25
|
||||
#define ILOPCODE_POP 0x26
|
||||
#define ILOPCODE_JMP 0x27
|
||||
|
||||
#define ILOPCODE_CALL 0x28
|
||||
#define ILOPCODE_CALLI 0x29
|
||||
|
||||
#define ILOPCODE_RET 0x2A
|
||||
|
||||
#define ILOPCODE_BR_S 0x2B
|
||||
#define ILOPCODE_BRFALSE_S 0x2C
|
||||
#define ILOPCODE_BRTRUE_S 0x2D
|
||||
#define ILOPCODE_BEQ_S 0x2E
|
||||
#define ILOPCODE_BGE_S 0x2F
|
||||
#define ILOPCODE_BGT_S 0x30
|
||||
#define ILOPCODE_BLE_S 0x31
|
||||
#define ILOPCODE_BLT_S 0x32
|
||||
#define ILOPCODE_BNE_UN_S 0x33
|
||||
#define ILOPCODE_BGE_UN_S 0x34
|
||||
#define ILOPCODE_BGT_UN_S 0x35
|
||||
#define ILOPCODE_BLE_UN_S 0x36
|
||||
#define ILOPCODE_BLT_UN_S 0x37
|
||||
#define ILOPCODE_BR 0x38
|
||||
#define ILOPCODE_BRFALSE 0x39
|
||||
#define ILOPCODE_BRTRUE 0x3A
|
||||
#define ILOPCODE_BEQ 0x3B
|
||||
#define ILOPCODE_BGE 0x3C
|
||||
#define ILOPCODE_BGT 0x3D
|
||||
#define ILOPCODE_BLE 0x3E
|
||||
#define ILOPCODE_BLT 0x3F
|
||||
#define ILOPCODE_BNE_UN 0x40
|
||||
#define ILOPCODE_BGE_UN 0x41
|
||||
#define ILOPCODE_BGT_UN 0x42
|
||||
#define ILOPCODE_BLE_UN 0x43
|
||||
#define ILOPCODE_BLT_UN 0x44
|
||||
|
||||
#define ILOPCODE_SWITCH 0x45
|
||||
|
||||
#define ILOPCODE_LDIND_I1 0x46
|
||||
#define ILOPCODE_LDIND_U1 0x47
|
||||
#define ILOPCODE_LDIND_I2 0x48
|
||||
#define ILOPCODE_LDIND_U2 0x49
|
||||
#define ILOPCODE_LDIND_I4 0x4A
|
||||
#define ILOPCODE_LDIND_U4 0x4B
|
||||
#define ILOPCODE_LDIND_I8 0x4C
|
||||
#define ILOPCODE_LDIND_I 0x4D
|
||||
#define ILOPCODE_LDIND_R4 0x4E
|
||||
#define ILOPCODE_LDIND_R8 0x4F
|
||||
#define ILOPCODE_LDIND_REF 0x50
|
||||
|
||||
#define ILOPCODE_STIND_REF 0x51
|
||||
#define ILOPCODE_STIND_I1 0x52
|
||||
#define ILOPCODE_STIND_I2 0x53
|
||||
#define ILOPCODE_STIND_I4 0x54
|
||||
#define ILOPCODE_STIND_I8 0x55
|
||||
#define ILOPCODE_STIND_R4 0x56
|
||||
#define ILOPCODE_STIND_R8 0x57
|
||||
|
||||
#define ILOPCODE_ADD 0x58
|
||||
#define ILOPCODE_SUB 0x59
|
||||
#define ILOPCODE_MUL 0x5A
|
||||
#define ILOPCODE_DIV 0x5B
|
||||
#define ILOPCODE_DIV_UN 0x5C
|
||||
#define ILOPCODE_REM 0x5D
|
||||
#define ILOPCODE_REM_UN 0x5E
|
||||
#define ILOPCODE_AND 0x5F
|
||||
#define ILOPCODE_OR 0x60
|
||||
#define ILOPCODE_XOR 0x61
|
||||
#define ILOPCODE_SHL 0x62
|
||||
#define ILOPCODE_SHR 0x63
|
||||
#define ILOPCODE_SHR_UN 0x64
|
||||
#define ILOPCODE_NEG 0x65
|
||||
#define ILOPCODE_NOT 0x66
|
||||
|
||||
#define ILOPCODE_CONV_I1 0x67
|
||||
#define ILOPCODE_CONV_I2 0x68
|
||||
#define ILOPCODE_CONV_I4 0x69
|
||||
#define ILOPCODE_CONV_I8 0x6A
|
||||
#define ILOPCODE_CONV_R4 0x6B
|
||||
#define ILOPCODE_CONV_R8 0x6C
|
||||
#define ILOPCODE_CONV_U4 0x6D
|
||||
#define ILOPCODE_CONV_U8 0x6E
|
||||
|
||||
#define ILOPCODE_CALLVIRT 0x6F
|
||||
#define ILOPCODE_CPOBJ 0x70
|
||||
#define ILOPCODE_LDOBJ 0x71
|
||||
#define ILOPCODE_LDSTR 0x72
|
||||
#define ILOPCODE_NEWOBJ 0x73
|
||||
#define ILOPCODE_CASTCLASS 0x74
|
||||
#define ILOPCODE_ISINST 0x75
|
||||
#define ILOPCODE_CONV_R_UN 0x76
|
||||
|
||||
//#define ILOPCODE_? 0x77
|
||||
//#define ILOPCODE_? 0x78
|
||||
|
||||
#define ILOPCODE_UNBOX 0x79
|
||||
#define ILOPCODE_THROW 0x7A
|
||||
|
||||
#define ILOPCODE_LDFLD 0x7B
|
||||
#define ILOPCODE_LDFLDA 0x7C
|
||||
#define ILOPCODE_STFLD 0x7D
|
||||
#define ILOPCODE_LDSFLD 0x7E
|
||||
#define ILOPCODE_LDSFLDA 0x7F
|
||||
#define ILOPCODE_STSFLD 0x80
|
||||
|
||||
#define ILOPCODE_STOBJ 0x81
|
||||
|
||||
#define ILOPCODE_CONV_OVF_I1_UN 0x82
|
||||
#define ILOPCODE_CONV_OVF_I2_UN 0x83
|
||||
#define ILOPCODE_CONV_OVF_I4_UN 0x84
|
||||
#define ILOPCODE_CONV_OVF_I8_UN 0x85
|
||||
#define ILOPCODE_CONV_OVF_U1_UN 0x86
|
||||
#define ILOPCODE_CONV_OVF_U2_UN 0x87
|
||||
#define ILOPCODE_CONV_OVF_U4_UN 0x88
|
||||
#define ILOPCODE_CONV_OVF_U8_UN 0x89
|
||||
#define ILOPCODE_CONV_OVF_I_UN 0x8A
|
||||
#define ILOPCODE_CONV_OVF_U_UN 0x8B
|
||||
|
||||
#define ILOPCODE_BOX 0x8C
|
||||
#define ILOPCODE_NEWARR 0x8D
|
||||
#define ILOPCODE_LDLEN 0x8E
|
||||
|
||||
#define ILOPCODE_LDELEMA 0x8F
|
||||
#define ILOPCODE_LDELEM_I1 0x90
|
||||
#define ILOPCODE_LDELEM_U1 0x91
|
||||
#define ILOPCODE_LDELEM_I2 0x92
|
||||
#define ILOPCODE_LDELEM_U2 0x93
|
||||
#define ILOPCODE_LDELEM_I4 0x94
|
||||
#define ILOPCODE_LDELEM_U4 0x95
|
||||
#define ILOPCODE_LDELEM_I8 0x96
|
||||
#define ILOPCODE_LDELEM_I 0x97
|
||||
#define ILOPCODE_LDELEM_R4 0x98
|
||||
#define ILOPCODE_LDELEM_R8 0x99
|
||||
#define ILOPCODE_LDELEM_REF 0x9A
|
||||
|
||||
#define ILOPCODE_STELEM_I 0x9B
|
||||
#define ILOPCODE_STELEM_I1 0x9C
|
||||
#define ILOPCODE_STELEM_I2 0x9D
|
||||
#define ILOPCODE_STELEM_I4 0x9E
|
||||
#define ILOPCODE_STELEM_I8 0x9F
|
||||
#define ILOPCODE_STELEM_R4 0xA0
|
||||
#define ILOPCODE_STELEM_R8 0xA1
|
||||
#define ILOPCODE_STELEM_REF 0xA2
|
||||
|
||||
#define ILOPCODE_LDELEM 0xA3 //
|
||||
#define ILOPCODE_STELEM 0xA4 // Introduced with the framework 2.0
|
||||
#define ILOPCODE_UNBOX_ANY 0xA5 //
|
||||
//#define ILOPCODE_? 0xA6
|
||||
//#define ILOPCODE_? 0xA7
|
||||
//#define ILOPCODE_? 0xA8
|
||||
//#define ILOPCODE_? 0xA9
|
||||
//#define ILOPCODE_? 0xAA
|
||||
//#define ILOPCODE_? 0xAB
|
||||
//#define ILOPCODE_? 0xAC
|
||||
//#define ILOPCODE_? 0xAD
|
||||
//#define ILOPCODE_? 0xAE
|
||||
//#define ILOPCODE_? 0xAF
|
||||
//#define ILOPCODE_? 0xB0
|
||||
//#define ILOPCODE_? 0xB1
|
||||
//#define ILOPCODE_? 0xB2
|
||||
|
||||
#define ILOPCODE_CONV_OVF_I1 0xB3
|
||||
#define ILOPCODE_CONV_OVF_U1 0xB4
|
||||
#define ILOPCODE_CONV_OVF_I2 0xB5
|
||||
#define ILOPCODE_CONV_OVF_U2 0xB6
|
||||
#define ILOPCODE_CONV_OVF_I4 0xB7
|
||||
#define ILOPCODE_CONV_OVF_U4 0xB8
|
||||
#define ILOPCODE_CONV_OVF_I8 0xB9
|
||||
#define ILOPCODE_CONV_OVF_U8 0xBA
|
||||
|
||||
//#define ILOPCODE_? 0xBB
|
||||
//#define ILOPCODE_? 0xBC
|
||||
//#define ILOPCODE_? 0xBD
|
||||
//#define ILOPCODE_? 0xBE
|
||||
//#define ILOPCODE_? 0xBF
|
||||
//#define ILOPCODE_? 0xC0
|
||||
//#define ILOPCODE_? 0xC1
|
||||
|
||||
#define ILOPCODE_REFANYVAL 0xC2
|
||||
#define ILOPCODE_CKFINITE 0xC3
|
||||
|
||||
//#define ILOPCODE_? 0xC4
|
||||
//#define ILOPCODE_? 0xC5
|
||||
|
||||
#define ILOPCODE_MKREFANY 0xC6
|
||||
|
||||
//#define ILOPCODE_? 0xC7
|
||||
//#define ILOPCODE_? 0xC8
|
||||
//#define ILOPCODE_? 0xC9
|
||||
//#define ILOPCODE_? 0xCA
|
||||
//#define ILOPCODE_? 0xCB
|
||||
//#define ILOPCODE_? 0xCC
|
||||
//#define ILOPCODE_? 0xCD
|
||||
//#define ILOPCODE_? 0xCE
|
||||
//#define ILOPCODE_? 0xCF
|
||||
|
||||
#define ILOPCODE_LDTOKEN 0xD0
|
||||
|
||||
#define ILOPCODE_CONV_U2 0xD1
|
||||
#define ILOPCODE_CONV_U1 0xD2
|
||||
#define ILOPCODE_CONV_I 0xD3
|
||||
#define ILOPCODE_CONV_OVF_I 0xD4
|
||||
#define ILOPCODE_CONV_OVF_U 0xD5
|
||||
|
||||
#define ILOPCODE_ADD_OVF 0xD6
|
||||
#define ILOPCODE_ADD_OVF_UN 0xD7
|
||||
#define ILOPCODE_MUL_OVF 0xD8
|
||||
#define ILOPCODE_MUL_OVF_UN 0xD9
|
||||
#define ILOPCODE_SUB_OVF 0xDA
|
||||
#define ILOPCODE_SUB_OVF_UN 0xDB
|
||||
|
||||
#define ILOPCODE_ENDFINALLY 0xDC
|
||||
#define ILOPCODE_LEAVE 0xDD
|
||||
#define ILOPCODE_LEAVE_S 0xDE
|
||||
#define ILOPCODE_STIND_I 0xDF
|
||||
#define ILOPCODE_CONV_U 0xE0
|
||||
|
||||
//
|
||||
// Two-bytes opcodes
|
||||
//
|
||||
|
||||
#define ILOPCODE_ARGLIST 0x00FE
|
||||
#define ILOPCODE_CEQ 0x01FE
|
||||
#define ILOPCODE_CGT 0x02FE
|
||||
#define ILOPCODE_CGT_UN 0x03FE
|
||||
#define ILOPCODE_CLT 0x04FE
|
||||
#define ILOPCODE_CLT_UN 0x05FE
|
||||
#define ILOPCODE_LDFTN 0x06FE
|
||||
#define ILOPCODE_LDVIRTFTN 0x07FE
|
||||
|
||||
//#define ILOPCODE_? 0x08FE
|
||||
|
||||
#define ILOPCODE_LDARG 0x09FE
|
||||
#define ILOPCODE_LDARGA 0x0AFE
|
||||
#define ILOPCODE_STARG 0x0BFE
|
||||
#define ILOPCODE_LDLOC 0x0CFE
|
||||
#define ILOPCODE_LDLOCA 0x0DFE
|
||||
#define ILOPCODE_STLOC 0x0EFE
|
||||
#define ILOPCODE_LOCALLOC 0x0FFE
|
||||
|
||||
//#define ILOPCODE_? 0x10FE
|
||||
|
||||
#define ILOPCODE_ENDFILTER 0x11FE
|
||||
#define ILOPCODE_UNALIGNED_ 0x12FE
|
||||
#define ILOPCODE_VOLATILE_ 0x13FE
|
||||
#define ILOPCODE_TAIL_ 0x14FE
|
||||
#define ILOPCODE_INITOBJ 0x15FE
|
||||
|
||||
#define ILOPCODE_CONSTRAINED_ 0x16FE // Introduced with the framework 2.0
|
||||
|
||||
#define ILOPCODE_CPBLK 0x17FE
|
||||
#define ILOPCODE_INITBLK 0x18FE
|
||||
|
||||
#define ILOPCODE_NO_ 0x19FE // Introduced with the framework 2.0
|
||||
|
||||
#define ILOPCODE_RETHROW 0x1AFE
|
||||
|
||||
//#define ILOPCODE_? 0x1BFE
|
||||
|
||||
#define ILOPCODE_SIZEOF 0x1CFE
|
||||
#define ILOPCODE_REFANYTYPE_V2 0x1DFE
|
||||
#define ILOPCODE_READONLY_ 0x1EFE // Introduced with the framework 2.0
|
||||
|
||||
enum {
|
||||
NUMBER_TYPE_TOKEN =0,
|
||||
NUMBER_TYPE_SMALL_BRANCH,
|
||||
NUMBER_TYPE_BRANCH,
|
||||
NUMBER_TYPE_CHAR,
|
||||
NUMBER_TYPE_WORD,
|
||||
NUMBER_TYPE_DWORD,
|
||||
NUMBER_TYPE_QWORD,
|
||||
NUMBER_TYPE_U8,
|
||||
NUMBER_TYPE_SHORT,
|
||||
NUMBER_TYPE_INT,
|
||||
NUMBER_TYPE_INT64,
|
||||
NUMBER_TYPE_UCHAR,
|
||||
NUMBER_TYPE_USHORT,
|
||||
NUMBER_TYPE_UINT,
|
||||
//NUMBER_TYPE_int64
|
||||
NUMBER_TYPE_FLOAT =15,
|
||||
NUMBER_TYPE_DOUBLE
|
||||
};
|
||||
|
||||
typedef unsigned int DISASMSIL_OFFSET;
|
||||
|
||||
#define MAX_DISASMMSIL_MNEMONIC 100
|
||||
|
||||
typedef struct _ILOPCODE_STRUCT
|
||||
{
|
||||
DISASMSIL_OFFSET Offset;
|
||||
unsigned int Size;
|
||||
|
||||
char Mnemonic[MAX_DISASMMSIL_MNEMONIC];
|
||||
|
||||
} ILOPCODE_STRUCT, *PILOPCODE_STRUCT;
|
||||
|
||||
|
||||
int DisasMSIL(const u8 *pMemory, unsigned int MemorySize, DISASMSIL_OFFSET CodeBase, ILOPCODE_STRUCT *iloparray, unsigned int nOpcodeStructs, unsigned int *nDisassembledInstr);
|
||||
int GetSingleMSILInstr(const u8 *pMemory, unsigned int MemorySize, DISASMSIL_OFFSET CodeBase, ILOPCODE_STRUCT *ilop);
|
||||
|
@ -17,7 +17,7 @@ ALL_TARGETS=
|
||||
ARCHS=mips_gnu.mk x86_cs.mk sparc_cs.mk sparc_gnu.mk java.mk bf.mk arm_gnu.mk dalvik.mk
|
||||
ARCHS+=x86_as.mk x86_nz.mk cris_gnu.mk
|
||||
ARCHS+=ppc_gnu.mk ppc_cs.mk x86_olly.mk x86_udis.mk csr.mk x86_nasm.mk avr.mk
|
||||
ARCHS+=msil.mk sh.mk arm_winedbg.mk tms320.mk gb.mk snes.mk ebc.mk malbolge.mk ws.mk
|
||||
ARCHS+=sh.mk arm_winedbg.mk tms320.mk gb.mk snes.mk ebc.mk malbolge.mk ws.mk
|
||||
ARCHS+=6502.mk h8300.mk cr16.mk v850.mk spc700.mk propeller.mk msp430.mk i4004.mk z80_cr.mk
|
||||
ARCHS+=lh5801.mk v810.mk mcs96.mk lm32.mk
|
||||
ARCHS+=riscv.mk
|
||||
|
@ -1,43 +0,0 @@
|
||||
/* radare - Public Domain - Copyright 2011-2015 - capi_x, pancake */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <r_types.h>
|
||||
#include <r_lib.h>
|
||||
#include <r_util.h>
|
||||
#include <r_asm.h>
|
||||
#include "msil/demsil.c"
|
||||
|
||||
static int arch_msil_disasm(char *str, const ut8 *buf, ut64 seek) {
|
||||
ut32 n;
|
||||
int o;
|
||||
DISASMSIL_OFFSET CodeBase = seek;
|
||||
ILOPCODE_STRUCT ilopar[8];
|
||||
o = DisasMSIL (buf, 16, CodeBase, ilopar, 8, &n);
|
||||
sprintf (str,"%s", ilopar[0].Mnemonic);
|
||||
return o;
|
||||
}
|
||||
|
||||
static int disassemble(RAsm *a, RAsmOp *op, const ut8 *buf, int len) {
|
||||
return (op->size = arch_msil_disasm (op->buf_asm, buf, a->pc));
|
||||
}
|
||||
|
||||
RAsmPlugin r_asm_plugin_msil = {
|
||||
.name = "msil",
|
||||
.arch = "msil",
|
||||
.license = "PD",
|
||||
.bits = 16|32|64,
|
||||
.desc = ".NET Microsoft Intermediate Language",
|
||||
.init = NULL,
|
||||
.fini = NULL,
|
||||
.disassemble = &disassemble,
|
||||
.assemble = NULL
|
||||
};
|
||||
|
||||
#ifndef CORELIB
|
||||
struct r_lib_struct_t radare_plugin = {
|
||||
.type = R_LIB_TYPE_ASM,
|
||||
.data = &r_asm_plugin_msil,
|
||||
.version = R2_VERSION
|
||||
};
|
||||
#endif
|
@ -1,12 +0,0 @@
|
||||
OBJ_MSIL=asm_msil.o
|
||||
#OBJ_MSIL+=../arch/msil/demsil.o
|
||||
|
||||
STATIC_OBJ+=${OBJ_MSIL}
|
||||
TARGET_MSIL=asm_msil.${EXT_SO}
|
||||
|
||||
ifeq ($(WITHPIC),1)
|
||||
ALL_TARGETS+=${TARGET_MSIL}
|
||||
|
||||
${TARGET_MSIL}: ${OBJ_MSIL}
|
||||
${CC} $(call libname,asm_msil) ${LDFLAGS} ${CFLAGS} -o asm_msil.${EXT_SO} ${OBJ_MSIL}
|
||||
endif
|
@ -1,371 +0,0 @@
|
||||
/* radare - LGPL - Copyright 2015 - Dāvis */
|
||||
#include <r_util.h>
|
||||
|
||||
#include "mdmp.h"
|
||||
|
||||
struct r_bin_mdmp_obj *r_bin_mdmp_new_buf(struct r_buf_t *buf) {
|
||||
struct r_bin_mdmp_obj *obj = R_NEW0(struct r_bin_mdmp_obj);
|
||||
if (!obj) return NULL;
|
||||
obj->b = r_buf_new_with_buf (buf);
|
||||
if (!obj->b) {
|
||||
eprintf ("r_bin_mdmp_new_buf: r_buf_new_with_buf failed\n");
|
||||
r_bin_mdmp_free (obj);
|
||||
return NULL;
|
||||
}
|
||||
obj->kv = sdb_new0 ();
|
||||
if (!r_bin_mdmp_init (obj)) {
|
||||
r_bin_mdmp_free (obj);
|
||||
return NULL;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
void r_bin_mdmp_free(struct r_bin_mdmp_obj *obj) {
|
||||
if (!obj) return;
|
||||
r_bin_mdmp_destroy_lists(obj);
|
||||
obj->system_info = NULL;
|
||||
obj->hdr = NULL;
|
||||
if (obj->kv) {
|
||||
sdb_free (obj->kv);
|
||||
obj->kv = NULL;
|
||||
}
|
||||
if (obj->b) {
|
||||
r_buf_free (obj->b);
|
||||
obj->b = NULL;
|
||||
}
|
||||
free (obj);
|
||||
}
|
||||
|
||||
bool r_bin_mdmp_create_lists(struct r_bin_mdmp_obj *obj) {
|
||||
if (!(obj->streams = r_list_new())) return false;
|
||||
if (!(obj->threads = r_list_new())) return false;
|
||||
if (!(obj->thread_info = r_list_new())) return false;
|
||||
if (!(obj->threads_ex = r_list_new())) return false;
|
||||
if (!(obj->modules = r_list_new())) return false;
|
||||
if (!(obj->unloaded_modules = r_list_new())) return false;
|
||||
if (!(obj->memory = r_list_new())) return false;
|
||||
if (!(obj->memory64 = r_list_new())) return false;
|
||||
if (!(obj->memory_info = r_list_new())) return false;
|
||||
if (!(obj->exceptions = r_list_new())) return false;
|
||||
if (!(obj->comments_a = r_list_new())) return false;
|
||||
if (!(obj->comments_w = r_list_new())) return false;
|
||||
if (!(obj->handle_streams = r_list_new())) return false;
|
||||
if (!(obj->function_tables = r_list_new())) return false;
|
||||
if (!(obj->misc_info = r_list_newf (free))) return false;
|
||||
if (!(obj->handle_operations = r_list_new ())) return false;
|
||||
if (!(obj->token_info = r_list_new())) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void r_bin_mdmp_destroy_lists(struct r_bin_mdmp_obj *obj) {
|
||||
if (obj->threads) {
|
||||
r_list_free(obj->threads);
|
||||
obj->threads = NULL;
|
||||
}
|
||||
|
||||
if (obj->thread_info) {
|
||||
r_list_free(obj->thread_info);
|
||||
obj->thread_info = NULL;
|
||||
}
|
||||
|
||||
if (obj->threads_ex) {
|
||||
r_list_free(obj->threads_ex);
|
||||
obj->threads_ex = NULL;
|
||||
}
|
||||
|
||||
if (obj->modules) {
|
||||
r_list_free(obj->modules);
|
||||
obj->modules = NULL;
|
||||
}
|
||||
|
||||
if (obj->unloaded_modules) {
|
||||
r_list_free(obj->unloaded_modules);
|
||||
obj->unloaded_modules = NULL;
|
||||
}
|
||||
|
||||
if (obj->memory) {
|
||||
r_list_free(obj->memory);
|
||||
obj->memory = NULL;
|
||||
}
|
||||
|
||||
if (obj->memory64) {
|
||||
r_list_free(obj->memory64);
|
||||
obj->memory64 = NULL;
|
||||
}
|
||||
|
||||
if (obj->memory_info) {
|
||||
r_list_free(obj->memory_info);
|
||||
obj->memory_info = NULL;
|
||||
}
|
||||
|
||||
if (obj->exceptions) {
|
||||
r_list_free(obj->exceptions);
|
||||
obj->exceptions = NULL;
|
||||
}
|
||||
|
||||
if (obj->comments_a) {
|
||||
r_list_free(obj->comments_a);
|
||||
obj->comments_a = NULL;
|
||||
}
|
||||
|
||||
if (obj->comments_w) {
|
||||
r_list_free(obj->comments_w);
|
||||
obj->comments_w = NULL;
|
||||
}
|
||||
|
||||
if (obj->handle_streams) {
|
||||
r_list_free(obj->handle_streams);
|
||||
obj->handle_streams = NULL;
|
||||
}
|
||||
|
||||
if (obj->function_tables) {
|
||||
r_list_free(obj->function_tables);
|
||||
obj->function_tables = NULL;
|
||||
}
|
||||
|
||||
if (obj->misc_info) {
|
||||
r_list_free(obj->misc_info);
|
||||
obj->misc_info = NULL;
|
||||
}
|
||||
|
||||
if (obj->handle_operations) {
|
||||
r_list_free(obj->handle_operations);
|
||||
obj->handle_operations = NULL;
|
||||
}
|
||||
|
||||
if (obj->token_info) {
|
||||
r_list_free(obj->token_info);
|
||||
obj->token_info = NULL;
|
||||
}
|
||||
|
||||
if (obj->streams) {
|
||||
r_list_free(obj->streams);
|
||||
obj->streams = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
int r_bin_mdmp_init(struct r_bin_mdmp_obj *obj) {
|
||||
if (obj->b->length < sizeof(MINIDUMP_HEADER)) {
|
||||
eprintf("Error in r_bin_mdmp_init: length too short, not enough space for MINIDUMP_HEADER\n");
|
||||
return R_FALSE;
|
||||
}
|
||||
|
||||
obj->hdr = (PMINIDUMP_HEADER)obj->b->buf;
|
||||
|
||||
if (obj->hdr->NumberOfStreams <= 0) {
|
||||
eprintf("Error in r_bin_mdmp_init: no streams\n");
|
||||
return R_FALSE;
|
||||
}
|
||||
|
||||
if (obj->hdr->StreamDirectoryRva < sizeof(obj->hdr)) {
|
||||
eprintf("Error in r_bin_mdmp_init: invalid StreamDirectoryRva, size %d\n", obj->hdr->StreamDirectoryRva);
|
||||
return R_FALSE;
|
||||
}
|
||||
|
||||
if (obj->hdr->CheckSum != 0) {
|
||||
eprintf("Warning in r_bin_mdmp_init: CheckSum present, but not validated, because validation not implemented yet\n");
|
||||
}
|
||||
|
||||
sdb_num_set (obj->kv, "mdmp.hdr.TimeDateStamp", obj->hdr->TimeDateStamp, 0);
|
||||
sdb_num_set (obj->kv, "mdmp.hdr.Flags", obj->hdr->Flags, 0);
|
||||
|
||||
if (!r_bin_mdmp_init_streams(obj)) {
|
||||
return R_FALSE;
|
||||
}
|
||||
return R_TRUE;
|
||||
}
|
||||
|
||||
int r_bin_mdmp_init_streams(struct r_bin_mdmp_obj *obj) {
|
||||
size_t i, l;
|
||||
PMINIDUMP_DIRECTORY dir;
|
||||
|
||||
if (obj->streams)
|
||||
return R_TRUE;
|
||||
|
||||
if(!r_bin_mdmp_create_lists(obj))
|
||||
return R_FALSE;
|
||||
|
||||
for (i = 0; i < obj->hdr->NumberOfStreams; i++) {
|
||||
l = obj->hdr->StreamDirectoryRva + i * sizeof(MINIDUMP_DIRECTORY);
|
||||
if (l + sizeof(MINIDUMP_DIRECTORY) > obj->b->length) {
|
||||
eprintf("Warning in r_bin_mdmp_init_streams: length too short, not enough space for all streams\n");
|
||||
break;
|
||||
}
|
||||
dir = (PMINIDUMP_DIRECTORY)(obj->b->buf + l);
|
||||
eprintf("ss %d\n", dir->StreamType);
|
||||
r_bin_mdmp_init_directory(obj, dir);
|
||||
r_list_append(obj->streams, dir);
|
||||
};
|
||||
|
||||
if (!obj->system_info) {
|
||||
eprintf("Warning in r_bin_mdmp_init_streams: SystemInfoStream not found\n");
|
||||
return R_FALSE;
|
||||
}
|
||||
|
||||
return R_TRUE;
|
||||
}
|
||||
|
||||
int r_bin_mdmp_directory_check(struct r_bin_mdmp_obj *obj, PMINIDUMP_DIRECTORY dir, size_t size, char *name) {
|
||||
if (size > dir->Location.DataSize) {
|
||||
eprintf("Warning in r_bin_mdmp_directory_check: %s DataSize mismatch\n", name);
|
||||
return R_FALSE;
|
||||
};
|
||||
if (dir->Location.Rva + dir->Location.DataSize > obj->b->length) {
|
||||
eprintf("Warning in r_bin_mdmp_directory_check: length too short, not enough space for %s\n", name);
|
||||
return R_FALSE;
|
||||
}
|
||||
return R_TRUE;
|
||||
}
|
||||
|
||||
int r_bin_mdmp_init_directory(struct r_bin_mdmp_obj *obj, PMINIDUMP_DIRECTORY dir)
|
||||
{
|
||||
size_t i, j, k;
|
||||
void *p, *m;
|
||||
switch (dir->StreamType) {
|
||||
case UnusedStream:
|
||||
break;
|
||||
case ThreadListStream:
|
||||
if (r_bin_mdmp_directory_check(obj, dir, sizeof(MINIDUMP_THREAD), "ThreadListStream")) {
|
||||
r_list_append(obj->threads, obj->b->buf + dir->Location.Rva);
|
||||
};
|
||||
break;
|
||||
case ModuleListStream:
|
||||
if (r_bin_mdmp_directory_check(obj, dir, sizeof(MINIDUMP_MODULE_LIST), "ModuleListStream"))
|
||||
{
|
||||
p = obj->b->buf + dir->Location.Rva;
|
||||
j = ((PMINIDUMP_MODULE_LIST)p)->NumberOfModules;
|
||||
for (i = 0; i < j; i++) {
|
||||
p = (void *)(&((PMINIDUMP_MODULE_LIST)p)->Modules[i]);
|
||||
if (p - (void *)obj->b->buf + sizeof(MINIDUMP_MODULE) > obj->b->length) {
|
||||
eprintf("Warning in r_bin_mdmp_init_directory: length too short, not enough space for all MINIDUMP_MODULE\n");
|
||||
break;
|
||||
}
|
||||
r_list_append(obj->modules, p);
|
||||
};
|
||||
};
|
||||
break;
|
||||
case MemoryListStream:
|
||||
break;
|
||||
case ExceptionStream:
|
||||
break;
|
||||
case SystemInfoStream:
|
||||
if (obj->system_info)
|
||||
{
|
||||
eprintf("Warning in r_bin_mdmp_init_directory: another SystemInfoStream encountered, ignored\n");
|
||||
return R_FALSE;
|
||||
}
|
||||
if (r_bin_mdmp_directory_check(obj, dir, sizeof(MINIDUMP_SYSTEM_INFO), "SystemInfoStream"))
|
||||
{
|
||||
obj->system_info = (PMINIDUMP_SYSTEM_INFO)(obj->b->buf + dir->Location.Rva);
|
||||
};
|
||||
break;
|
||||
case ThreadExListStream:
|
||||
break;
|
||||
case Memory64ListStream:
|
||||
if (r_bin_mdmp_directory_check(obj, dir, sizeof(MINIDUMP_MEMORY64_LIST), "Memory64ListStream"))
|
||||
{
|
||||
p = obj->b->buf + dir->Location.Rva;
|
||||
j = ((PMINIDUMP_MEMORY64_LIST)p)->NumberOfMemoryRanges;
|
||||
for (i = 0; i < j; i++) {
|
||||
p = (void *)(&((PMINIDUMP_MEMORY64_LIST)p)->MemoryRanges[i]);
|
||||
if (p - (void *)obj->b->buf + sizeof(MINIDUMP_MEMORY_DESCRIPTOR64) > obj->b->length) {
|
||||
eprintf("Warning in r_bin_mdmp_init_directory: length too short, not enough space for all MINIDUMP_MEMORY_DESCRIPTOR64\n");
|
||||
break;
|
||||
}
|
||||
r_list_append(obj->memory64, p);
|
||||
};
|
||||
};
|
||||
break;
|
||||
case CommentStreamA:
|
||||
break;
|
||||
case CommentStreamW:
|
||||
break;
|
||||
case HandleDataStream:
|
||||
break;
|
||||
case FunctionTableStream:
|
||||
break;
|
||||
case UnloadedModuleListStream:
|
||||
break;
|
||||
case MiscInfoStream:
|
||||
if (dir->Location.Rva + dir->Location.DataSize > obj->b->length)
|
||||
{
|
||||
eprintf("Warning in r_bin_mdmp_init_directory: length too short, not enough space for MiscInfoStream\n");
|
||||
return R_FALSE;
|
||||
}
|
||||
p = obj->b->buf + dir->Location.Rva;
|
||||
i = ((PMINIDUMP_MISC_INFO)p)->SizeOfInfo;
|
||||
if (i != dir->Location.DataSize) {
|
||||
eprintf("Warning in r_bin_mdmp_init_directory: MINIDUMP_MISC_INFO DataSize size mismatch\n");
|
||||
return R_FALSE;
|
||||
}
|
||||
if(!(m = malloc(sizeof(MINIDUMP_MISC_INFO_N)))) {
|
||||
eprintf("Warning in r_bin_mdmp_init_directory: malloc failed\n");
|
||||
return R_FALSE;
|
||||
}
|
||||
memset(m, 0, sizeof(MINIDUMP_MISC_INFO_N));
|
||||
if (i <= sizeof(MINIDUMP_MISC_INFO_N)) {
|
||||
memcpy(m, p, i);
|
||||
} else {
|
||||
memcpy (m, p, sizeof(MINIDUMP_MISC_INFO_N));
|
||||
eprintf ("Warning in r_bin_mdmp_init_directory: PMINIDUMP_MISC_INFO structure bigger than expected, truncated from %d\n", (int)i);
|
||||
}
|
||||
r_list_append(obj->misc_info, m);
|
||||
break;
|
||||
case MemoryInfoListStream:
|
||||
if (r_bin_mdmp_directory_check(obj, dir, sizeof(MINIDUMP_MEMORY_INFO_LIST), "MemoryInfoListStream"))
|
||||
{
|
||||
p = obj->b->buf + dir->Location.Rva;
|
||||
if ((sizeof(MINIDUMP_MEMORY_INFO_LIST) != ((PMINIDUMP_MEMORY_INFO_LIST)p)->SizeOfHeader) || (sizeof(MINIDUMP_MEMORY_INFO) != ((PMINIDUMP_MEMORY_INFO_LIST)p)->SizeOfEntry))
|
||||
{
|
||||
eprintf("Warning in r_bin_mdmp_init_directory: MemoryInfoListStream size mismatch\n");
|
||||
return R_FALSE;
|
||||
};
|
||||
j = ((PMINIDUMP_MEMORY_INFO_LIST)p)->NumberOfEntries;
|
||||
for (i = 0; i < j; i++) {
|
||||
k = dir->Location.Rva + sizeof(MINIDUMP_MEMORY_INFO_LIST) + i * sizeof(MINIDUMP_MEMORY_INFO);
|
||||
if (k + sizeof(MINIDUMP_MEMORY_INFO) > obj->b->length) {
|
||||
eprintf("Warning in r_bin_mdmp_init_directory: length too short, not enough space for all MINIDUMP_MEMORY_INFO\n");
|
||||
break;
|
||||
}
|
||||
r_list_append(obj->memory_info, obj->b->buf + k);
|
||||
};
|
||||
};
|
||||
break;
|
||||
case ThreadInfoListStream:
|
||||
if (r_bin_mdmp_directory_check(obj, dir, sizeof(MINIDUMP_THREAD_INFO_LIST), "ThreadInfoListStream"))
|
||||
{
|
||||
p = obj->b->buf + dir->Location.Rva;
|
||||
if ((sizeof(MINIDUMP_THREAD_INFO_LIST) != ((PMINIDUMP_THREAD_INFO_LIST)p)->SizeOfHeader) || (sizeof(MINIDUMP_THREAD_INFO) != ((PMINIDUMP_THREAD_INFO_LIST)p)->SizeOfEntry))
|
||||
{
|
||||
eprintf("Warning in r_bin_mdmp_init_directory: ThreadInfoListStream size mismatch\n");
|
||||
return R_FALSE;
|
||||
};
|
||||
j = ((PMINIDUMP_THREAD_INFO_LIST)p)->NumberOfEntries;
|
||||
for (i = 0; i < j; i++) {
|
||||
k = dir->Location.Rva + sizeof(MINIDUMP_THREAD_INFO_LIST) + i * sizeof(MINIDUMP_THREAD_INFO);
|
||||
if (k + sizeof(MINIDUMP_THREAD_INFO) > obj->b->length) {
|
||||
eprintf("Warning in r_bin_mdmp_init_directory: length too short, not enough space for all MINIDUMP_THREAD_INFO\n");
|
||||
break;
|
||||
}
|
||||
r_list_append(obj->thread_info, obj->b->buf + k);
|
||||
};
|
||||
};
|
||||
break;
|
||||
case HandleOperationListStream:
|
||||
break;
|
||||
case TokenStream:
|
||||
break;
|
||||
case JavaScriptDataStream:
|
||||
break;
|
||||
default
|
||||
:
|
||||
eprintf("Warning in r_bin_mdmp_init_directory: uknown stream %d\n", dir->StreamType);
|
||||
}
|
||||
return R_TRUE;
|
||||
}
|
||||
|
||||
PMINIDUMP_STRING r_bin_mdmp_locate_string(struct r_bin_mdmp_obj *obj, RVA Rva) {
|
||||
if (Rva < obj->b->length)
|
||||
return NULL;
|
||||
return (PMINIDUMP_STRING)(obj->b->buf + Rva);
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
#ifndef MDMP_H
|
||||
#define MDMP_H
|
||||
|
||||
#include <r_bin.h>
|
||||
#include <r_types.h>
|
||||
|
||||
#if 0
|
||||
#include "windows/types.h"
|
||||
#include "windows/exception.h"
|
||||
#include "windows/resources.h"
|
||||
#include "windows/version_info.h"
|
||||
#include "windows/time.h"
|
||||
#include "windows/timezone.h"
|
||||
#include "windows/processor.h"
|
||||
#include "windows/products.h"
|
||||
#endif
|
||||
#include "windefs.h"
|
||||
|
||||
#include "mdmp_specs.h"
|
||||
|
||||
struct r_bin_mdmp_obj {
|
||||
PMINIDUMP_HEADER hdr;
|
||||
RList * /* PMINIDUMP_DIRECTORY */ streams;
|
||||
RList * /* PMINIDUMP_THREAD */ threads;
|
||||
RList * /* PMINIDUMP_THREAD_INFO */ thread_info;
|
||||
RList * /* PMINIDUMP_THREAD_EX_LIST */ threads_ex;
|
||||
RList * /* MINIDUMP_MODULE */ modules;
|
||||
RList * /* PMINIDUMP_UNLOADED_MODULE_LIST */ unloaded_modules;
|
||||
RList * /* PMINIDUMP_MEMORY_LIST */ memory;
|
||||
RList * /* PMINIDUMP_MEMORY64_LIST */ memory64;
|
||||
RList * /* PMINIDUMP_MEMORY_INFO_LIST */ memory_info;
|
||||
RList * /* PMINIDUMP_EXCEPTION_INFORMATION */ exceptions;
|
||||
PMINIDUMP_SYSTEM_INFO system_info;
|
||||
RList * /* Null-terminated ANSI String */ comments_a;
|
||||
RList * /* Null-terminated Wide String */ comments_w;
|
||||
RList * /* PMINIDUMP_HANDLE_DATA_STREAM */ handle_streams;
|
||||
RList * /* PMINIDUMP_FUNCTION_TABLE_STREAM */ function_tables;
|
||||
RList * /* PMINIDUMP_MISC_INFO_N */ misc_info;
|
||||
RList * /* PMINIDUMP_HANDLE_OPERATION_LIST */ handle_operations;
|
||||
RList * /* PMINIDUMP_TOKEN_INFO_LIST */ token_info;
|
||||
RList * /* */ javascipt_stream;
|
||||
|
||||
const char *file;
|
||||
struct r_buf_t *b;
|
||||
Sdb *kv;
|
||||
};
|
||||
|
||||
struct r_bin_mdmp_obj *r_bin_mdmp_new_buf(struct r_buf_t *buf);
|
||||
void r_bin_mdmp_free(struct r_bin_mdmp_obj *obj);
|
||||
bool r_bin_mdmp_create_lists(struct r_bin_mdmp_obj *obj);
|
||||
void r_bin_mdmp_destroy_lists(struct r_bin_mdmp_obj *obj);
|
||||
int r_bin_mdmp_init(struct r_bin_mdmp_obj *obj);
|
||||
int r_bin_mdmp_init_streams(struct r_bin_mdmp_obj *obj);
|
||||
int r_bin_mdmp_init_directory(struct r_bin_mdmp_obj *obj, PMINIDUMP_DIRECTORY dir);
|
||||
PMINIDUMP_STRING r_bin_mdmp_locate_string(struct r_bin_mdmp_obj *obj, RVA Rva);
|
||||
|
||||
#endif /* MDMP_H */
|
@ -1,687 +0,0 @@
|
||||
#ifndef MDMP_SPECS_H
|
||||
#define MDMP_SPECS_H
|
||||
|
||||
#define MDMP_PLATFORM_PURE(NAME, ARCH) NAME ## _ ## ARCH
|
||||
#define MDMP_PLATFORM(NAME, ARCH) MDMP_PLATFORM_PURE(NAME, ARCH)
|
||||
|
||||
#define MINIDUMP_SIGNATURE 0x504d444d /* PMDM */
|
||||
#define EXCEPTION_MAXIMUM_PARAMETERS 15
|
||||
#define WINDOWS_MAX_PATH 260
|
||||
|
||||
#define R2_HRESULT long
|
||||
|
||||
typedef ut32 RVA;
|
||||
typedef ut64 RVA64;
|
||||
|
||||
|
||||
#define WINDOWS_PROCESSOR_ARCHITECTURE_INTEL 0x0000
|
||||
#define WINDOWS_PROCESSOR_ARCHITECTURE_MIPS 0x0001
|
||||
#define WINDOWS_PROCESSOR_ARCHITECTURE_ALPHA 0x0002
|
||||
#define WINDOWS_PROCESSOR_ARCHITECTURE_PPC 0x0003
|
||||
#define WINDOWS_PROCESSOR_ARCHITECTURE_SHX 0x0004
|
||||
#define WINDOWS_PROCESSOR_ARCHITECTURE_ARM 0x0005
|
||||
#define WINDOWS_PROCESSOR_ARCHITECTURE_IA64 0x0006
|
||||
#define WINDOWS_PROCESSOR_ARCHITECTURE_ALPHA64 0x0007
|
||||
#define WINDOWS_PROCESSOR_ARCHITECTURE_MSIL 0x0008
|
||||
#define WINDOWS_PROCESSOR_ARCHITECTURE_AMD64 0x0009
|
||||
#define WINDOWS_PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 0x000A
|
||||
#define WINDOWS_PROCESSOR_ARCHITECTURE_NEUTRAL 0x000B
|
||||
#define WINDOWS_PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
|
||||
|
||||
#define WINDOWS_VER_NT_WORKSTATION 0x0000001
|
||||
#define WINDOWS_VER_NT_DOMAIN_CONTROLLER 0x0000002
|
||||
#define WINDOWS_VER_NT_SERVER 0x0000003
|
||||
|
||||
// XXX already in pe.h
|
||||
typedef struct {
|
||||
ut32 dwSignature;
|
||||
ut32 dwStrucVersion;
|
||||
ut32 dwFileVersionMS;
|
||||
ut32 dwFileVersionLS;
|
||||
ut32 dwProductVersionMS;
|
||||
ut32 dwProductVersionLS;
|
||||
ut32 dwFileFlagsMask;
|
||||
ut32 dwFileFlags;
|
||||
ut32 dwFileOS;
|
||||
ut32 dwFileType;
|
||||
ut32 dwFileSubtype;
|
||||
ut32 dwFileDateMS;
|
||||
ut32 dwFileDateLS;
|
||||
} WINDOWS_VS_FIXEDFILEINFO;
|
||||
|
||||
typedef struct _MINIDUMP_HEADER {
|
||||
ut32 Signature;
|
||||
ut32 Version;
|
||||
ut32 NumberOfStreams;
|
||||
RVA StreamDirectoryRva;
|
||||
ut32 CheckSum;
|
||||
ut32 TimeDateStamp;
|
||||
ut64 Flags;
|
||||
} MINIDUMP_HEADER, *PMINIDUMP_HEADER;
|
||||
|
||||
typedef struct _MINIDUMP_LOCATION_DESCRIPTOR {
|
||||
ut32 DataSize;
|
||||
RVA Rva;
|
||||
} MINIDUMP_LOCATION_DESCRIPTOR;
|
||||
|
||||
typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 {
|
||||
ut64 DataSize;
|
||||
RVA64 Rva;
|
||||
} MINIDUMP_LOCATION_DESCRIPTOR64;
|
||||
|
||||
typedef struct _MINIDUMP_MEMORY_DESCRIPTOR {
|
||||
ut64 StartOfMemoryRange;
|
||||
MINIDUMP_LOCATION_DESCRIPTOR Memory;
|
||||
} MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;
|
||||
|
||||
typedef struct _MINIDUMP_MEMORY_DESCRIPTOR64 {
|
||||
ut64 StartOfMemoryRange;
|
||||
ut64 DataSize;
|
||||
} MINIDUMP_MEMORY_DESCRIPTOR64, *PMINIDUMP_MEMORY_DESCRIPTOR64;
|
||||
|
||||
typedef enum _MINIDUMP_STREAM_TYPE {
|
||||
UnusedStream = 0,
|
||||
ReservedStream0 = 1,
|
||||
ReservedStream1 = 2,
|
||||
ThreadListStream = 3,
|
||||
ModuleListStream = 4,
|
||||
MemoryListStream = 5,
|
||||
ExceptionStream = 6,
|
||||
SystemInfoStream = 7,
|
||||
ThreadExListStream = 8,
|
||||
Memory64ListStream = 9,
|
||||
CommentStreamA = 10,
|
||||
CommentStreamW = 11,
|
||||
HandleDataStream = 12,
|
||||
FunctionTableStream = 13,
|
||||
UnloadedModuleListStream = 14,
|
||||
MiscInfoStream = 15,
|
||||
MemoryInfoListStream = 16,
|
||||
ThreadInfoListStream = 17,
|
||||
HandleOperationListStream = 18,
|
||||
TokenStream = 19,
|
||||
JavaScriptDataStream = 20,
|
||||
ceStreamNull = 0x8000,
|
||||
ceStreamSystemInfo = 0x8001,
|
||||
ceStreamException = 0x8002,
|
||||
ceStreamModuleList = 0x8003,
|
||||
ceStreamProcessList = 0x8004,
|
||||
ceStreamThreadList = 0x8005,
|
||||
ceStreamThreadContextList = 0x8006,
|
||||
ceStreamThreadCallStackList = 0x8007,
|
||||
ceStreamMemoryVirtualList = 0x8008,
|
||||
ceStreamMemoryPhysicalList = 0x8009,
|
||||
ceStreamBucketParameters = 0x800A,
|
||||
ceStreamProcessModuleMap = 0x800B,
|
||||
ceStreamDiagnosisList = 0x800C,
|
||||
LastReservedStream = 0xffff
|
||||
} MINIDUMP_STREAM_TYPE;
|
||||
|
||||
typedef struct _MINIDUMP_DIRECTORY {
|
||||
ut32 StreamType;
|
||||
MINIDUMP_LOCATION_DESCRIPTOR Location;
|
||||
} MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;
|
||||
|
||||
typedef struct _MINIDUMP_STRING {
|
||||
ut32 Length;
|
||||
ut16 Buffer[0];
|
||||
} MINIDUMP_STRING, *PMINIDUMP_STRING;
|
||||
|
||||
typedef union _CPU_INFORMATION {
|
||||
struct {
|
||||
ut32 VendorId [ 3 ];
|
||||
ut32 VersionInformation;
|
||||
ut32 FeatureInformation;
|
||||
ut32 AMDExtendedCpuFeatures;
|
||||
} X86CpuInfo;
|
||||
struct {
|
||||
ut64 ProcessorFeatures [ 2 ];
|
||||
} OtherCpuInfo;
|
||||
} CPU_INFORMATION, *PCPU_INFORMATION;
|
||||
|
||||
typedef struct _MINIDUMP_SYSTEM_INFO {
|
||||
ut16 ProcessorArchitecture;
|
||||
ut16 ProcessorLevel;
|
||||
ut16 ProcessorRevision;
|
||||
|
||||
struct {
|
||||
ut8 NumberOfProcessors;
|
||||
ut8 ProductType;
|
||||
};
|
||||
|
||||
ut32 MajorVersion;
|
||||
ut32 MinorVersion;
|
||||
ut32 BuildNumber;
|
||||
|
||||
RVA CSDVersionRva;
|
||||
|
||||
union {
|
||||
ut32 Reserved1;
|
||||
struct {
|
||||
ut16 SuiteMask;
|
||||
ut16 Reserved2;
|
||||
};
|
||||
};
|
||||
|
||||
CPU_INFORMATION Cpu;
|
||||
} MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;
|
||||
|
||||
typedef struct _MINIDUMP_THREAD {
|
||||
ut32 ThreadId;
|
||||
ut32 SuspendCount;
|
||||
ut32 PriorityClass;
|
||||
ut32 Priority;
|
||||
ut64 Teb;
|
||||
MINIDUMP_MEMORY_DESCRIPTOR Stack;
|
||||
MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
|
||||
} MINIDUMP_THREAD, *PMINIDUMP_THREAD;
|
||||
|
||||
typedef struct _MINIDUMP_THREAD_LIST {
|
||||
ut32 NumberOfThreads;
|
||||
MINIDUMP_THREAD Threads [0];
|
||||
} MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;
|
||||
|
||||
|
||||
typedef struct _MINIDUMP_THREAD_EX {
|
||||
ut32 ThreadId;
|
||||
ut32 SuspendCount;
|
||||
ut32 PriorityClass;
|
||||
ut32 Priority;
|
||||
ut64 Teb;
|
||||
MINIDUMP_MEMORY_DESCRIPTOR Stack;
|
||||
MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
|
||||
MINIDUMP_MEMORY_DESCRIPTOR BackingStore;
|
||||
} MINIDUMP_THREAD_EX, *PMINIDUMP_THREAD_EX;
|
||||
|
||||
typedef struct _MINIDUMP_THREAD_EX_LIST {
|
||||
ut32 NumberOfThreads;
|
||||
MINIDUMP_THREAD_EX Threads [0];
|
||||
} MINIDUMP_THREAD_EX_LIST, *PMINIDUMP_THREAD_EX_LIST;
|
||||
|
||||
|
||||
typedef struct _MINIDUMP_EXCEPTION {
|
||||
ut32 ExceptionCode;
|
||||
ut32 ExceptionFlags;
|
||||
ut64 ExceptionRecord;
|
||||
ut64 ExceptionAddress;
|
||||
ut32 NumberParameters;
|
||||
ut32 __unusedAlignment;
|
||||
ut64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
|
||||
} MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;
|
||||
|
||||
|
||||
typedef struct MINIDUMP_EXCEPTION_STREAM {
|
||||
ut32 ThreadId;
|
||||
ut32 __alignment;
|
||||
MINIDUMP_EXCEPTION ExceptionRecord;
|
||||
MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
|
||||
} MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;
|
||||
|
||||
|
||||
typedef struct _MINIDUMP_MODULE {
|
||||
ut64 BaseOfImage;
|
||||
ut32 SizeOfImage;
|
||||
ut32 CheckSum;
|
||||
ut32 TimeDateStamp;
|
||||
RVA ModuleNameRva;
|
||||
WINDOWS_VS_FIXEDFILEINFO VersionInfo;
|
||||
MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
|
||||
MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
|
||||
ut64 Reserved0;
|
||||
ut64 Reserved1;
|
||||
} MINIDUMP_MODULE, *PMINIDUMP_MODULE;
|
||||
|
||||
typedef struct _MINIDUMP_MODULE_LIST {
|
||||
ut32 NumberOfModules;
|
||||
MINIDUMP_MODULE Modules [ 0 ];
|
||||
} MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST;
|
||||
|
||||
|
||||
typedef struct _MINIDUMP_MEMORY_LIST {
|
||||
ut32 NumberOfMemoryRanges;
|
||||
MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges [0];
|
||||
} MINIDUMP_MEMORY_LIST, *PMINIDUMP_MEMORY_LIST;
|
||||
|
||||
typedef struct _MINIDUMP_MEMORY64_LIST {
|
||||
ut64 NumberOfMemoryRanges;
|
||||
RVA64 BaseRva;
|
||||
MINIDUMP_MEMORY_DESCRIPTOR64 MemoryRanges [0];
|
||||
} MINIDUMP_MEMORY64_LIST, *PMINIDUMP_MEMORY64_LIST;
|
||||
|
||||
typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
|
||||
ut32 ThreadId;
|
||||
PEXCEPTION_POINTERS_I386 ExceptionPointers;
|
||||
ut32/*bool*/ ClientPointers;
|
||||
} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
|
||||
|
||||
typedef struct _MINIDUMP_EXCEPTION_INFORMATION64 {
|
||||
ut32 ThreadId;
|
||||
ut64 ExceptionRecord;
|
||||
ut64 ContextRecord;
|
||||
ut32/*bool*/ ClientPointers;
|
||||
} MINIDUMP_EXCEPTION_INFORMATION64, *PMINIDUMP_EXCEPTION_INFORMATION64;
|
||||
|
||||
typedef enum _MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE {
|
||||
MiniHandleObjectInformationNone,
|
||||
MiniThreadInformation1,
|
||||
MiniMutantInformation1,
|
||||
MiniMutantInformation2,
|
||||
MiniProcessInformation1,
|
||||
MiniProcessInformation2,
|
||||
MiniEventInformation1,
|
||||
MiniSectionInformation1,
|
||||
MiniHandleObjectInformationTypeMax
|
||||
} MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE;
|
||||
|
||||
typedef struct _MINIDUMP_HANDLE_OBJECT_INFORMATION {
|
||||
RVA NextInfoRva;
|
||||
ut32 InfoType;
|
||||
ut32 SizeOfInfo;
|
||||
} MINIDUMP_HANDLE_OBJECT_INFORMATION;
|
||||
|
||||
typedef struct _MINIDUMP_HANDLE_DESCRIPTOR {
|
||||
ut64 Handle;
|
||||
RVA TypeNameRva;
|
||||
RVA ObjectNameRva;
|
||||
ut32 Attributes;
|
||||
ut32 GrantedAccess;
|
||||
ut32 HandleCount;
|
||||
ut32 PointerCount;
|
||||
} MINIDUMP_HANDLE_DESCRIPTOR, *PMINIDUMP_HANDLE_DESCRIPTOR;
|
||||
|
||||
typedef struct _MINIDUMP_HANDLE_DESCRIPTOR_2 {
|
||||
ut64 Handle;
|
||||
RVA TypeNameRva;
|
||||
RVA ObjectNameRva;
|
||||
ut32 Attributes;
|
||||
ut32 GrantedAccess;
|
||||
ut32 HandleCount;
|
||||
ut32 PointerCount;
|
||||
RVA ObjectInfoRva;
|
||||
ut32 Reserved0;
|
||||
} MINIDUMP_HANDLE_DESCRIPTOR_2, *PMINIDUMP_HANDLE_DESCRIPTOR_2;
|
||||
|
||||
|
||||
typedef MINIDUMP_HANDLE_DESCRIPTOR_2 MINIDUMP_HANDLE_DESCRIPTOR_N;
|
||||
typedef MINIDUMP_HANDLE_DESCRIPTOR_N *PMINIDUMP_HANDLE_DESCRIPTOR_N;
|
||||
|
||||
typedef struct _MINIDUMP_HANDLE_DATA_STREAM {
|
||||
ut32 SizeOfHeader;
|
||||
ut32 SizeOfDescriptor;
|
||||
ut32 NumberOfDescriptors;
|
||||
ut32 Reserved;
|
||||
} MINIDUMP_HANDLE_DATA_STREAM, *PMINIDUMP_HANDLE_DATA_STREAM;
|
||||
|
||||
typedef struct _MINIDUMP_HANDLE_OPERATION_LIST {
|
||||
ut32 SizeOfHeader;
|
||||
ut32 SizeOfEntry;
|
||||
ut32 NumberOfEntries;
|
||||
ut32 Reserved;
|
||||
} MINIDUMP_HANDLE_OPERATION_LIST, *PMINIDUMP_HANDLE_OPERATION_LIST;
|
||||
|
||||
|
||||
typedef struct _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR {
|
||||
ut64 MinimumAddress;
|
||||
ut64 MaximumAddress;
|
||||
ut64 BaseAddress;
|
||||
ut32 EntryCount;
|
||||
ut32 SizeOfAlignPad;
|
||||
} MINIDUMP_FUNCTION_TABLE_DESCRIPTOR, *PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
|
||||
|
||||
typedef struct _MINIDUMP_FUNCTION_TABLE_STREAM {
|
||||
ut32 SizeOfHeader;
|
||||
ut32 SizeOfDescriptor;
|
||||
ut32 SizeOfNativeDescriptor;
|
||||
ut32 SizeOfFunctionEntry;
|
||||
ut32 NumberOfDescriptors;
|
||||
ut32 SizeOfAlignPad;
|
||||
} MINIDUMP_FUNCTION_TABLE_STREAM, *PMINIDUMP_FUNCTION_TABLE_STREAM;
|
||||
|
||||
|
||||
typedef struct _MINIDUMP_UNLOADED_MODULE {
|
||||
ut64 BaseOfImage;
|
||||
ut32 SizeOfImage;
|
||||
ut32 CheckSum;
|
||||
ut32 TimeDateStamp;
|
||||
RVA ModuleNameRva;
|
||||
} MINIDUMP_UNLOADED_MODULE, *PMINIDUMP_UNLOADED_MODULE;
|
||||
|
||||
|
||||
typedef struct _MINIDUMP_UNLOADED_MODULE_LIST {
|
||||
ut32 SizeOfHeader;
|
||||
ut32 SizeOfEntry;
|
||||
ut32 NumberOfEntries;
|
||||
} MINIDUMP_UNLOADED_MODULE_LIST, *PMINIDUMP_UNLOADED_MODULE_LIST;
|
||||
|
||||
#define MINIDUMP_MISC1_PROCESS_ID 0x00000001
|
||||
#define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002
|
||||
#define MINIDUMP_MISC1_PROCESSOR_POWER_INFO 0x00000004
|
||||
#define MINIDUMP_MISC3_PROCESS_INTEGRITY 0x00000010
|
||||
#define MINIDUMP_MISC3_PROCESS_EXECUTE_FLAGS 0x00000020
|
||||
#define MINIDUMP_MISC3_TIMEZONE 0x00000040
|
||||
#define MINIDUMP_MISC3_PROTECTED_PROCESS 0x00000080
|
||||
#define MINIDUMP_MISC4_BUILDSTRING 0x00000100
|
||||
|
||||
typedef struct _MINIDUMP_MISC_INFO {
|
||||
ut32 SizeOfInfo;
|
||||
ut32 Flags1;
|
||||
ut32 ProcessId;
|
||||
ut32 ProcessCreateTime;
|
||||
ut32 ProcessUserTime;
|
||||
ut32 ProcessKernelTime;
|
||||
} MINIDUMP_MISC_INFO, *PMINIDUMP_MISC_INFO;
|
||||
|
||||
typedef struct _MINIDUMP_MISC_INFO_2 {
|
||||
ut32 SizeOfInfo;
|
||||
ut32 Flags1;
|
||||
ut32 ProcessId;
|
||||
ut32 ProcessCreateTime;
|
||||
ut32 ProcessUserTime;
|
||||
ut32 ProcessKernelTime;
|
||||
ut32 ProcessorMaxMhz;
|
||||
ut32 ProcessorCurrentMhz;
|
||||
ut32 ProcessorMhzLimit;
|
||||
ut32 ProcessorMaxIdleState;
|
||||
ut32 ProcessorCurrentIdleState;
|
||||
} MINIDUMP_MISC_INFO_2, *PMINIDUMP_MISC_INFO_2;
|
||||
|
||||
typedef struct _MINIDUMP_MISC_INFO_3 {
|
||||
ut32 SizeOfInfo;
|
||||
ut32 Flags1;
|
||||
ut32 ProcessId;
|
||||
ut32 ProcessCreateTime;
|
||||
ut32 ProcessUserTime;
|
||||
ut32 ProcessKernelTime;
|
||||
ut32 ProcessorMaxMhz;
|
||||
ut32 ProcessorCurrentMhz;
|
||||
ut32 ProcessorMhzLimit;
|
||||
ut32 ProcessorMaxIdleState;
|
||||
ut32 ProcessorCurrentIdleState;
|
||||
ut32 ProcessIntegrityLevel;
|
||||
ut32 ProcessExecuteFlags;
|
||||
ut32 ProtectedProcess;
|
||||
ut32 TimeZoneId;
|
||||
WINDOWS_TIME_ZONE_INFORMATION TimeZone;
|
||||
} MINIDUMP_MISC_INFO_3, *PMINIDUMP_MISC_INFO_3;
|
||||
|
||||
typedef struct _MINIDUMP_MISC_INFO_4 {
|
||||
ut32 SizeOfInfo;
|
||||
ut32 Flags1;
|
||||
ut32 ProcessId;
|
||||
ut32 ProcessCreateTime;
|
||||
ut32 ProcessUserTime;
|
||||
ut32 ProcessKernelTime;
|
||||
ut32 ProcessorMaxMhz;
|
||||
ut32 ProcessorCurrentMhz;
|
||||
ut32 ProcessorMhzLimit;
|
||||
ut32 ProcessorMaxIdleState;
|
||||
ut32 ProcessorCurrentIdleState;
|
||||
ut32 ProcessIntegrityLevel;
|
||||
ut32 ProcessExecuteFlags;
|
||||
ut32 ProtectedProcess;
|
||||
ut32 TimeZoneId;
|
||||
WINDOWS_TIME_ZONE_INFORMATION TimeZone;
|
||||
ut16 BuildString[WINDOWS_MAX_PATH];
|
||||
ut16 DbgBldStr[40];
|
||||
} MINIDUMP_MISC_INFO_4, *PMINIDUMP_MISC_INFO_4;
|
||||
|
||||
|
||||
typedef MINIDUMP_MISC_INFO_4 MINIDUMP_MISC_INFO_N;
|
||||
typedef MINIDUMP_MISC_INFO_N *PMINIDUMP_MISC_INFO_N;
|
||||
|
||||
typedef struct _MINIDUMP_MEMORY_INFO {
|
||||
ut64 BaseAddress;
|
||||
ut64 AllocationBase;
|
||||
ut32 AllocationProtect;
|
||||
ut32 __alignment1;
|
||||
ut64 RegionSize;
|
||||
ut32 State;
|
||||
ut32 Protect;
|
||||
ut32 Type;
|
||||
ut32 __alignment2;
|
||||
} MINIDUMP_MEMORY_INFO, *PMINIDUMP_MEMORY_INFO;
|
||||
|
||||
typedef struct _MINIDUMP_MEMORY_INFO_LIST {
|
||||
ut32 SizeOfHeader;
|
||||
ut32 SizeOfEntry;
|
||||
ut64 NumberOfEntries;
|
||||
} MINIDUMP_MEMORY_INFO_LIST, *PMINIDUMP_MEMORY_INFO_LIST;
|
||||
|
||||
|
||||
#define MINIDUMP_THREAD_INFO_ERROR_THREAD 0x00000001
|
||||
#define MINIDUMP_THREAD_INFO_WRITING_THREAD 0x00000002
|
||||
#define MINIDUMP_THREAD_INFO_EXITED_THREAD 0x00000004
|
||||
#define MINIDUMP_THREAD_INFO_INVALID_INFO 0x00000008
|
||||
#define MINIDUMP_THREAD_INFO_INVALID_CONTEXT 0x00000010
|
||||
#define MINIDUMP_THREAD_INFO_INVALID_TEB 0x00000020
|
||||
|
||||
typedef struct _MINIDUMP_THREAD_INFO {
|
||||
ut32 ThreadId;
|
||||
ut32 DumpFlags;
|
||||
ut32 DumpError;
|
||||
ut32 ExitStatus;
|
||||
ut64 CreateTime;
|
||||
ut64 ExitTime;
|
||||
ut64 KernelTime;
|
||||
ut64 UserTime;
|
||||
ut64 StartAddress;
|
||||
ut64 Affinity;
|
||||
} MINIDUMP_THREAD_INFO, *PMINIDUMP_THREAD_INFO;
|
||||
|
||||
typedef struct _MINIDUMP_THREAD_INFO_LIST {
|
||||
ut32 SizeOfHeader;
|
||||
ut32 SizeOfEntry;
|
||||
ut32 NumberOfEntries;
|
||||
} MINIDUMP_THREAD_INFO_LIST, *PMINIDUMP_THREAD_INFO_LIST;
|
||||
|
||||
|
||||
typedef struct _MINIDUMP_TOKEN_INFO_HEADER {
|
||||
ut32 TokenSize;
|
||||
ut32 TokenId;
|
||||
ut64 TokenHandle;
|
||||
} MINIDUMP_TOKEN_INFO_HEADER, *PMINIDUMP_TOKEN_INFO_HEADER;
|
||||
|
||||
typedef struct _MINIDUMP_TOKEN_INFO_LIST {
|
||||
ut32 TokenListSize;
|
||||
ut32 TokenListEntries;
|
||||
ut32 ListHeaderSize;
|
||||
ut32 ElementHeaderSize;
|
||||
} MINIDUMP_TOKEN_INFO_LIST, *PMINIDUMP_TOKEN_INFO_LIST;
|
||||
|
||||
typedef struct _MINIDUMP_USER_RECORD {
|
||||
ut32 Type;
|
||||
MINIDUMP_LOCATION_DESCRIPTOR Memory;
|
||||
} MINIDUMP_USER_RECORD, *PMINIDUMP_USER_RECORD;
|
||||
|
||||
|
||||
typedef struct _MINIDUMP_USER_STREAM {
|
||||
ut32 Type;
|
||||
ut32 BufferSize;
|
||||
void*Buffer;
|
||||
} MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM;
|
||||
|
||||
|
||||
typedef struct _MINIDUMP_USER_STREAM_INFORMATION {
|
||||
ut32 UserStreamCount;
|
||||
PMINIDUMP_USER_STREAM UserStreamArray;
|
||||
} MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION;
|
||||
|
||||
typedef enum _MINIDUMP_CALLBACK_TYPE {
|
||||
ModuleCallback,
|
||||
ThreadCallback,
|
||||
ThreadExCallback,
|
||||
IncludeThreadCallback,
|
||||
IncludeModuleCallback,
|
||||
MemoryCallback,
|
||||
CancelCallback,
|
||||
WriteKernelMinidumpCallback,
|
||||
KernelMinidumpStatusCallback,
|
||||
RemoveMemoryCallback,
|
||||
IncludeVmRegionCallback,
|
||||
IoStartCallback,
|
||||
IoWriteAllCallback,
|
||||
IoFinishCallback,
|
||||
ReadMemoryFailureCallback,
|
||||
SecondaryFlagsCallback,
|
||||
IsProcessSnapshotCallback,
|
||||
VmStartCallback,
|
||||
VmQueryCallback,
|
||||
VmPreReadCallback,
|
||||
VmPostReadCallback,
|
||||
} MINIDUMP_CALLBACK_TYPE;
|
||||
|
||||
typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK {
|
||||
ut32 ThreadId;
|
||||
} MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;
|
||||
|
||||
|
||||
typedef enum _THREAD_WRITE_FLAGS {
|
||||
ThreadWriteThread = 0x0001,
|
||||
ThreadWriteStack = 0x0002,
|
||||
ThreadWriteContext = 0x0004,
|
||||
ThreadWriteBackingStore = 0x0008,
|
||||
ThreadWriteInstructionWindow = 0x0010,
|
||||
ThreadWriteThreadData = 0x0020,
|
||||
ThreadWriteThreadInfo = 0x0040
|
||||
} THREAD_WRITE_FLAGS;
|
||||
|
||||
typedef struct _MINIDUMP_MODULE_CALLBACK {
|
||||
ut16 *FullPath;
|
||||
ut64 BaseOfImage;
|
||||
ut32 SizeOfImage;
|
||||
ut32 CheckSum;
|
||||
ut32 TimeDateStamp;
|
||||
WINDOWS_VS_FIXEDFILEINFO VersionInfo;
|
||||
void *CvRecord;
|
||||
ut32 SizeOfCvRecord;
|
||||
void *MiscRecord;
|
||||
ut32 SizeOfMiscRecord;
|
||||
} MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;
|
||||
|
||||
|
||||
typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK {
|
||||
ut64 BaseOfImage;
|
||||
} MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;
|
||||
|
||||
|
||||
typedef enum _MODULE_WRITE_FLAGS {
|
||||
ModuleWriteModule = 0x0001,
|
||||
ModuleWriteDataSeg = 0x0002,
|
||||
ModuleWriteMiscRecord = 0x0004,
|
||||
ModuleWriteCvRecord = 0x0008,
|
||||
ModuleReferencedByMemory = 0x0010,
|
||||
ModuleWriteTlsData = 0x0020,
|
||||
ModuleWriteCodeSegs = 0x0040
|
||||
} MODULE_WRITE_FLAGS;
|
||||
|
||||
typedef struct _MINIDUMP_IO_CALLBACK {
|
||||
void* Handle;
|
||||
ut64 Offset;
|
||||
void *Buffer;
|
||||
ut32 BufferBytes;
|
||||
} MINIDUMP_IO_CALLBACK, *PMINIDUMP_IO_CALLBACK;
|
||||
|
||||
|
||||
typedef struct _MINIDUMP_READ_MEMORY_FAILURE_CALLBACK {
|
||||
ut64 Offset;
|
||||
ut32 Bytes;
|
||||
R2_HRESULT FailureStatus;
|
||||
} MINIDUMP_READ_MEMORY_FAILURE_CALLBACK,
|
||||
*PMINIDUMP_READ_MEMORY_FAILURE_CALLBACK;
|
||||
|
||||
typedef struct _MINIDUMP_VM_QUERY_CALLBACK {
|
||||
ut64 Offset;
|
||||
} MINIDUMP_VM_QUERY_CALLBACK, *PMINIDUMP_VM_QUERY_CALLBACK;
|
||||
|
||||
typedef struct _MINIDUMP_VM_PRE_READ_CALLBACK {
|
||||
ut64 Offset;
|
||||
void *Buffer;
|
||||
ut32 Size;
|
||||
} MINIDUMP_VM_PRE_READ_CALLBACK, *PMINIDUMP_VM_PRE_READ_CALLBACK;
|
||||
|
||||
typedef struct _MINIDUMP_VM_POST_READ_CALLBACK {
|
||||
ut64 Offset;
|
||||
void *Buffer;
|
||||
ut32 Size;
|
||||
ut32 Completed;
|
||||
R2_HRESULT Status;
|
||||
} MINIDUMP_VM_POST_READ_CALLBACK, *PMINIDUMP_VM_POST_READ_CALLBACK;
|
||||
|
||||
typedef struct _MINIDUMP_CALLBACK_OUTPUT {
|
||||
union {
|
||||
ut32 ModuleWriteFlags;
|
||||
ut32 ThreadWriteFlags;
|
||||
ut32 SecondaryFlags;
|
||||
struct {
|
||||
ut64 MemoryBase;
|
||||
ut32 MemorySize;
|
||||
};
|
||||
struct {
|
||||
ut32/*bool*/ CheckCancel;
|
||||
ut32/*bool*/ Cancel;
|
||||
};
|
||||
void *Handle;
|
||||
struct {
|
||||
MINIDUMP_MEMORY_INFO VmRegion;
|
||||
ut32/*bool*/ Continue;
|
||||
};
|
||||
struct {
|
||||
R2_HRESULT VmQueryStatus;
|
||||
MINIDUMP_MEMORY_INFO VmQueryResult;
|
||||
};
|
||||
struct {
|
||||
R2_HRESULT VmReadStatus;
|
||||
ut32 VmReadBytesCompleted;
|
||||
};
|
||||
R2_HRESULT Status;
|
||||
};
|
||||
} MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
|
||||
|
||||
typedef enum _MINIDUMP_TYPE {
|
||||
MiniDumpNormal = 0x00000000,
|
||||
MiniDumpWithDataSegs = 0x00000001,
|
||||
MiniDumpWithFullMemory = 0x00000002,
|
||||
MiniDumpWithHandleData = 0x00000004,
|
||||
MiniDumpFilterMemory = 0x00000008,
|
||||
MiniDumpScanMemory = 0x00000010,
|
||||
MiniDumpWithUnloadedModules = 0x00000020,
|
||||
MiniDumpWithIndirectlyReferencedMemory = 0x00000040,
|
||||
MiniDumpFilterModulePaths = 0x00000080,
|
||||
MiniDumpWithProcessThreadData = 0x00000100,
|
||||
MiniDumpWithPrivateReadWriteMemory = 0x00000200,
|
||||
MiniDumpWithoutOptionalData = 0x00000400,
|
||||
MiniDumpWithFullMemoryInfo = 0x00000800,
|
||||
MiniDumpWithThreadInfo = 0x00001000,
|
||||
MiniDumpWithCodeSegs = 0x00002000,
|
||||
MiniDumpWithoutAuxiliaryState = 0x00004000,
|
||||
MiniDumpWithFullAuxiliaryState = 0x00008000,
|
||||
MiniDumpWithPrivateWriteCopyMemory = 0x00010000,
|
||||
MiniDumpIgnoreInaccessibleMemory = 0x00020000,
|
||||
MiniDumpWithTokenInformation = 0x00040000,
|
||||
MiniDumpWithModuleHeaders = 0x00080000,
|
||||
MiniDumpFilterTriage = 0x00100000,
|
||||
MiniDumpValidTypeFlags = 0x001fffff
|
||||
} MINIDUMP_TYPE;
|
||||
|
||||
typedef enum _MINIDUMP_SECONDARY_FLAGS {
|
||||
MiniSecondaryWithoutPowerInfo = 0x00000001,
|
||||
MiniSecondaryValidFlags = 0x00000001
|
||||
} MINIDUMP_SECONDARY_FLAGS;
|
||||
|
||||
#define ARCH I386
|
||||
#include "platform.h"
|
||||
#undef ARCH
|
||||
|
||||
#define ARCH ARM
|
||||
#include "platform.h"
|
||||
#undef ARCH
|
||||
|
||||
#define ARCH IA64
|
||||
#include "platform.h"
|
||||
#undef ARCH
|
||||
|
||||
#define ARCH AMD64
|
||||
#include "platform.h"
|
||||
#undef ARCH
|
||||
|
||||
#endif /* MDMP_SPECS_H */
|
@ -1,49 +0,0 @@
|
||||
#ifndef MDMP_PLATFORM
|
||||
#error MDMP_PLATFORM not defined
|
||||
#endif
|
||||
#ifndef ARCH
|
||||
#error ARCH not defined
|
||||
#endif
|
||||
|
||||
typedef struct MDMP_PLATFORM(_MINIDUMP_THREAD_CALLBACK, ARCH) {
|
||||
ut32 ThreadId;
|
||||
void* ThreadHandle;
|
||||
MDMP_PLATFORM(CONTEXT_TYPE, ARCH) Context;
|
||||
ut32 SizeOfContext;
|
||||
ut64 StackBase;
|
||||
ut64 StackEnd;
|
||||
}
|
||||
MDMP_PLATFORM(MINIDUMP_THREAD_CALLBACK, ARCH), MDMP_PLATFORM(*PMINIDUMP_THREAD_CALLBACK, ARCH);
|
||||
|
||||
typedef struct MDMP_PLATFORM(_MINIDUMP_THREAD_EX_CALLBACK, ARCH) {
|
||||
ut32 ThreadId;
|
||||
void* ThreadHandle;
|
||||
MDMP_PLATFORM(CONTEXT_TYPE, ARCH) Context;
|
||||
ut32 SizeOfContext;
|
||||
ut64 StackBase;
|
||||
ut64 StackEnd;
|
||||
ut64 BackingStoreBase;
|
||||
ut64 BackingStoreEnd;
|
||||
}
|
||||
MDMP_PLATFORM(MINIDUMP_THREAD_EX_CALLBACK, ARCH), MDMP_PLATFORM(*PMINIDUMP_THREAD_EX_CALLBACK, ARCH);
|
||||
|
||||
typedef struct MDMP_PLATFORM(_MINIDUMP_CALLBACK_INPUT, ARCH) {
|
||||
ut32 ProcessId;
|
||||
void* ProcessHandle;
|
||||
ut32 CallbackType;
|
||||
union {
|
||||
R2_HRESULT Status;
|
||||
MDMP_PLATFORM(MINIDUMP_THREAD_CALLBACK, ARCH) Thread;
|
||||
MDMP_PLATFORM(MINIDUMP_THREAD_EX_CALLBACK, ARCH) ThreadEx;
|
||||
MINIDUMP_MODULE_CALLBACK Module;
|
||||
MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
|
||||
MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
|
||||
MINIDUMP_IO_CALLBACK Io;
|
||||
MINIDUMP_READ_MEMORY_FAILURE_CALLBACK ReadMemoryFailure;
|
||||
ut32 SecondaryFlags;
|
||||
MINIDUMP_VM_QUERY_CALLBACK VmQuery;
|
||||
MINIDUMP_VM_PRE_READ_CALLBACK VmPreRead;
|
||||
MINIDUMP_VM_POST_READ_CALLBACK VmPostRead;
|
||||
};
|
||||
}
|
||||
MDMP_PLATFORM(MINIDUMP_CALLBACK_INPUT, ARCH), MDMP_PLATFORM(*PMINIDUMP_CALLBACK_INPUT, ARCH);
|
@ -1,485 +0,0 @@
|
||||
#ifndef WINDEFS_H
|
||||
#define WINDEFS_H
|
||||
|
||||
#if __WINDOWS__
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#define EXCEPTION_MAXIMUM_PARAMETERS 15
|
||||
#define MAXIMUM_SUPPORTED_EXTENSION 512
|
||||
|
||||
#define SIZE_OF_80387_REGISTERS 80
|
||||
typedef struct {
|
||||
ut32 ControlWord;
|
||||
ut32 StatusWord;
|
||||
ut32 TagWord;
|
||||
ut32 ErrorOffset;
|
||||
ut32 ErrorSelector;
|
||||
ut32 DataOffset;
|
||||
ut32 DataSelector;
|
||||
ut8 RegisterArea[SIZE_OF_80387_REGISTERS];
|
||||
ut32 Spare0;
|
||||
} WINDOWS_FLOATING_SAVE_AREA;
|
||||
|
||||
typedef struct {
|
||||
ut16 wYear;
|
||||
ut16 wMonth;
|
||||
ut16 wDayOfWeek;
|
||||
ut16 wDay;
|
||||
ut16 wHour;
|
||||
ut16 wMinute;
|
||||
ut16 wSecond;
|
||||
ut16 wMilliseconds;
|
||||
} WINDOWS_SYSTEMTIME;
|
||||
|
||||
typedef struct {
|
||||
long Bias;
|
||||
ut16 StandardName[32];
|
||||
WINDOWS_SYSTEMTIME StandardDate;
|
||||
long StandardBias;
|
||||
ut16 DaylightName[32];
|
||||
WINDOWS_SYSTEMTIME DaylightDate;
|
||||
long DaylightBias;
|
||||
} WINDOWS_TIME_ZONE_INFORMATION;
|
||||
|
||||
/* 128bit types */
|
||||
typedef struct {
|
||||
ut64 Low;
|
||||
st64 High;
|
||||
} WINDOWS_M128A, *WINDOWS_PM128A;
|
||||
|
||||
typedef struct _WINDOWS_NEON128 {
|
||||
ut64 Low;
|
||||
st64 High;
|
||||
} WINDOWS_NEON128, *WINDOWS_PNEON128;
|
||||
|
||||
typedef struct _WINDOWS_FLOAT128 {
|
||||
ut64 Low;
|
||||
st64 High;
|
||||
} WINDOWS_FLOAT128, *WINDOWS_PFLOAT128;
|
||||
|
||||
typedef struct _CONTEXT_TYPE_I386 {
|
||||
ut32 ContextFlags;
|
||||
|
||||
ut32 Dr0;
|
||||
ut32 Dr1;
|
||||
ut32 Dr2;
|
||||
ut32 Dr3;
|
||||
ut32 Dr6;
|
||||
ut32 Dr7;
|
||||
|
||||
WINDOWS_FLOATING_SAVE_AREA FloatSave;
|
||||
|
||||
ut32 SegGs;
|
||||
ut32 SegFs;
|
||||
ut32 SegEs;
|
||||
ut32 SegDs;
|
||||
|
||||
ut32 Edi;
|
||||
ut32 Esi;
|
||||
ut32 Ebx;
|
||||
ut32 Edx;
|
||||
ut32 Ecx;
|
||||
ut32 Eax;
|
||||
|
||||
ut32 Ebp;
|
||||
ut32 Eip;
|
||||
ut32 SegCs;
|
||||
ut32 EFlags;
|
||||
ut32 Esp;
|
||||
ut32 SegSs;
|
||||
|
||||
ut8 ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
|
||||
} CONTEXT_TYPE_I386, *PCONTEXT_TYPE_I386;
|
||||
|
||||
typedef struct _CONTEXT_TYPE_IA64 {
|
||||
ut32 ContextFlags;
|
||||
ut32 Fill1[3];
|
||||
|
||||
ut64 DbI0;
|
||||
ut64 DbI1;
|
||||
ut64 DbI2;
|
||||
ut64 DbI3;
|
||||
ut64 DbI4;
|
||||
ut64 DbI5;
|
||||
ut64 DbI6;
|
||||
ut64 DbI7;
|
||||
|
||||
ut64 DbD0;
|
||||
ut64 DbD1;
|
||||
ut64 DbD2;
|
||||
ut64 DbD3;
|
||||
ut64 DbD4;
|
||||
ut64 DbD5;
|
||||
ut64 DbD6;
|
||||
ut64 DbD7;
|
||||
|
||||
WINDOWS_FLOAT128 FltS0;
|
||||
WINDOWS_FLOAT128 FltS1;
|
||||
WINDOWS_FLOAT128 FltS2;
|
||||
WINDOWS_FLOAT128 FltS3;
|
||||
WINDOWS_FLOAT128 FltT0;
|
||||
WINDOWS_FLOAT128 FltT1;
|
||||
WINDOWS_FLOAT128 FltT2;
|
||||
WINDOWS_FLOAT128 FltT3;
|
||||
WINDOWS_FLOAT128 FltT4;
|
||||
WINDOWS_FLOAT128 FltT5;
|
||||
WINDOWS_FLOAT128 FltT6;
|
||||
WINDOWS_FLOAT128 FltT7;
|
||||
WINDOWS_FLOAT128 FltT8;
|
||||
WINDOWS_FLOAT128 FltT9;
|
||||
|
||||
WINDOWS_FLOAT128 FltS4;
|
||||
WINDOWS_FLOAT128 FltS5;
|
||||
WINDOWS_FLOAT128 FltS6;
|
||||
WINDOWS_FLOAT128 FltS7;
|
||||
WINDOWS_FLOAT128 FltS8;
|
||||
WINDOWS_FLOAT128 FltS9;
|
||||
WINDOWS_FLOAT128 FltS10;
|
||||
WINDOWS_FLOAT128 FltS11;
|
||||
WINDOWS_FLOAT128 FltS12;
|
||||
WINDOWS_FLOAT128 FltS13;
|
||||
WINDOWS_FLOAT128 FltS14;
|
||||
WINDOWS_FLOAT128 FltS15;
|
||||
WINDOWS_FLOAT128 FltS16;
|
||||
WINDOWS_FLOAT128 FltS17;
|
||||
WINDOWS_FLOAT128 FltS18;
|
||||
WINDOWS_FLOAT128 FltS19;
|
||||
|
||||
WINDOWS_FLOAT128 FltF32;
|
||||
WINDOWS_FLOAT128 FltF33;
|
||||
WINDOWS_FLOAT128 FltF34;
|
||||
WINDOWS_FLOAT128 FltF35;
|
||||
WINDOWS_FLOAT128 FltF36;
|
||||
WINDOWS_FLOAT128 FltF37;
|
||||
WINDOWS_FLOAT128 FltF38;
|
||||
WINDOWS_FLOAT128 FltF39;
|
||||
|
||||
WINDOWS_FLOAT128 FltF40;
|
||||
WINDOWS_FLOAT128 FltF41;
|
||||
WINDOWS_FLOAT128 FltF42;
|
||||
WINDOWS_FLOAT128 FltF43;
|
||||
WINDOWS_FLOAT128 FltF44;
|
||||
WINDOWS_FLOAT128 FltF45;
|
||||
WINDOWS_FLOAT128 FltF46;
|
||||
WINDOWS_FLOAT128 FltF47;
|
||||
WINDOWS_FLOAT128 FltF48;
|
||||
WINDOWS_FLOAT128 FltF49;
|
||||
|
||||
WINDOWS_FLOAT128 FltF50;
|
||||
WINDOWS_FLOAT128 FltF51;
|
||||
WINDOWS_FLOAT128 FltF52;
|
||||
WINDOWS_FLOAT128 FltF53;
|
||||
WINDOWS_FLOAT128 FltF54;
|
||||
WINDOWS_FLOAT128 FltF55;
|
||||
WINDOWS_FLOAT128 FltF56;
|
||||
WINDOWS_FLOAT128 FltF57;
|
||||
WINDOWS_FLOAT128 FltF58;
|
||||
WINDOWS_FLOAT128 FltF59;
|
||||
|
||||
WINDOWS_FLOAT128 FltF60;
|
||||
WINDOWS_FLOAT128 FltF61;
|
||||
WINDOWS_FLOAT128 FltF62;
|
||||
WINDOWS_FLOAT128 FltF63;
|
||||
WINDOWS_FLOAT128 FltF64;
|
||||
WINDOWS_FLOAT128 FltF65;
|
||||
WINDOWS_FLOAT128 FltF66;
|
||||
WINDOWS_FLOAT128 FltF67;
|
||||
WINDOWS_FLOAT128 FltF68;
|
||||
WINDOWS_FLOAT128 FltF69;
|
||||
|
||||
WINDOWS_FLOAT128 FltF70;
|
||||
WINDOWS_FLOAT128 FltF71;
|
||||
WINDOWS_FLOAT128 FltF72;
|
||||
WINDOWS_FLOAT128 FltF73;
|
||||
WINDOWS_FLOAT128 FltF74;
|
||||
WINDOWS_FLOAT128 FltF75;
|
||||
WINDOWS_FLOAT128 FltF76;
|
||||
WINDOWS_FLOAT128 FltF77;
|
||||
WINDOWS_FLOAT128 FltF78;
|
||||
WINDOWS_FLOAT128 FltF79;
|
||||
|
||||
WINDOWS_FLOAT128 FltF80;
|
||||
WINDOWS_FLOAT128 FltF81;
|
||||
WINDOWS_FLOAT128 FltF82;
|
||||
WINDOWS_FLOAT128 FltF83;
|
||||
WINDOWS_FLOAT128 FltF84;
|
||||
WINDOWS_FLOAT128 FltF85;
|
||||
WINDOWS_FLOAT128 FltF86;
|
||||
WINDOWS_FLOAT128 FltF87;
|
||||
WINDOWS_FLOAT128 FltF88;
|
||||
WINDOWS_FLOAT128 FltF89;
|
||||
|
||||
WINDOWS_FLOAT128 FltF90;
|
||||
WINDOWS_FLOAT128 FltF91;
|
||||
WINDOWS_FLOAT128 FltF92;
|
||||
WINDOWS_FLOAT128 FltF93;
|
||||
WINDOWS_FLOAT128 FltF94;
|
||||
WINDOWS_FLOAT128 FltF95;
|
||||
WINDOWS_FLOAT128 FltF96;
|
||||
WINDOWS_FLOAT128 FltF97;
|
||||
WINDOWS_FLOAT128 FltF98;
|
||||
WINDOWS_FLOAT128 FltF99;
|
||||
|
||||
WINDOWS_FLOAT128 FltF100;
|
||||
WINDOWS_FLOAT128 FltF101;
|
||||
WINDOWS_FLOAT128 FltF102;
|
||||
WINDOWS_FLOAT128 FltF103;
|
||||
WINDOWS_FLOAT128 FltF104;
|
||||
WINDOWS_FLOAT128 FltF105;
|
||||
WINDOWS_FLOAT128 FltF106;
|
||||
WINDOWS_FLOAT128 FltF107;
|
||||
WINDOWS_FLOAT128 FltF108;
|
||||
WINDOWS_FLOAT128 FltF109;
|
||||
|
||||
WINDOWS_FLOAT128 FltF110;
|
||||
WINDOWS_FLOAT128 FltF111;
|
||||
WINDOWS_FLOAT128 FltF112;
|
||||
WINDOWS_FLOAT128 FltF113;
|
||||
WINDOWS_FLOAT128 FltF114;
|
||||
WINDOWS_FLOAT128 FltF115;
|
||||
WINDOWS_FLOAT128 FltF116;
|
||||
WINDOWS_FLOAT128 FltF117;
|
||||
WINDOWS_FLOAT128 FltF118;
|
||||
WINDOWS_FLOAT128 FltF119;
|
||||
|
||||
WINDOWS_FLOAT128 FltF120;
|
||||
WINDOWS_FLOAT128 FltF121;
|
||||
WINDOWS_FLOAT128 FltF122;
|
||||
WINDOWS_FLOAT128 FltF123;
|
||||
WINDOWS_FLOAT128 FltF124;
|
||||
WINDOWS_FLOAT128 FltF125;
|
||||
WINDOWS_FLOAT128 FltF126;
|
||||
WINDOWS_FLOAT128 FltF127;
|
||||
|
||||
ut64 StFPSR;
|
||||
|
||||
ut64 IntGp;
|
||||
ut64 IntT0;
|
||||
ut64 IntT1;
|
||||
ut64 IntS0;
|
||||
ut64 IntS1;
|
||||
ut64 IntS2;
|
||||
ut64 IntS3;
|
||||
ut64 IntV0;
|
||||
ut64 IntT2;
|
||||
ut64 IntT3;
|
||||
ut64 IntT4;
|
||||
ut64 IntSp;
|
||||
ut64 IntTeb;
|
||||
ut64 IntT5;
|
||||
ut64 IntT6;
|
||||
ut64 IntT7;
|
||||
ut64 IntT8;
|
||||
ut64 IntT9;
|
||||
ut64 IntT10;
|
||||
ut64 IntT11;
|
||||
ut64 IntT12;
|
||||
ut64 IntT13;
|
||||
ut64 IntT14;
|
||||
ut64 IntT15;
|
||||
ut64 IntT16;
|
||||
ut64 IntT17;
|
||||
ut64 IntT18;
|
||||
ut64 IntT19;
|
||||
ut64 IntT20;
|
||||
ut64 IntT21;
|
||||
ut64 IntT22;
|
||||
|
||||
ut64 IntNats;
|
||||
|
||||
ut64 Preds;
|
||||
|
||||
ut64 BrRp;
|
||||
ut64 BrS0;
|
||||
ut64 BrS1;
|
||||
ut64 BrS2;
|
||||
ut64 BrS3;
|
||||
ut64 BrS4;
|
||||
ut64 BrT0;
|
||||
ut64 BrT1;
|
||||
|
||||
ut64 ApUNAT;
|
||||
ut64 ApLC;
|
||||
ut64 ApEC;
|
||||
ut64 ApCCV;
|
||||
ut64 ApDCR;
|
||||
|
||||
ut64 RsPFS;
|
||||
ut64 RsBSP;
|
||||
ut64 RsBSPSTORE;
|
||||
ut64 RsRSC;
|
||||
ut64 RsRNAT;
|
||||
|
||||
ut64 StIPSR;
|
||||
ut64 StIIP;
|
||||
ut64 StIFS;
|
||||
|
||||
ut64 StFCR;
|
||||
ut64 Eflag;
|
||||
ut64 SegCSD;
|
||||
ut64 SegSSD;
|
||||
ut64 Cflag;
|
||||
ut64 StFSR;
|
||||
ut64 StFIR;
|
||||
ut64 StFDR;
|
||||
|
||||
ut64 UNUSEDPACK;
|
||||
|
||||
} CONTEXT_TYPE_IA64, *PCONTEXT_TYPE_IA64;
|
||||
|
||||
#define ARM_MAX_BREAKPOINTS 8
|
||||
#define ARM_MAX_WATCHPOINTS 1
|
||||
|
||||
typedef struct _CONTEXT_TYPE_ARM {
|
||||
ut32 ContextFlags;
|
||||
|
||||
ut32 R0;
|
||||
ut32 R1;
|
||||
ut32 R2;
|
||||
ut32 R3;
|
||||
ut32 R4;
|
||||
ut32 R5;
|
||||
ut32 R6;
|
||||
ut32 R7;
|
||||
ut32 R8;
|
||||
ut32 R9;
|
||||
ut32 R10;
|
||||
ut32 R11;
|
||||
ut32 R12;
|
||||
|
||||
ut32 Sp;
|
||||
ut32 Lr;
|
||||
ut32 Pc;
|
||||
ut32 Cpsr;
|
||||
|
||||
ut32 Fpscr;
|
||||
ut32 Padding;
|
||||
union {
|
||||
WINDOWS_NEON128 Q[16];
|
||||
ut64 D[32];
|
||||
ut32 S[32];
|
||||
};
|
||||
|
||||
ut32 Bvr[ARM_MAX_BREAKPOINTS];
|
||||
ut32 Bcr[ARM_MAX_BREAKPOINTS];
|
||||
ut32 Wvr[ARM_MAX_WATCHPOINTS];
|
||||
ut32 Wcr[ARM_MAX_WATCHPOINTS];
|
||||
ut32 Padding2[2];
|
||||
} CONTEXT_TYPE_ARM, *PCONTEXT_TYPE_ARM;
|
||||
|
||||
typedef struct _WINDOWS_XSAVE_FORMAT32 {
|
||||
ut16 ControlWord;
|
||||
ut16 StatusWord;
|
||||
ut8 TagWord;
|
||||
ut8 Reserved1;
|
||||
ut16 ErrorOpcode;
|
||||
ut32 ErrorOffset;
|
||||
ut16 ErrorSelector;
|
||||
ut16 Reserved2;
|
||||
ut32 DataOffset;
|
||||
ut16 DataSelector;
|
||||
ut16 Reserved3;
|
||||
ut32 MxCsr;
|
||||
ut32 MxCsr_Mask;
|
||||
WINDOWS_M128A FloatRegisters[8];
|
||||
WINDOWS_M128A XmmRegisters[8];
|
||||
ut8 Reserved4[224];
|
||||
} WINDOWS_XSAVE_FORMAT32, *WINDOWS_PXSAVE_FORMAT32;
|
||||
|
||||
typedef WINDOWS_XSAVE_FORMAT32 WINDOWS_XMM_SAVE_AREA32, *WINDOWS_PXMM_SAVE_AREA32;
|
||||
|
||||
typedef struct _CONTEXT_TYPE_AMD64 {
|
||||
ut64 P1Home;
|
||||
ut64 P2Home;
|
||||
ut64 P3Home;
|
||||
ut64 P4Home;
|
||||
ut64 P5Home;
|
||||
ut64 P6Home;
|
||||
|
||||
ut32 ContextFlags;
|
||||
ut32 MxCsr;
|
||||
|
||||
ut16 SegCs;
|
||||
ut16 SegDs;
|
||||
ut16 SegEs;
|
||||
ut16 SegFs;
|
||||
ut16 SegGs;
|
||||
ut16 SegSs;
|
||||
ut32 EFlags;
|
||||
|
||||
ut64 Dr0;
|
||||
ut64 Dr1;
|
||||
ut64 Dr2;
|
||||
ut64 Dr3;
|
||||
ut64 Dr6;
|
||||
ut64 Dr7;
|
||||
|
||||
ut64 Rax;
|
||||
ut64 Rcx;
|
||||
ut64 Rdx;
|
||||
ut64 Rbx;
|
||||
ut64 Rsp;
|
||||
ut64 Rbp;
|
||||
ut64 Rsi;
|
||||
ut64 Rdi;
|
||||
ut64 R8;
|
||||
ut64 R9;
|
||||
ut64 R10;
|
||||
ut64 R11;
|
||||
ut64 R12;
|
||||
ut64 R13;
|
||||
ut64 R14;
|
||||
ut64 R15;
|
||||
|
||||
ut64 Rip;
|
||||
|
||||
union {
|
||||
WINDOWS_XMM_SAVE_AREA32 FltSave;
|
||||
struct {
|
||||
WINDOWS_M128A Header[2];
|
||||
WINDOWS_M128A Legacy[8];
|
||||
WINDOWS_M128A Xmm0;
|
||||
WINDOWS_M128A Xmm1;
|
||||
WINDOWS_M128A Xmm2;
|
||||
WINDOWS_M128A Xmm3;
|
||||
WINDOWS_M128A Xmm4;
|
||||
WINDOWS_M128A Xmm5;
|
||||
WINDOWS_M128A Xmm6;
|
||||
WINDOWS_M128A Xmm7;
|
||||
WINDOWS_M128A Xmm8;
|
||||
WINDOWS_M128A Xmm9;
|
||||
WINDOWS_M128A Xmm10;
|
||||
WINDOWS_M128A Xmm11;
|
||||
WINDOWS_M128A Xmm12;
|
||||
WINDOWS_M128A Xmm13;
|
||||
WINDOWS_M128A Xmm14;
|
||||
WINDOWS_M128A Xmm15;
|
||||
};
|
||||
};
|
||||
|
||||
WINDOWS_M128A VectorRegister[26];
|
||||
ut64 VectorControl;
|
||||
|
||||
ut64 DebugControl;
|
||||
ut64 LastBranchToRip;
|
||||
ut64 LastBranchFromRip;
|
||||
ut64 LastExceptionToRip;
|
||||
ut64 LastExceptionFromRip;
|
||||
} CONTEXT_TYPE_AMD64, *PCONTEXT_TYPE_AMD64;
|
||||
|
||||
typedef struct _WINDOWS_EXCEPTION_RECORD32 {
|
||||
ut32 ExceptionCode;
|
||||
ut32 ExceptionFlags;
|
||||
ut32 ExceptionRecord;
|
||||
ut32 ExceptionAddress;
|
||||
ut32 NumberParameters;
|
||||
ut32 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
|
||||
} WINDOWS_EXCEPTION_RECORD32, *WINDOWS_PEXCEPTION_RECORD32;
|
||||
|
||||
typedef struct _EXCEPTION_POINTERS_I386 {
|
||||
WINDOWS_PEXCEPTION_RECORD32 ExceptionRecord;
|
||||
PCONTEXT_TYPE_I386 ContextRecord;
|
||||
} EXCEPTION_POINTERS_I386, *PEXCEPTION_POINTERS_I386;
|
||||
|
||||
#endif
|
@ -12,7 +12,7 @@ ALL_TARGETS=
|
||||
FORMATS=any.mk elf.mk elf64.mk pe.mk pe64.mk te.mk mach0.mk
|
||||
FORMATS+=bios.mk mach064.mk fatmach0.mk dyldcache.mk java.mk
|
||||
FORMATS+=dex.mk fs.mk ningb.mk coff.mk ningba.mk xbe.mk zimg.mk
|
||||
FORMATS+=omf.mk cgc.mk dol.mk nes.mk mbn.mk mdmp.mk
|
||||
FORMATS+=omf.mk cgc.mk dol.mk nes.mk mbn.mk
|
||||
include $(FORMATS)
|
||||
|
||||
all: ${ALL_TARGETS}
|
||||
|
@ -1,168 +0,0 @@
|
||||
#include <r_types.h>
|
||||
#include <r_util.h>
|
||||
#include <r_lib.h>
|
||||
#include <r_bin.h>
|
||||
|
||||
#include "mdmp/mdmp.h"
|
||||
|
||||
static Sdb *get_sdb(RBinObject *o) {
|
||||
struct r_bin_mdmp_obj *bin;
|
||||
if (!o) return NULL;
|
||||
bin = (struct r_bin_mdmp_obj *) o->bin_obj;
|
||||
if (bin->kv) return bin->kv;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void *load_bytes(RBinFile *arch, const ut8 *buf, ut64 sz, ut64 loadaddr, Sdb *sdb) {
|
||||
RBuffer *tbuf;
|
||||
void *res;
|
||||
if (!buf || sz == 0 || sz == UT64_MAX)
|
||||
return NULL;
|
||||
tbuf = r_buf_new_with_bytes (buf, sz);
|
||||
res = r_bin_mdmp_new_buf (tbuf);
|
||||
r_buf_free (tbuf);
|
||||
return res;
|
||||
}
|
||||
|
||||
static int load(RBinFile *arch) {
|
||||
const ut8 *bytes;
|
||||
ut64 sz;
|
||||
if (!arch || !arch->o || !arch->buf)
|
||||
return R_FALSE;
|
||||
bytes = r_buf_buffer (arch->buf);
|
||||
sz = r_buf_size (arch->buf);
|
||||
arch->o->bin_obj = load_bytes (arch, bytes, sz, arch->o->loadaddr, arch->sdb);
|
||||
return arch->o->bin_obj != NULL;
|
||||
}
|
||||
|
||||
static int destroy(RBinFile *arch) {
|
||||
r_bin_mdmp_free((struct r_bin_mdmp_obj *)arch->o->bin_obj);
|
||||
return true;
|
||||
}
|
||||
|
||||
static int check_bytes(const ut8 *buf, ut64 size) {
|
||||
return (size > sizeof(MINIDUMP_HEADER) && ((PMINIDUMP_HEADER)buf)->Signature == MINIDUMP_SIGNATURE);
|
||||
}
|
||||
|
||||
static int check(RBinFile *arch) {
|
||||
if (!arch || !arch->o || !arch->buf)
|
||||
return false;
|
||||
return check_bytes(r_buf_buffer(arch->buf), r_buf_size(arch->buf));
|
||||
}
|
||||
|
||||
static RList *entries(RBinFile *arch) {
|
||||
RList *ret;
|
||||
if (!(ret = r_list_newf(free)))
|
||||
return NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static RList *sections(RBinFile *arch) {
|
||||
RList *ret = NULL;
|
||||
RListIter *it;
|
||||
RBinSection *ptr = NULL;
|
||||
struct r_bin_mdmp_obj *obj = arch->o->bin_obj;
|
||||
PMINIDUMP_MODULE module;
|
||||
PMINIDUMP_STRING str;
|
||||
|
||||
if (!(ret = r_list_newf(free)))
|
||||
return NULL;
|
||||
|
||||
r_list_foreach (obj->modules, it, module) {
|
||||
if (!(ptr = R_NEW0(RBinSection))) {
|
||||
eprintf("Warning in mdmp sections: R_NEW0 failed\n");
|
||||
break;
|
||||
}
|
||||
if ((str = r_bin_mdmp_locate_string(obj, module->ModuleNameRva))) {
|
||||
//strncpy(ptr->name, (char *)str->Buffer, R_MIN(str->Length, R_BIN_SIZEOF_STRINGS));
|
||||
}
|
||||
ptr->size = module->SizeOfImage;
|
||||
ptr->vsize = module->SizeOfImage;
|
||||
ptr->paddr = (unsigned char *)module - obj->b->buf;
|
||||
//ptr->paddr = 0;//module->BaseOfImage;
|
||||
ptr->vaddr = module->BaseOfImage;
|
||||
ptr->srwx = 0;
|
||||
r_list_append(ret, ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static RBinInfo *info(RBinFile *arch) {
|
||||
RBinInfo *ret = R_NEW0(RBinInfo);
|
||||
struct r_bin_mdmp_obj *obj = (struct r_bin_mdmp_obj *)arch->o->bin_obj;
|
||||
|
||||
ret->file = strdup (arch->file);
|
||||
ret->rpath = strdup ("NONE");
|
||||
|
||||
ret->big_endian = false;
|
||||
switch (obj->system_info->ProcessorArchitecture) {
|
||||
case WINDOWS_PROCESSOR_ARCHITECTURE_INTEL:
|
||||
ret->machine = strdup("i386");
|
||||
ret->arch = strdup("x86");
|
||||
ret->bits = 32;
|
||||
break;
|
||||
case WINDOWS_PROCESSOR_ARCHITECTURE_ARM:
|
||||
ret->machine = strdup ("ARM");
|
||||
ret->arch = strdup ("h8300");
|
||||
ret->bits = 16;
|
||||
ret->big_endian = false;
|
||||
break;
|
||||
case WINDOWS_PROCESSOR_ARCHITECTURE_IA64:
|
||||
ret->machine = strdup ("IA64");
|
||||
ret->arch = strdup ("IA64");
|
||||
ret->bits = 64;
|
||||
break;
|
||||
case WINDOWS_PROCESSOR_ARCHITECTURE_AMD64:
|
||||
ret->machine = strdup ("AMD 64");
|
||||
ret->arch = strdup ("x86");
|
||||
ret->bits = 64;
|
||||
break;
|
||||
default:
|
||||
strncpy(ret->machine, "unknown", R_BIN_SIZEOF_STRINGS);
|
||||
}
|
||||
switch (obj->system_info->ProductType) {
|
||||
case WINDOWS_VER_NT_WORKSTATION:
|
||||
ret->os = r_str_newf ("Windows NT Workstation %d.%d.%d",
|
||||
obj->system_info->MajorVersion,
|
||||
obj->system_info->MinorVersion,
|
||||
obj->system_info->BuildNumber);
|
||||
break;
|
||||
case WINDOWS_VER_NT_DOMAIN_CONTROLLER:
|
||||
ret->os = r_str_newf ("Windows NT Server Domain Controller %d.%d.%d",
|
||||
obj->system_info->MajorVersion,
|
||||
obj->system_info->MinorVersion,
|
||||
obj->system_info->BuildNumber);
|
||||
break;
|
||||
case WINDOWS_VER_NT_SERVER:
|
||||
ret->os = r_str_newf ("Windows NT Server %d.%d.%d",
|
||||
obj->system_info->MajorVersion,
|
||||
obj->system_info->MinorVersion,
|
||||
obj->system_info->BuildNumber);
|
||||
break;
|
||||
default:
|
||||
ret->os = strdup ("unknown");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
RBinPlugin r_bin_plugin_mdmp = {
|
||||
.name = "mdmp",
|
||||
.desc = "Minidump format r_bin plugin",
|
||||
.license = "UNLICENSE",
|
||||
.get_sdb = &get_sdb,
|
||||
.load = &load,
|
||||
.load_bytes = load_bytes,
|
||||
.destroy = &destroy,
|
||||
.check = &check,
|
||||
.check_bytes = &check_bytes,
|
||||
.entries = &entries,
|
||||
.sections = §ions,
|
||||
.info = &info,
|
||||
};
|
||||
|
||||
#ifndef CORELIB
|
||||
struct r_lib_struct_t radare_plugin = {
|
||||
.type = R_LIB_TYPE_BIN,
|
||||
.data = &r_bin_plugin_mdmp
|
||||
};
|
||||
#endif
|
@ -1,14 +0,0 @@
|
||||
OBJ_MDMP=bin_mdmp.o
|
||||
OBJ_MDMP+=../format/mdmp/mdmp.o
|
||||
|
||||
STATIC_OBJ+=${OBJ_MDMP}
|
||||
TARGET_MDMP=bin_mdmp.${EXT_SO}
|
||||
|
||||
LINK+=-L../../db -lr_db $(SHLR)/sdb/src/libsdb.a
|
||||
ifeq (${WITHPIC},1)
|
||||
ALL_TARGETS+=${TARGET_MDMP}
|
||||
|
||||
${TARGET_MDMP}: ${OBJ_MDMP}
|
||||
${CC} $(call libname,bin_mdmp) $(LINK) \
|
||||
${CFLAGS} $(LDFLAGS) ${OBJ_MDMP}
|
||||
endif
|
@ -186,7 +186,6 @@ extern RAsmPlugin r_asm_plugin_ppc_cs;
|
||||
extern RAsmPlugin r_asm_plugin_sparc_gnu;
|
||||
extern RAsmPlugin r_asm_plugin_avr;
|
||||
extern RAsmPlugin r_asm_plugin_dalvik;
|
||||
extern RAsmPlugin r_asm_plugin_msil;
|
||||
extern RAsmPlugin r_asm_plugin_sh;
|
||||
extern RAsmPlugin r_asm_plugin_z80;
|
||||
extern RAsmPlugin r_asm_plugin_i8080;
|
||||
|
@ -546,7 +546,6 @@ extern RBinPlugin r_bin_plugin_ningb;
|
||||
extern RBinPlugin r_bin_plugin_ningba;
|
||||
extern RBinPlugin r_bin_plugin_ninds;
|
||||
extern RBinPlugin r_bin_plugin_xbe;
|
||||
extern RBinPlugin r_bin_plugin_mdmp;
|
||||
extern RBinXtrPlugin r_bin_xtr_plugin_fatmach0;
|
||||
extern RBinXtrPlugin r_bin_xtr_plugin_dyldcache;
|
||||
extern RBinPlugin r_bin_plugin_zimg;
|
||||
|
@ -64,7 +64,6 @@ asm.m68k_cs
|
||||
asm.malbolge
|
||||
asm.mips_cs
|
||||
asm.mips_gnu
|
||||
asm.msil
|
||||
asm.msp430
|
||||
asm.nios2
|
||||
asm.ppc_cs
|
||||
@ -108,7 +107,6 @@ bin.java
|
||||
bin.mach0
|
||||
bin.mach064
|
||||
bin.mbn
|
||||
bin.mdmp
|
||||
bin.mz
|
||||
bin.nes
|
||||
bin.ninds
|
||||
|
@ -79,7 +79,6 @@ io.zip
|
||||
asm.z80
|
||||
asm.i8080
|
||||
asm.8051
|
||||
asm.msil
|
||||
asm.tms320
|
||||
asm.sh
|
||||
asm.csr
|
||||
|
@ -42,7 +42,6 @@ asm.java
|
||||
asm.m68k
|
||||
asm.malbolge
|
||||
asm.mips_cs
|
||||
asm.msil
|
||||
asm.msp430
|
||||
asm.ppc_cs
|
||||
asm.rar
|
||||
|
Loading…
x
Reference in New Issue
Block a user