Newer
Older
alicedbg / dumper / format / lx.d
/// OS/2 / Windows 9x LX file dumper
///
/// Authors: dd86k <dd@dax.moe>
/// Copyright: © dd86k <dd@dax.moe>
/// License: BSD-3-Clause-Clear
module format.lx;

import adbg.disassembler;
import adbg.object.server;
import adbg.machines : AdbgMachine;
import adbg.object.format.lx;
import dumper;

extern (C):

int dump_lx(adbg_object_t *o) {
	if (selected_headers())
		dump_lx_hdr(o);
	return 0;
}

private:

void dump_lx_hdr(adbg_object_t *o) {
	print_header("Header");
	
	with (o.i.lx.header) {
	print_x16("e32_magic", magic, magic == LE_MAGIC ? "LE" : "LX");
	print_x8("e32_border", border);
	print_x8("e32_worder", worder);
	print_x32("e32_level", level);
	print_u16("e32_cpu", cpu, adbg_object_lx_cputype_string(cpu));
	print_u16("e32_os", os, adbg_object_lx_ostype_string(os));
	print_x32("e32_ver", ver);
	print_flags32("e32_mflags", mflags,
		"PROCLIBINIT".ptr, LX_FLAG_PROCLIBINIT,
		"INTFIXUPS".ptr, LX_FLAG_INTFIXUPS,
		"EXTFIXUPS".ptr, LX_FLAG_EXTFIXUPS,
		"INCOMPATPMWIN".ptr, LX_FLAG_INCOMPATPMWIN,
		"COMPATPMWIN".ptr, LX_FLAG_COMPATPMWIN,
		"USESPMWIN".ptr, LX_FLAG_USESPMWIN,
		"MODUNLOADABLE".ptr, LX_FLAG_MODUNLOADABLE,
		"PROCLIBTERM".ptr, LX_FLAG_PROCLIBTERM,
		null);
	print_x32("e32_mflags:ModuleType", mflags, adbg_object_lx_modtype_string(mflags));
	print_u32("e32_mpages", mpages);
	print_x32("e32_startobj", startobj);
	print_x32("e32_eip", eip);
	print_x32("e32_stackobj", stackobj);
	print_x32("e32_esp", esp);
	print_u32("e32_pagesize", pagesize);
	print_x32("e32_pageshift", pageshift);
	print_u32("e32_fixupsize", fixupsize);
	print_x32("e32_fixupsum", fixupsum);
	print_u32("e32_ldrsize", ldrsize);
	print_x32("e32_ldrsum", ldrsum);
	print_x32("e32_objtab", objtab);
	print_x32("e32_objcnt", objcnt);
	print_x32("e32_objmap", objmap);
	print_x32("e32_itermap", itermap);
	print_x32("e32_rsrctab", rsrctab);
	print_x32("e32_rsrccnt", rsrccnt);
	print_x32("e32_restab", restab);
	print_x32("e32_enttab", enttab);
	print_x32("e32_dirtab", dirtab);
	print_x32("e32_dircnt", dircnt);
	print_x32("e32_fpagetab", fpagetab);
	print_x32("e32_frectab", frectab);
	print_x32("e32_impmod", impmod);
	print_x32("e32_impmodcnt", impmodcnt);
	print_x32("e32_impproc", impproc);
	print_x32("e32_pagesum", pagesum);
	print_x32("e32_datapage", datapage);
	print_x32("e32_preload", preload);
	print_x32("e32_nrestab", nrestab);
	print_u32("e32_cbnrestab", cbnrestab);
	print_x32("e32_nressum", nressum);
	print_x32("e32_autodata", autodata);
	print_x32("e32_debuginfo", debuginfo);
	print_u32("e32_debuglen", debuglen);
	print_x32("e32_instpreload", instpreload);
	print_x32("e32_instdemand", instdemand);
	print_u32("e32_heapsize", heapsize);
	print_u32("e32_stacksize", stacksize);
	print_x8("e32_res[0]", res1[0]);
	print_x8("e32_res[1]", res1[1]);
	print_x8("e32_res[2]", res1[2]);
	print_x8("e32_res[3]", res1[3]);
	print_x8("e32_res[4]", res1[4]);
	print_x8("e32_res[5]", res1[5]);
	print_x8("e32_res[6]", res1[6]);
	print_x8("e32_res[7]", res1[7]);
	if (magic == LE_MAGIC) {
		print_x32("winresoff", winresoff);
		print_u32("winreslen", winreslen);
		print_x16("device_id", device_id);
		print_x16("ddk_version", ddk_version);
	} else {
		print_x8("e32_res[8]",  res[8]);
		print_x8("e32_res[9]",  res[9]);
		print_x8("e32_res[10]", res[10]);
		print_x8("e32_res[11]", res[11]);
		print_x8("e32_res[12]", res[12]);
		print_x8("e32_res[13]", res[13]);
		print_x8("e32_res[14]", res[14]);
		print_x8("e32_res[15]", res[15]);
		print_x8("e32_res[16]", res[16]);
		print_x8("e32_res[17]", res[17]);
		print_x8("e32_res[18]", res[18]);
		print_x8("e32_res[19]", res[19]);
	}
	}
}