Move msil and mdmp into radare2-extras, add r2pm pkgs

This commit is contained in:
pancake 2015-11-11 10:43:19 +01:00
parent 8c4430874d
commit ad74a6ec6b
20 changed files with 40 additions and 3362 deletions

19
binr/r2pm/d/mdmp Normal file
View 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
View 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

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);
}

View File

@ -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 */

View File

@ -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 */

View File

@ -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);

View File

@ -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

View File

@ -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}

View File

@ -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 = &sections,
.info = &info,
};
#ifndef CORELIB
struct r_lib_struct_t radare_plugin = {
.type = R_LIB_TYPE_BIN,
.data = &r_bin_plugin_mdmp
};
#endif

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -79,7 +79,6 @@ io.zip
asm.z80
asm.i8080
asm.8051
asm.msil
asm.tms320
asm.sh
asm.csr

View File

@ -42,7 +42,6 @@ asm.java
asm.m68k
asm.malbolge
asm.mips_cs
asm.msil
asm.msp430
asm.ppc_cs
asm.rar