static BOOL dump_msft_custdata(seg_t *seg) { unsigned short vt; unsigned i, n; print_begin_block("CustData"); for(i=0; offset < seg->offset+seg->length; i++) { print_offset(); vt = tlb_read_short(); printf("vt %d", vt); n = tlb_read_int(); switch(vt) { case 8 /* VT_BSTR */: printf(" len %d: ", n); dump_string(n, 2); printf("\n"); break; default: printf(": %x ", n); printf("\\%2.2x \\%2.2x\n", tlb_read_byte(), tlb_read_byte()); } } print_end_block(); return TRUE; }
static void dump_string(int len, int align_off) { printf("\""); fwrite(tlb_read(len), len, 1, stdout); printf("\" "); while((len++ + align_off) & 3) printf("\\%2.2x", tlb_read_byte()); }
static void dump_binary(int n) { int i; for(i = 1; i <= n; i++) { switch(i & 0x0f) { case 0: printf("%02x\n", tlb_read_byte()); break; case 1: print_offset(); /* fall through */ default: printf("%02x ", tlb_read_byte()); } } if(n&0x0f) printf("\n"); }
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 print_ctl2(const char *name) { int len; const char *buf; print_offset(); len = tlb_read_short(); printf("%s = %d \"", name, len); len >>= 2; buf = tlb_read(len); fwrite(buf, len, 1, stdout); printf("\""); len += 2; while(len++ & 3) printf("\\%02x", tlb_read_byte()); printf("\n"); }
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(); }