% since Linux 6.14
% linux_configuration_12_executable_file_formats.tex

\section{Executable file formats \texorpdfstring{$\rightarrow$}{->}}
(Ausführbare Dateiformate)

\subsection{Kernel support for ELF binaries}
CONFIG\_BINFMT\_ELF [=y] \textbf{[Y]}\\
ELF (Executable and Linkable Format) ist ein Format für Bibliotheken und ausführbare Dateien,
das auf verschiedenen Architekturen und Betriebssystemen verwendet wird.
Wenn Sie hier Y angeben, kann Ihr Kernel ELF-Binärdateien ausführen und wird um etwa \qty{13}{\kilo\byte} vergrößert.
Die ELF-Unterstützung unter Linux hat inzwischen die traditionellen Linux a.out-Formate (QMAGIC und ZMAGIC)
fast vollständig ersetzt, da es portabel ist (was jedoch *nicht* bedeutet, dass Sie ausführbare Dateien
von verschiedenen Architekturen oder Betriebssystemen ausführen können) und die Erstellung von
Laufzeitbibliotheken sehr einfach macht. Viele neue ausführbare Dateien werden ausschließlich im
ELF-Format vertrieben. Hier sollten Sie unbedingt Y sagen. Informationen über ELF sind im ELF HOWTO
enthalten, das unter \url{http://www.tldp.org/docs.html#howto} verfügbar ist.
Wenn Sie feststellen, dass Sie nach dem Upgrade von Linux-Kernel 1.2 und der Angabe von Y hier immer
noch keine ELF-Binärdateien ausführen können (sie stürzen einfach ab), dann müssen Sie die neuesten
ELF-Laufzeitbibliotheken installieren, einschließlich \texttt{ld.so} (überprüfen Sie die Datei
$<$file:Documentation/Changes$>$ für den Ort und die neueste Version).
\english{ELF (Executable and Linkable Format) is a format for libraries and executables used across different architectures and operating systems.
Saying Y here will enable your kernel to run ELF binaries and enlarge it by about 13 KB.
ELF support under Linux has now all but replaced the traditional Linux a.out formats (QMAGIC and ZMAGIC) because it is portable
(this does *not* mean that you will be able to run executables from different architectures or operating systems however) and makes
building run-time libraries very easy.
Many new executables are distributed solely in ELF format.
You definitely want to say Y here.\\
Information about ELF is contained in the ELF HOWTO available from \url{http://www.tldp.org/docs.html\#howto}.\\
If you find that after upgrading from Linux kernel 1.2 and saying Y here, you still can't run any ELF binaries (they just crash),
then you'll have to install the newest ELF runtime libraries, including ld.so (check the file $<$file:Documentation/Changes$>$ for location and latest version).}

\subsection{Write ELF core dumps with partial segments}
CONFIG\_CORE\_DUMP\_DEFAULT\_ELF\_HEADERS [=y] \textbf{[Y]}\\
ELF-Core-Dump-Dateien beschreiben jede Speicherabbildung des abgestürzten Prozesses und können den
Speicherinhalt jedes einzelnen Prozesses enthalten oder auslassen. Der Inhalt eines unveränderten
Text-Mappings wird standardmäßig weggelassen. Bei einem unveränderten Text-Mapping eines ELF-Objekts
ermöglicht die Aufnahme nur der ersten Seite der Datei in einen Core-Dump die Identifizierung der
Build-ID-Bits in der Datei, ohne dass die E/A-Kosten und der Plattenplatz für das Dump des gesamten
Textes anfallen. Versionen von GDB vor 6.7 werden jedoch von ELF-Core-Dump-Dateien in diesem Format
verwirrt. Das Verhalten des Kerndumps kann pro Prozess mit der Pseudodatei /proc/PID/coredump\_filter
gesteuert werden; diese Einstellung wird vererbt.
Siehe Dokumentation/filesystems/proc.rst für Details.
Diese Konfigurationsoption ändert die Standardeinstellung von coredump\_filter, die beim Booten zu
sehen ist.
Wenn Sie unsicher sind, sagen Sie Y.
\english{ELF core dump files describe each memory mapping of the crashed process, and can contain or omit the memory contents of each one.
The contents of an unmodified text mapping are omitted by default.\\
For an unmodified text mapping of an ELF object, including just the first page of the file in a core dump makes it possible to identify the
build ID bits in the file, without paying the i/o cost and disk space to dump all the text.
However, versions of GDB before 6.7 are confused by ELF core dump files in this format.\\
The core dump behavior can be controlled per process using the /proc/PID/coredump\_filter pseudo-file; this setting is inherited.
See Documentation/filesystems/proc.rst for details.\\
This config option changes the default setting of coredump\_filter seen at boot time. If unsure, say Y.}

\subsection{Kernel support for scripts starting with \#!}
CONFIG\_BINFMT\_SCRIPT [=y] \textbf{[Y]}\\
(Kernel-Unterstützung für Skripte, die mit \#!, dem Shebang, anfangen)
Geben Sie hier Y an, wenn Sie interpretierte Skripte ausführen wollen, die mit \#! beginnen,
gefolgt von dem Pfad zu einem Interpreter. Sie können diese Unterstützung als Modul bauen; bis dieses
Modul jedoch geladen ist, können Sie keine Skripte ausführen.
Wenn Sie also dieses Modul aus einem initramfs laden wollen, darf der Teil des initramfs vor dem Laden
dieses Moduls nur aus kompilierten Binärdateien bestehen. Die meisten Systeme werden nicht booten,
wenn Sie hier M oder N angeben. Wenn Sie unsicher sind, sagen Sie Y.
\english{ELF core dump files describe each memory mapping of the crashed process, and can contain or omit the memory contents of each one.
The contents of an unmodified text mapping are omitted by default.\\
For an unmodified text mapping of an ELF object, including just the first page of the file in a core dump makes it possible to
identify the build ID bits in the file, without paying the i/o cost and disk space to dump all the text.
However, versions of GDB before 6.7 are confused by ELF core dump files in this format.\\
The core dump behavior can be controlled per process using the /proc/PID/coredump\_filter pseudo-file; this setting is inherited.
See Documentation/filesystems/proc.rst for details.\\
This config option changes the default setting of coredump\_filter seen at boot time.
If unsure, say Y.}

\subsection{Kernel support for MISC binaries}
CONFIG\_BINFMT\_MISC [=y] \textbf{[Y]}\\
Wenn Sie hier Y sagen, wird es möglich sein, Wrapper-gesteuerte Binärformate in den Kernel einzubinden.
Dies ist vor allem dann sinnvoll, wenn Sie Programme verwenden, die einen Interpreter benötigen, wie
Java, Python, .NET oder Emacs-Lisp. Es ist auch nützlich, wenn Sie häufig DOS-Programme unter dem
Linux-DOS-Emulator DOSEMU ausführen (lesen Sie das DOSEMU-HOWTO, verfügbar unter
\url{http://www.tldp.org/docs.html#howto}). Sobald Sie eine solche Binärklasse beim Kernel registriert
haben, können Sie eines dieser Programme einfach starten, indem Sie seinen Namen an einer
Shell-Eingabeaufforderung eingeben; Linux wird es automatisch an den richtigen Interpreter weiterleiten.
Sie können auch andere nette Dinge tun.\\
Lesen Sie die Datei $<$file:Documentation/admin-guide/binfmt-misc.rst$>$,
um zu erfahren, wie Sie diese Funktion nutzen können,
$<$file:Documentation/admin-guide/java.rst$>$, um zu erfahren, wie Sie Java-Unterstützung einbinden
können, und $<$file:Documentation/admin-guide/mono.rst$>$, um zu erfahren, wie Sie Mono-basierte
.NET-Unterstützung einbinden können.
Um binfmt\_misc zu verwenden, müssen Sie es mounten:
\texttt{mount binfmt\_misc -t binfmt\_misc /proc/sys/fs/binfmt\_misc}
Sie können hier M für Modulunterstützung sagen und später das Modul laden, wenn Sie es brauchen;
das Modul heißt \texttt{binfmt\_misc}. Wenn Sie nicht wissen, was Sie an dieser Stelle antworten sollen,
sagen Sie Y.
\english{If you say Y here, it will be possible to plug wrapper-driven binary formats into the kernel.
You will like this especially when you use programs that need an interpreter to run like Java, Python, .NET or Emacs-Lisp.
It's also useful if you often run DOS executables under the Linux DOS emulator DOSEMU (read the DOSEMU-HOWTO, available from
\url{http://www.tldp.org/docs.html\#howto}).
Once you have registered such a binary class with the kernel, you can start one of those programs simply by typing in its name at a shell prompt;
Linux will automatically feed it to the correct interpreter.\\
You can do other nice things, too. Read the file $<$file:Documentation/admin-guide/binfmt-misc.rst$>$ to learn how to use this feature,
$<$file:Documentation/admin-guide/java.rst$>$ for information about how to include Java support.
and $<$file:Documentation/admin-guide/mono.rst$>$ for information about how to include Mono-based .NET support.\\
To use binfmt\_misc, you will need to mount it:\\
\texttt{mount binfmt\_misc -t binfmt\_misc /proc/sys/fs/binfmt\_misc}\\
You may say M here for module support and later load the module when you have use for it; the module is called \texttt{binfmt\_misc}.
If you don't know what to answer at this point, say Y.}
