### 13.1 The format of the dlltool .def file

A .def file contains any number of the following commands:

`NAME` name `[ ,` base `]`
  The result is going to be named name `.exe`.
`LIBRARY` name `[ ,` base `]`
  The result is going to be named name `.dll`.
`EXPORTS ( ( (` name1 `[ =` name2 `] ) | (` name1 `=` module-name `.` external-name `) )`
`[` integer `] [ NONAME ] [ CONSTANT ] [ DATA ] [ PRIVATE ] ) *`
  Declares name1 as an exported symbol from the DLL, with optional ordinal number integer, or declares name1 as an alias (forward) of the function external-name in the DLL module-name.
`IMPORTS ( (` internal-name `=` module-name `.` integer `) | [` internal-name `= ]` module-name `.` external-name `) ) *`
  Declares that external-name or the exported function whose ordinal number is integer is to be imported from the file module-name. If internal-name is specified then this is the name that the imported function will be referred to in the body of the DLL.
`DESCRIPTION` string
  Puts string into the output .exp file in the `.rdata` section.
`STACKSIZE` number-reserve `[,` number-commit `]`
`HEAPSIZE` number-reserve `[,` number-commit `]`
  Generates `--stack` or `--heap` number-reserve,number-commit in the output `.drectve` section. The linker will see this and act upon it.
`CODE` attr `+`
`DATA` attr `+`
`SECTIONS (` section-name attr `+ ) *`
  Generates `--attr` section-name attr in the output `.drectve` section, where attr is one of `READ`, `WRITE`, `EXECUTE` or `SHARED`. The linker will see this and act upon it.