Here is a standard NLM file header. Each NLM file is started with it.
struct nlmexe_t { #define NLM_MAGIC_SIZE 0x18 char magic[NLM_MAGIC_SIZE]; #define NLM_MAGIC "NetWare Loadable Module\x1A" ulong version; // file Version #define NLM_COMPRESSED 0x00000080L // compressed NLM file char fnamelen; // modulename length char fname[12+1]; ulong codeoff; // offset to code segment ulong codelen; // length of code segment ulong dataoff; // offset to data segment ulong datalen; // length of data segment ulong bssSize; // Unitialized data size ulong custoff; // help off ulong custlen; // help length ulong autoliboff; // autoload library offset ulong autolibnum; // number of autoload libraries ulong fixupoff; // offset to fixups ulong fixupnum; // number of fixups ulong impoff; // offset to imported names ulong impnum; // number of imported names ulong expoff; // offset to exported names ulong expnum; // number of exported names ulong puboff; // offset to public names ulong pubnum; // number of public names ulong startIP; // entry point? ulong endIP; // terminate NLM ulong auxIP; // additional entry point ulong modType; // Module type ulong flags; // Module flags };