Wat is het DEF-bestandsformaat?
.def-bestanden worden geassocieerd met Windows- en OS/2-ontwikkelomgevingen, gebruikt naast C, C++ en andere gecompileerde talen.
Bestanden met de extensie .def slaan gegevens op in platte tekstindeling. .def-bestanden worden soms module-definitiebestanden genoemd en worden gebruikt voor het genereren van DLL-bibliotheken. Een .def-bestand bevat een speciale set linker-instructies - verklaringen zoals LIBRARY, EXPORTS, IMPORTS, SECTIONS, HEAPSIZE en STACKSIZE - die worden gebruikt om belangrijke aspecten van een DLL-bibliotheek te definiëren, inclusief welke functies en gegevenssymbolen worden blootgesteld aan aanroepers en welke rangnummers (ordinals) ze dragen.
Het bestand wordt tijdens het build-proces aan de linker doorgegeven met de /DEF:name.def-schakelaar (MSVC) of gelijkwaardige vlaggen in MinGW/GCC en LLVM lld-link. Het is een build-input, geen gecompileerd artefact; het resulterende binaire bestand is een .dll of .exe.
Een DLL is een bibliotheekbestand dat uitvoerbare code en andere gerelateerde gegevens opslaat. DLL-bestanden zijn herbruikbaar - ze kunnen gelijktijdig door meerdere applicaties worden geopend - en worden dynamisch geladen wanneer dat nodig is. DLL-bestanden zijn ook een middel om schijfruimte en werkgeheugen te besparen vanwege hun dynamische aard. Het bijwerken van software is ook eenvoudiger omdat DLL-bestanden worden gedeeld door meerdere applicaties.
Moderne C/C++-compilers stellen ontwikkelaars in staat om geëxporteerde symbolen rechtstreeks in de broncode te markeren met __declspec(dllexport), waardoor de noodzaak voor een apart .def-bestand grotendeels is afgenomen. .def-bestanden worden echter nog steeds ondersteund door de huidige MSVC-linker (link.exe) en LLVM lld-link, en hebben nog steeds de voorkeur wanneer een stabiele, expliciet geordende exporttabel vereist is.
Beveiliging & veiligheid
RISICO: LOWEen module-definitie .def is een klein build-bestand in platte tekst en is veilig om te openen en te lezen - het kan niet worden uitgevoerd. Het enige praktische risico is het bewerken ervan in een echt project: het wijzigen of verwijderen van een EXPORTS-item verandert de publieke interface van de DLL en kan aanroepers breken of export-ordinals wijzigen, dus begrijp de ABI-impact voordat u bewerkt. Zoals bij elk bronbestand, vertrouw alleen .def-bestanden uit projectbronnen die u beheert.
Formaatdetails
in een notendop- Tibia / OTClient kaartbestand (.def) - Sommige game-tooling en de Tibia-kaarteditor gebruikten .def voor kaart/spawn-definities - niet gerelateerd aan linkers.
- ESRI ArcView / SmartWare datadefinitie - Oudere database- en GIS-tools (SmartWare, ArcView, DataFlex) schreven hun eigen .def schema/definitiebestanden.
- AniSprite animatiedefinitie / Oberon-2 & Modula-2 DEFINITION module - AniSprite sloeg sprite-animatiedefinities op in .def; Modula-2/Oberon gebruiken .def voor de publieke interface van een module.
Programma's die DEF-bestanden openen
Technische details
diepe specificaties| Formaat-type | Linker-instructiebestand in platte tekst |
| MIME-type | text/plain |
| Karaktercodering | ASCII / ANSI; UTF-8 zonder BOM is typisch |
| Bestandssignatuur (magic bytes) | Geen - geïdentificeerd door trefwoorden zoals LIBRARY, EXPORTS of NAME aan het begin van regels |
| Typische bestandsgrootte | Minder dan 1 KB tot enkele KB (één geëxporteerd symbool per regel) |
| Kernverklaring: LIBRARY / NAME | Declareert de modulenaam die is ingebed in de interne header van de DLL |
| Kernverklaring: EXPORTS | Lijst met elk symbool dat moet worden blootgesteld, met optionele rangnummers (@N), NONAME en DATA-vlaggen |
| Aanvullende verklaringen | IMPORTS, SECTIONS (sectie-attributen instellen), HEAPSIZE, STACKSIZE |
| Linker-schakelaar (MSVC) | /DEF:bestandsnaam.def doorgegeven aan link.exe tijdens build |
| Ondersteunende toolchains | MSVC link.exe, MinGW/GCC ld, LLVM lld-link, Watcom linker, Digital Mars linker |
| Output-artefacten | Beheert de exporttabel van een .dll en de importbibliotheek (.lib) die daarnaast wordt gegenereerd |
| Bijbehorende besturingssystemen | Windows (primair); OS/2 (verouderd); 16-bit DOS (verouderd) |
| Modern alternatief | __declspec(dllexport) in broncode; .def heeft nog steeds de voorkeur voor stabiele export-ordinals en toolchain-portabiliteit |
| Legacy 16-bit trefwoorden | CODE- en DATA-segmentattribuutverklaringen aanwezig in 16-bit Windows/OS/2 DEF-bestanden; verouderd onder Win32 |
| Compressie en versleuteling | Geen - altijd opgeslagen als ongecomprimeerde, niet-versleutelde platte tekst |
| Uitgebracht | Windows / OS/2 development, late 1980s-1990s (16-bit, then Win32) |
| Laatste versie | Same statement syntax used by the current MSVC linker (link.exe) and LLVM lld-link |
| Specificatie | learn.microsoft.com |
DEF conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over DEF-bestanden.