8 printf(
"Error: operator<< not implemented! \n");
70 set_synthesized(
true);
71 set_purpose(SP_HEADER);
77 read_content_local(0, &fh,
sizeof fh);
115 for (
size_t i = 0; i <
sizeof(fh.
e_magic); ++i)
116 p_magic.push_back(fh.
e_magic[i]);
122 p_exec_format->set_abi(
ABI_NT);
123 p_exec_format->set_abi_version(0);
124 p_exec_format->set_word_size(2);
125 ROSE_ASSERT(p_e_linker_major <= 0xff && p_e_linker_minor <= 0xff);
126 p_exec_format->set_version((p_e_linker_major<<8) | p_e_linker_minor);
127 p_exec_format->set_is_current_version(
true);
130 switch (p_e_exetype) {
135 throw FormatError(
"use of reserved value for Windows NE header e_exetype");
141 throw FormatError(
"use of reserved value for Windows NE header e_exetype");
164 unsigned char dos_magic[2];
166 if (
'M'!=dos_magic[0] ||
'Z'!=dos_magic[1])
170 uint32_t lfanew_disk;
171 file->
read_content(0x3c, &lfanew_disk,
sizeof lfanew_disk);
175 unsigned char ne_magic[2];
176 file->
read_content(ne_offset, ne_magic,
sizeof ne_magic);
177 if (
'N'!=ne_magic[0] ||
'E'!=ne_magic[1])
193 disk->
e_magic[i] = get_magic()[i];
233 write(f, 0,
sizeof fh, &fh);
237 p_dos2_header->unparse(f);
241 p_section_table->unparse(f);
245 p_resname_table->unparse(f);
246 if (p_nonresname_table)
247 p_nonresname_table->unparse(f);
249 p_module_table->unparse(f);
251 p_entry_table->unparse(f);
260 sprintf(p,
"%sNEFileHeader[%zd].", prefix, idx);
262 sprintf(p,
"%sNEFileHeader.", prefix);
268 fprintf(f,
"%s%-*s = %u\n", p, w,
"e_linker_major", p_e_linker_major);
269 fprintf(f,
"%s%-*s = %u\n", p, w,
"e_linker_minor", p_e_linker_minor);
270 fprintf(f,
"%s%-*s = %"PRIu64
" (%"PRIu64
" abs)\n", p, w,
"e_entrytab_rfo",
271 p_e_entrytab_rfo, p_e_entrytab_rfo+
p_offset);
272 fprintf(f,
"%s%-*s = %"PRIu64
" bytes\n", p, w,
"e_entrytab_size", p_e_entrytab_size);
273 fprintf(f,
"%s%-*s = 0x%08x\n", p, w,
"e_checksum", p_e_checksum);
274 fprintf(f,
"%s%-*s = 0x%04x\n", p, w,
"e_flags1", p_e_flags1);
275 fprintf(f,
"%s%-*s = %u (1-origin)\n", p, w,
"e_autodata_sn", p_e_autodata_sn);
276 fprintf(f,
"%s%-*s = %u bytes\n", p, w,
"e_bss_size", p_e_bss_size);
277 fprintf(f,
"%s%-*s = %u bytes\n", p, w,
"e_stack_size", p_e_stack_size);
278 fprintf(f,
"%s%-*s = 0x%08x\n", p, w,
"e_csip", p_e_csip);
279 fprintf(f,
"%s%-*s = 0x%08x\n", p, w,
"e_sssp", p_e_sssp);
280 fprintf(f,
"%s%-*s = %u\n", p, w,
"e_nsections", p_e_nsections);
281 fprintf(f,
"%s%-*s = %u\n", p, w,
"e_nmodrefs", p_e_nmodrefs);
282 fprintf(f,
"%s%-*s = %u\n", p, w,
"e_nnonresnames", p_e_nnonresnames);
283 fprintf(f,
"%s%-*s = %"PRIu64
" (%"PRIu64
" abs)\n", p, w,
"e_sectab_rfo",
284 p_e_sectab_rfo, p_e_sectab_rfo+
p_offset);
285 fprintf(f,
"%s%-*s = %"PRIu64
" (%"PRIu64
" abs)\n", p, w,
"e_rsrctab_rfo",
286 p_e_rsrctab_rfo, p_e_rsrctab_rfo+
p_offset);
287 fprintf(f,
"%s%-*s = %"PRIu64
" (%"PRIu64
" abs)\n", p, w,
"e_resnametab_rfo",
288 p_e_resnametab_rfo, p_e_resnametab_rfo+
p_offset);
289 fprintf(f,
"%s%-*s = %"PRIu64
" (%"PRIu64
" abs)\n", p, w,
"e_modreftab_rfo",
290 p_e_modreftab_rfo, p_e_modreftab_rfo+
p_offset);
291 fprintf(f,
"%s%-*s = %"PRIu64
" (%"PRIu64
" abs)\n", p, w,
"e_importnametab_rfo",
292 p_e_importnametab_rfo, p_e_importnametab_rfo+
p_offset);
293 fprintf(f,
"%s%-*s = %"PRIu64
" byte offset\n", p, w,
"e_nonresnametab_offset", p_e_nonresnametab_offset);
294 fprintf(f,
"%s%-*s = %u entries\n", p, w,
"e_nmovable_entries", p_e_nmovable_entries);
295 fprintf(f,
"%s%-*s = %u (log2)\n", p, w,
"e_sector_align", p_e_sector_align);
296 fprintf(f,
"%s%-*s = %u\n", p, w,
"e_nresources", p_e_nresources);
297 fprintf(f,
"%s%-*s = %u\n", p, w,
"e_exetype", p_e_exetype);
298 fprintf(f,
"%s%-*s = 0x%02x\n", p, w,
"e_flags2", p_e_flags2);
299 fprintf(f,
"%s%-*s = sector %"PRIu64
"\n", p, w,
"e_fastload_sector", p_e_fastload_sector);
300 fprintf(f,
"%s%-*s = %"PRIu64
" sectors\n", p, w,
"e_fastload_nsectors", p_e_fastload_nsectors);
301 fprintf(f,
"%s%-*s = 0x%04x\n", p, w,
"e_res1", p_e_res1);
302 fprintf(f,
"%s%-*s = 0x%04x\n", p, w,
"e_winvers", p_e_winvers);
305 fprintf(f,
"%s%-*s = [%d] \"%s\"\n", p, w,
"dos2_header",
306 p_dos2_header->get_id(), p_dos2_header->get_name()->get_string(
true).c_str());
308 fprintf(f,
"%s%-*s = none\n", p, w,
"dos2_header");
310 if (p_section_table) {
311 fprintf(f,
"%s%-*s = [%d] \"%s\"\n", p, w,
"section_table",
312 p_section_table->get_id(), p_section_table->get_name()->get_string(
true).c_str());
314 fprintf(f,
"%s%-*s = none\n", p, w,
"section_table");
316 if (p_resname_table) {
317 fprintf(f,
"%s%-*s = [%d] \"%s\"\n", p, w,
"resname_table",
318 p_resname_table->get_id(), p_resname_table->get_name()->get_string(
true).c_str());
320 fprintf(f,
"%s%-*s = none\n", p, w,
"resname_table");
322 if (p_nonresname_table) {
323 fprintf(f,
"%s%-*s = [%d] \"%s\"\n", p, w,
"nonresname_table",
324 p_nonresname_table->get_id(), p_nonresname_table->get_name()->get_string(
true).c_str());
326 fprintf(f,
"%s%-*s = none\n", p, w,
"nonresname_table");
328 if (p_module_table) {
329 fprintf(f,
"%s%-*s = [%d] \"%s\"\n", p, w,
"module_table",
330 p_module_table->get_id(), p_module_table->get_name()->get_string(
true).c_str());
332 fprintf(f,
"%s%-*s = none\n", p, w,
"module_table");
335 fprintf(f,
"%s%-*s = [%d] \"%s\"\n", p, w,
"entry_table",
336 p_entry_table->get_id(), p_entry_table->get_name()->get_string(
true).c_str());
338 fprintf(f,
"%s%-*s = none\n", p, w,
"entry_table");
351 if (0==p_physical_size && p_sector!=0) p_physical_size = 64*1024;
354 if (0==p_virtual_size) p_virtual_size = 64*1024;
362 unsigned x_physical_size = p_physical_size==64*1024 ? 0 : p_physical_size;
365 unsigned x_virtual_size = p_virtual_size==64*1024 ? 0 : p_virtual_size;
376 sprintf(p,
"%sNESectionTableEntry[%zd].", prefix, idx);
378 sprintf(p,
"%sNESectionTableEntry.", prefix);
384 fprintf(f,
"%s%-*s = %u", p, w,
"sector", p_sector);
388 fprintf(f,
"%s%-*s = %"PRIu64
" bytes\n", p, w,
"physical_size", p_physical_size);
389 fprintf(f,
"%s%-*s = %"PRIu64
" bytes\n", p, w,
"virtual_size", p_virtual_size);
390 fprintf(f,
"%s%-*s = 0x%08x", p, w,
"flags",
p_flags);
391 switch (
p_flags & SF_TYPE_MASK) {
392 case SF_CODE: fputs(
" code", f);
break;
393 case SF_DATA: fputs(
" data", f);
break;
394 case SF_ALLOC: fputs(
" alloc", f);
break;
395 case SF_LOAD: fputs(
" load", f);
break;
396 default: fprintf(f,
" type=%u",
p_flags & SF_TYPE_MASK);
break;
398 if (
p_flags & SF_MOVABLE) fputs(
" movable", f);
399 if (
p_flags & SF_PURE) fputs(
" pure", f);
400 if (
p_flags & SF_PRELOAD) fputs(
" preload", f);
401 if (
p_flags & SF_NOT_WRITABLE) fputs(
" const", f);
402 if (
p_flags & SF_RELOCINFO) fputs(
" reloc", f);
403 if (
p_flags & SF_DISCARDABLE) fputs(
" discardable", f);
404 if (
p_flags & SF_DISCARD) fputs(
" discard", f);
405 if (
p_flags & SF_RESERVED) fputs(
" *", f);
415 p_reloc_table->unparse(f);
424 sprintf(p,
"%sNESection[%zd].", prefix, idx);
426 sprintf(p,
"%sNESection.", prefix);
433 p_st_entry->
dump(f, p, -1, fhdr);
435 fprintf(f,
"%s%-*s = [%d] \"%s\"\n", p, w,
"reloc_table",
436 p_reloc_table->get_id(), p_reloc_table->get_name()->get_string(
true).c_str());
438 fprintf(f,
"%s%-*s = none\n", p, w,
"reloc_table");
447 ROSE_ASSERT(fhdr!=NULL);
453 set_synthesized(
true);
455 set_purpose(SP_HEADER);
462 read_content_local(i*entsize, &disk, entsize);
483 if (0 == section_offset) {
488 }
else if (0 == section_type) {
513 ROSE_ASSERT(fhdr!=NULL);
516 for (
size_t i=0; i<sections.size(); i++) {
517 if (sections[i]->get_id()>=0) {
521 ROSE_ASSERT(section->
get_id()>0);
522 size_t slot = section->
get_id()-1;
526 write(f, slot*
sizeof(disk),
sizeof disk, &disk);
542 sprintf(p,
"%sNESectionTable[%zd].", prefix, idx);
544 sprintf(p,
"%sNESectionTable.", prefix);
561 set_synthesized(
true);
563 set_purpose(SP_HEADER);
566 ROSE_ASSERT(fhdr!=NULL);
574 read_content_local(at++, &byte, 1);
575 size_t length = byte;
576 if (0==length)
break;
579 char *buf =
new char[length];
580 read_content_local(at, buf, length);
581 p_names.push_back(std::string(buf, length));
587 read_content_local(at, &u16_disk, 2);
598 ROSE_ASSERT(p_names.size() == p_ordinals.size());
600 for (
size_t i = 0; i < p_names.size(); i++) {
602 ROSE_ASSERT(p_names[i].size() <= 0xff);
603 unsigned char len = p_names[i].size();
604 spos = write(f, spos, len);
607 spos = write(f, spos, p_names[i]);
610 ROSE_ASSERT(p_ordinals[i]<=0xffff);
613 spos = write(f, spos,
sizeof ordinal_le, &ordinal_le);
617 write(f, spos,
'\0');
626 sprintf(p,
"%sNENameTable[%zd].", prefix, idx);
628 sprintf(p,
"%sNENameTable.", prefix);
634 ROSE_ASSERT(p_names.size() == p_ordinals.size());
635 for (
size_t i = 0; i < p_names.size(); i++) {
636 fprintf(f,
"%s%-*s = [%zd] \"%s\"\n", p, w,
"names", i,
escapeString(p_names[i]).c_str());
637 fprintf(f,
"%s%-*s = [%zd] %u\n", p, w,
"ordinals", i, p_ordinals[i]);
642 std::vector<std::string>
645 std::vector<std::string> retval;
646 for (
size_t i = 0; i < p_ordinals.size(); i++) {
647 if (p_ordinals[i] == ordinal) {
648 retval.push_back(p_names[i]);
666 set_synthesized(
true);
668 set_purpose(SP_HEADER);
671 ROSE_ASSERT(fhdr!=NULL);
673 ROSE_ASSERT(NULL != p_strtab);
675 for (
rose_addr_t at = 0; at < get_size(); at += 2) {
677 read_content_local(at, &u16_disk, 2);
679 p_name_offsets.push_back(name_offset);
680 p_names.push_back(p_strtab->get_string(name_offset));
684 for (
size_t i = 0; i < p_names.size(); i++) {
694 p_strtab->unparse(f);
696 for (
size_t i = 0; i < p_name_offsets.size(); i++) {
697 uint16_t name_offset_le;
699 spos = write(f, spos,
sizeof name_offset_le, &name_offset_le);
709 sprintf(p,
"%sNEModuleTable[%zd].", prefix, idx);
711 sprintf(p,
"%sNEModuleTable.", prefix);
719 fprintf(f,
"%s%-*s = [%d] \"%s\"\n", p, w,
"strtab",
720 p_strtab->get_id(), p_strtab->get_name()->get_string(
true).c_str());
722 fprintf(f,
"%s%-*s = none\n", p, w,
"strtab");
725 for (
size_t i = 0; i < p_names.size(); i++) {
726 fprintf(f,
"%s%-*s = [%zu] (offset %"PRIu64
", %zu bytes) \"%s\"\n",
727 p, w,
"name", i, p_name_offsets[i], p_names[i].size(),
escapeString(p_names[i]).c_str());
744 set_synthesized(
true);
746 set_purpose(SP_HEADER);
756 read_content_local(offset, &byte, 1);
757 size_t length = byte;
759 char *buf =
new char[length];
760 read_content_local(offset+1, buf, length);
761 std::string retval(buf, length);
772 sprintf(p,
"%sNEStringTable[%zd].", prefix, idx);
774 sprintf(p,
"%sNEStringTable.", prefix);
781 bool was_congealed = get_congealed();
784 for (
size_t i=0; at<get_size(); i++) {
785 std::string s = get_string(at);
787 sprintf(label,
"string-at-%"PRIu64, at);
788 fprintf(f,
"%s%-*s = [%zu] (offset %"PRIu64
", %zu bytes) \"%s\"\n", p, w,
"string", i, at, s.size(), s.c_str());
806 sprintf(p,
"%sNEEntryPoint[%zd].", prefix, idx);
808 sprintf(p,
"%sNEEntryPoint.", prefix);
813 if (0 == p_section_idx) {
814 fprintf(f,
"%s%-*s = %s\n", p, w,
"type",
"unused");
816 ROSE_ASSERT(0 == p_int3f);
817 ROSE_ASSERT(0 == p_section_offset);
819 fprintf(f,
"%s%-*s = %s\n", p, w,
"type", 0 == p_int3f ?
"fixed" :
"movable");
820 fprintf(f,
"%s%-*s = 0x%02x", p, w,
"flags",
p_flags);
821 if (
p_flags & EF_EXPORTED) fputs(
" exported", f);
822 if (
p_flags & EF_GLOBAL) fputs(
" global", f);
823 if (
p_flags & EF_RESERVED) fputs(
" *", f);
826 fprintf(f,
"%s%-*s = 0x%04x\n", p, w,
"int3f", p_int3f);
827 fprintf(f,
"%s%-*s = %d\n", p, w,
"section_idx", p_section_idx);
828 fprintf(f,
"%s%-*s = 0x%04x\n", p, w,
"section_offset", p_section_offset);
840 set_synthesized(
true);
842 set_purpose(SP_HEADER);
848 read_content_local(at++, &byte, 1);
849 size_t bundle_nentries = byte;
850 while (bundle_nentries > 0) {
851 p_bundle_sizes.push_back(bundle_nentries);
852 read_content_local(at++, &byte, 1);
853 unsigned segment_indicator = byte;
854 if (0 == segment_indicator) {
856 for (
size_t i = 0; i < bundle_nentries; i++) {
859 }
else if (0xff == segment_indicator) {
861 for (
size_t i = 0; i < bundle_nentries; i++, at+=6) {
862 read_content_local(at, &byte, 1);
864 read_content_local(at+1, &u16_disk, 2);
866 ROSE_ASSERT(int3f!=0);
867 read_content_local(at+3, &byte, 1);
868 unsigned segno = byte;
869 read_content_local(at+4, &u16_disk, 2);
875 for (
size_t i = 0; i < bundle_nentries; i++, at+=3) {
876 read_content_local(at, &byte, 1);
878 read_content_local(at+1, &u16_disk, 2);
880 p_entries.push_back(
new SgAsmNEEntryPoint(flags, 0, segment_indicator, segoffset));
884 read_content_local(at++, &byte, 1);
885 bundle_nentries = byte;
895 for (
size_t i=0; i < p_entries.size(); i++) {
900 }
else if (NULL == (section = get_file()->get_section_by_id(entry.
get_section_idx()))) {
901 fprintf(stderr,
"Ignoring bad entry section_idx (FIXME)\n");
902 entry.
dump(stderr,
" ", i);
912 fprintf(stderr,
"ROBB: entry[%zu] (ordinal %zu)\n", i, i+1);
913 for (
size_t j = 0; j < p_names.size(); j++) {
914 fprintf(stderr,
"ROBB: name=\"%s\"\n", p_names[j].c_str());
927 for (
size_t bi=0, ei=0; bi < p_bundle_sizes.size(); ei += p_bundle_sizes[bi++]) {
928 ROSE_ASSERT(p_bundle_sizes[bi] > 0 && p_bundle_sizes[bi] <= 0xff);
929 unsigned char n = p_bundle_sizes[bi];
930 spos = write(f, spos, n);
932 ROSE_ASSERT(ei + p_bundle_sizes[bi] <= p_entries.size());
933 if (0 == p_entries[ei]->get_section_idx()) {
935 spos = write(f, spos,
'\0');
936 }
else if (0 == p_entries[ei]->get_int3f()) {
938 ROSE_ASSERT(p_entries[ei]->get_section_idx() <= 0xff);
939 unsigned char n = p_entries[ei]->get_section_idx();
940 spos = write(f, spos, n);
941 for (
size_t i = 0; i < p_bundle_sizes[bi]; i++) {
942 ROSE_ASSERT(p_entries[ei]->get_section_idx() == p_entries[ei+i]->get_section_idx());
943 ROSE_ASSERT(p_entries[ei+i]->get_int3f() == 0);
944 ROSE_ASSERT(p_entries[ei+i]->
get_flags() <= 0xff);
945 n = p_entries[ei+i]->get_flags();
946 spos = write(f, spos, n);
949 spos = write(f, spos,
sizeof eoff_le, &eoff_le);
953 spos = write(f, spos,
'\377');
954 for (
size_t i = 0; i < p_bundle_sizes[bi]; i++) {
955 ROSE_ASSERT(p_entries[ei+i]->get_section_idx() > 0);
956 ROSE_ASSERT(p_entries[ei+i]->get_int3f() != 0);
957 ROSE_ASSERT(p_entries[ei+i]->
get_flags() <= 0xff);
958 n = p_entries[ei+i]->get_flags();
959 spos = write(f, spos, n);
962 spos = write(f, spos,
sizeof word, &word);
963 ROSE_ASSERT(p_entries[ei+i]->get_section_idx() <= 0xff);
964 n = p_entries[ei+i]->get_section_idx();
965 spos = write(f, spos, n);
967 spos = write(f, spos,
sizeof word, &word);
971 write(f, spos,
'\0');
980 sprintf(p,
"%sNEEntryTable[%zd].", prefix, idx);
982 sprintf(p,
"%sNEEntryTable.", prefix);
988 fprintf(f,
"%s%-*s = %zu bundles\n", p, w,
"nbundles", p_bundle_sizes.size());
989 for (
size_t i = 0; i < p_bundle_sizes.size(); i++) {
990 fprintf(f,
"%s%-*s = [%zu] %zu entries\n", p, w,
"bundle_size", i, p_bundle_sizes[i]);
992 for (
size_t i = 0; i < p_entries.size(); i++) {
993 p_entries[i]->dump(f, p, i);
1010 ROSE_ASSERT(at == relocs->
get_size());
1106 *rec_size = at - orig_at;
1115 spos = section->
write(f, spos, byte);
1117 spos = section->
write(f, spos, byte);
1122 spos = section->
write(f, spos,
sizeof word, &word);
1127 spos = section->
write(f, spos, byte);
1129 spos = section->
write(f, spos, byte);
1131 spos = section->
write(f, spos,
sizeof word, &word);
1135 spos = section->
write(f, spos,
sizeof word, &word);
1137 spos = section->
write(f, spos,
sizeof word, &word);
1141 spos = section->
write(f, spos,
sizeof dword, &dword);
1144 spos = section->
write(f, spos,
sizeof word, &word);
1152 spos = section->
write(f, spos,
sizeof word, &word);
1154 spos = section->
write(f, spos,
sizeof word, &word);
1158 spos = section->
write(f, spos,
sizeof dword, &dword);
1161 spos = section->
write(f, spos,
sizeof word, &word);
1169 spos = section->
write(f, spos,
sizeof word, &word);
1171 spos = section->
write(f, spos,
sizeof word, &word);
1174 ROSE_ASSERT(!
"unknown relocation target type");
1185 sprintf(p,
"%sRelocEntry[%zd].", prefix, idx);
1187 sprintf(p,
"%sRelocEntry.", prefix);
1203 default: s =
"unknown";
break;
1205 fprintf(f,
"%s%-*s = %u (%s)\n", p, w,
"src_type",
p_src_type, s);
1210 default: s =
"unknown";
break;
1212 fprintf(f,
"%s%-*s = 0x%04u (%s)\n", p, w,
"modifier",
p_modifier, s);
1219 default: s =
"unknown";
break;
1221 fprintf(f,
"%s%-*s = %u (%s)\n", p, w,
"tgt_type",
p_tgt_type, s);
1223 fprintf(f,
"%s%-*s = 0x%04x", p, w,
"flags",
p_flags);
1231 fprintf(f,
"%s%-*s = 0x%08"PRIx64
"\n", p, w,
"src_offset",
p_src_offset);
1236 fprintf(f,
"%s%-*s = 0x%02x\n", p, w,
"res3",
p_iref.
res1);
1237 fprintf(f,
"%s%-*s = 0x%08"PRIx64
"\n", p, w,
"tgt_offset",
p_iref.
tgt_offset);
1240 fprintf(f,
"%s%-*s = %u\n", p, w,
"modref",
p_iord.
modref);
1241 fprintf(f,
"%s%-*s = %u\n", p, w,
"ordinal",
p_iord.
ordinal);
1242 fprintf(f,
"%s%-*s = %"PRIu64
"\n", p, w,
"addend",
p_iord.
addend);
1245 fprintf(f,
"%s%-*s = %u\n", p, w,
"modref",
p_iname.
modref);
1246 fprintf(f,
"%s%-*s = %u\n", p, w,
"nm_off",
p_iname.
nm_off);
1247 fprintf(f,
"%s%-*s = %"PRIu64
"\n", p, w,
"addend",
p_iname.
addend);
1251 fprintf(f,
"%s%-*s = 0x%04x\n", p, w,
"res3",
p_osfixup.
res3);
1254 ROSE_ASSERT(!
"unknown relocation target type");
1264 ROSE_ASSERT(section!=NULL);
1270 sprintf(name,
"NE Relocation Table %"PRIu64,
p_offset);
1271 set_synthesized(
true);
1273 set_purpose(SP_HEADER);
1275 ROSE_ASSERT(0 == get_size());
1281 read_content_local(at, &u16_disk, 2);
1285 for (
size_t i = 0; i < nrelocs; i++, at += reloc_size) {
1297 spos = write(f, spos,
sizeof size_le, &size_le);
1299 for (
size_t i = 0; i < p_entries.size(); i++) {
1300 spos = p_entries[i]->unparse(f,
this, spos);
1310 sprintf(p,
"%sNERelocTable[%zd].", prefix, idx);
1312 sprintf(p,
"%sNERelocTable.", prefix);
1318 fprintf(f,
"%s%-*s = %zu entries\n", p, w,
"size", p_entries.size());
1319 for (
size_t i = 0; i < p_entries.size(); i++) {
1320 p_entries[i]->dump(f, p, i);
1330 ROSE_ASSERT(dos_header);
1337 dos2_header->
parse();
1383 enttab->populate_entries();