Monday, 19 December 2011

Novell Netware loadable module (NLM) file format

A NetWare Loadable Module (NLM) is a binary code module that can be loaded into Novell's NetWare operating system. NLMs can implement hardware drivers, server functions (e.g. clustering), applications (e.g. GroupWise), system libraries or utilities.

Structure of NLM file:
 00   - char[0x18] : 'NetWare Loadable Module' 1a
 18   - long       : 00000004        ; load version
          04  = NW 3.11
          84  = NW 3.12 & above (NLM compression)
 1c   - strlen:1, string:strlen,  00:(13-strlen)
 2a   - offset, len     ; 0, 1 code segment
 32   - offset, len     ; 2, 3 data segment
 3a   - 0(long)         ; 4    length of uninitialized data
 3e   - offset, len     ; 5, 6 custom data segment
 46   - offset, nrec    ; 7, 8 autoload modules
 4e   - offset, nrec    ; 9,10 fixups
 56   - offset, nrec    ;11,12 externals
 5e   - offset, nrec    ;13,14 exported symbols
 66   - offset, nrec    ;15,16 debug symbols
 6e   - codeoffset      ;17    start nlm
 72   - codeoffset      ;18    terminate nlm
 76   - codeoffset      :19    check nlm
 7a   - type            :20
          00=nlm  NetWare Loadable Module
          01=lan  LAN Driver
          02=dsk  Disk Driver
          03=nam  Name Space
          04=msl  Mirrored Server Link
          05=
          06=nw3  Operating system
          07=nw4  Operating system
          0c=internal  'hidden' internal NLM, can not be unloaded
 7e   - ?               ;21
 82   - len, string, 00                          ; description
   - 00 20 00 00 00 00 00 00 20      ; flags
   - 'LONG'
   - len, string, 00                          ; screenname
   - len, string, 00                          ; threadname
   - 'VeRsIoN#'
   -   major           (long)
   -   minor           (long)
   -   sub version     (long)
   -   year
   -   month
   -   day
   - 'CoPyRiGhT='
   - len, string,0    ; copyright message
   - 'MeSsAgEs'
   -  LONGS ...
types in external symbol list:
0  - ? relative reference (near call) from data segment
4  - relative reference (near call) from code segment
8  - ? absolute reference (long offset) from data segment
c  - absolute reference (long offset) from code segment
types in fixup table:
0  - abs ref to data segment from data segment
4  - abs ref to data segment from code segment
8  - abs ref to code segment from data segment
c  - abs ref to code segment from code segment
Novell loadable module decoder by W.J.Hengeveld jun 1994

No comments:

Post a Comment