### 14.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`. Note: If you want to use LIBRARY as name then you need to quote. Otherwise this will fail due a necessary hack for libtool (see PR binutils/13710 for more details).
`EXPORTS ( ( (` name1 `[ =` name2 `] ) | (` name1 `=` module-name `.` external-name `) ) [ ==` its_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. If its_name is specified, this name is used as string in export table. module-name. Note: The `EXPORTS` has to be the last command in .def file, as keywords are treated - beside `LIBRARY` - as simple name-identifiers. If you want to use LIBRARY as name then you need to quote it.
`IMPORTS ( (` internal-name `=` module-name `.` integer `) | [` internal-name `= ]` module-name `.` external-name `) [ == )` its_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. If its_name is specified, this name is used as string in import table. Note: The `IMPORTS` has to be the last command in .def file, as keywords are treated - beside `LIBRARY` - as simple name-identifiers. If you want to use LIBRARY as name then you need to quote it.
`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.