static void dump_msft_func(int n) { int size, args_cnt, i, extra_attr, fkccic; print_begin_block_id("FuncRecord", n); size = print_short_hex("size"); print_short_hex("index"); print_hex("DataType"); print_hex("flags"); print_short_hex("VtableOffset"); print_short_hex("funcdescsize"); fkccic = print_hex("FKCCIC"); args_cnt = print_short_hex("nrargs"); print_short_hex("noptargs"); extra_attr = size/sizeof(INT) - 6 - args_cnt*(fkccic&0x1000 ? 4 : 3); if(extra_attr) print_hex("helpcontext"); if(extra_attr >= 2) print_hex("oHelpString"); if(extra_attr >= 3) print_hex("toEntry"); if(extra_attr >= 4) print_hex("res9"); if(extra_attr >= 5) print_hex("resA"); if(extra_attr >= 6) print_hex("HelpStringContext"); if(extra_attr >= 7) print_hex("oCustData"); for(i = 0; i < extra_attr-7; i++) print_hex_id("oArgCustData", i); if(fkccic & 0x1000) { for(i=0; i < args_cnt; i++) print_hex_id("default value[%d]", i); } for(i=0; i < args_cnt; i++) { print_begin_block_id("param", i); /* FIXME: Handle default values */ print_hex("data[0]"); print_hex("paramflags"); print_hex("data[2]"); print_end_block(); } print_end_block(); }
static void dump_msft_typeinfobase(void) { print_begin_block_id("TypeInfoBase", msft_typeinfo_cnt); msft_typeinfo_kind[msft_typeinfo_cnt] = print_hex("typekind"); msft_typeinfo_offs[msft_typeinfo_cnt] = print_hex("memoffset"); print_hex("res2"); print_hex("res3"); print_hex("res4"); print_hex("res5"); msft_typeinfo_elemcnt[msft_typeinfo_cnt] = print_hex("cElement"); print_hex("res7"); print_hex("res8"); print_hex("res9"); print_hex("resA"); print_hex("posguid"); print_hex("flags"); print_hex("NameOffset"); print_hex("version"); print_hex("docstringoffs"); print_hex("docstringcontext"); print_hex("helpcontext"); print_hex("oCustData"); msft_typeinfo_impltypes[msft_typeinfo_cnt++] = print_short_hex("cImplTypes"); print_short_hex("bSizeVftt"); print_dec("size"); print_hex("datatype1"); print_hex("datatype2"); print_hex("res18"); print_hex("res19"); print_end_block(); }
static void dump_msft_typedesc(int n) { print_begin_block_id("TYPEDESC", n); print_hex("hreftype"); print_hex("vt"); print_end_block(); }
static void dump_msft_cdguid(int n) { print_begin_block_id("CGUid", n); print_hex("GuidOffset"); print_hex("DataOffset"); print_hex("next"); print_end_block(); }
static void dump_msft_guidentry(int n) { print_begin_block_id("GuidEntry", n); print_guid("guid"); print_hex("hreftype"); print_hex("next_hash"); print_end_block(); }
static void dump_msft_impinfo(int n) { print_begin_block_id("ImpInfo", n); print_hex("flags"); print_hex("oImpInfo"); print_hex("oGuid"); print_end_block(); }
static void dump_msft_ref(int n) { print_begin_block_id("RefRecord", n); print_hex("reftype"); print_hex("flags"); print_hex("oCustData"); print_hex("onext"); print_end_block(); }
static void dump_msft_impfile(int n) { print_begin_block_id("ImpFile", n); print_hex("guid"); print_hex("lcid"); print_hex("version"); print_ctl2("impfile"); print_end_block(); }
static void dump_msft_name(int base, int n) { int len; print_begin_block_id("Name", n); print_hex("hreftype"); print_hex("next_hash"); len = print_hex("namelen")&0xff; print_offset(); printf("name = "); dump_string(len, 0); printf("\n"); print_end_block(); }
static void dump_msft_var(int n) { INT size; print_begin_block_id("VarRecord", n); size = print_hex("recsize")&0x1ff; print_hex("DataType"); print_hex("flags"); print_short_hex("VarKind"); print_short_hex("vardescsize"); print_hex("OffsValue"); if(size > 5*sizeof(INT)) dump_binary(size - 5*sizeof(INT)); print_end_block(); }
static int dump_msft_typeinfo(int n) { int i; print_begin_block_id("TypeInfo", n); if((msft_typeinfo_kind[n] & 0xf) == TKIND_COCLASS) { dump_msft_coclass(n); print_end_block(); return -1; } print_dec("size"); for(i = 0; i < LOWORD(msft_typeinfo_elemcnt[n]); i++) dump_msft_func(i); for(i = 0; i < HIWORD(msft_typeinfo_elemcnt[n]); i++) dump_msft_var(i); for(i = 0; i < LOWORD(msft_typeinfo_elemcnt[n]); i++) print_hex_id("func %d id", i); for(i = 0; i < HIWORD(msft_typeinfo_elemcnt[n]); i++) print_hex_id("var %d id", i); for(i = 0; i < LOWORD(msft_typeinfo_elemcnt[n]); i++) print_hex_id("func %d name", i); for(i = 0; i < HIWORD(msft_typeinfo_elemcnt[n]); i++) print_hex_id("var %d name", i); for(i = 0; i < LOWORD(msft_typeinfo_elemcnt[n]); i++) print_hex_id("func %d offset", i); for(i = 0; i < HIWORD(msft_typeinfo_elemcnt[n]); i++) print_hex_id("var %d offset", i); print_end_block(); return -1; }
static void dump_msft_name(int base, int n) { int len; print_begin_block_id("Name", n); print_hex("hreftype"); print_hex("next_hash"); len = print_hex("namelen")&0xff; print_offset(); printf("name = \""); fwrite(tlb_read(len), len, 1, stdout); printf("\" "); while(len++ & 3) printf("\\%2.2x", tlb_read_byte()); printf("\n"); print_end_block(); }
static void dump_msft_string(int n) { int len; print_begin_block_id("String", n); len = print_short_hex("stringlen"); print_offset(); printf("string = "); dump_string(len, 2); if(len < 3) { for(len = 0; len < 4; len++) printf("\\%2.2x", tlb_read_byte()); } printf("\n"); print_end_block(); }