Universität Bielefeld - Technische Fakultät - Rechnerbetriebsgruppe

Literaturübersicht


Von den meisten relevanten Dokumenten, die im PostScript- oder PDF-Format vorliegen, existieren lokale Kopien in /vol/semadapt/share/literatur/, um die Betrachtung mit GhostView oder dem Adobe Acrobat Reader einfacher zu gestalten.

Eine guten Überblick über den Komplex portable Programmierung, Design und Fehlersuche bietet Brian W. Kernighan, Rob Pike: The Practice of Programming.

Grundlagen: Versionsmanagement und Portabilität

Moderne Verfahren des verteilten Versionsmanagements

Don Bolinger, Tan Bronson: Applying SCCS and RCS bietet eine Einführung in das Versionsmanagement, stellt SCCS und RCS im Detail vor und beschreibt ein komfortableres System (TCCS), das auf den beiden anderen aufsetzt.

Für viele OpenSource-Projekte wird CVS eingesetzt. Das Paper Brian Berliner: CVS II: Parallelizing Software Development beschreibt die noch heute eingesetzte Implementierung dieses Modells und C und stellt immer noch die beste Übersicht über das zugrundeliegende Konzept dar. Karl Fogel: Open Source Development with CVS liefert eine ausführliche Einführung in die Benutzung von CVS.

Das PRCS-System könnte sich zu einer Alternative zu CVS entwickeln, obwohl es zur Zeit noch nicht das verteilte Versionsmanagement unterstützt. Auf jeden Fall zeigt der Autor zahlreiche Schwächen von CVS auf. Josh McDonald, Paul N. Hilfinger, Luigi Semensato: PRCS: The Project Revision Control System gibt einen Überblick.

BitKeeper unterstützt anders als CVS beliebige Kombinationen von lokalen und zentralen Sourcecode-Repositories. Einen Einstieg in die Funktionalität gibt Details of operation.

Software-Portabilität: Probleme und drei Lösungsansätze

Gary V. Vaughan, Ben Elliston, Tom Tromey, Ian Lance Taylor: GNU Autoconf, Automake, and Libtool GNU Autoconf Erez Zadok: Autoconfiscating Amd: Automatic Software Configuration of the Berkeley Automounter Erez Zadok: Overhauling Amd for the '00s GNU Libtool Raphael Manfredi's metaconfig/dist 3.0

Statische Analyse

Statische Checks mit Annotationen: LClint

LCLint-Homepage David Evans, Annotation-Assisted Lightweight Static Checking David Evans: Static Detection of Dynamic Memory Errors David Evans, John Guttag, Jim Horning, Yang Meng Tan: LCLint: A Tool for Using Specifications to Check Code

Meta-level Compilation

http://www.stanford.edu/~engler/mc-osdi.ps

Unterstützung von Security-Audits: ITS4

ITS4 John Viega, J. T. Bloch, Tadayoshi Kohno, Gary McGraw: ITS4: A Static Vulnerability Scanner for C and C++ Code David Wagner, Drew Dean: Intrusion Detection via Static Analysis David Wagner, Jeffrey S. Foster, Eric A. Brewer, Alexander Aiken: A First Step Towards Automated Detection of Buffer Overrun Vulnerabilities

IPv6: Einführung und der IPv6 Socket Scrubber

IPng-Arbeitsgruppe der IETF IPv6 Forum Craig Metz, Protocol Independence Using the Sockets API Solaris IPv6 Porting Networking Applications to the IPv6 APIs IPv6 codecamp

Grundlagen 2: Betriebssystem-Unterstützung

Programmausführung und Dynamisches Linken

Richard McDougall, Jim Mauro, Solaris Internals John R. Levine, Linkers and Loaders Robert A. Gingell, Meng Lee, Xuong T. Dang, Mary S. Weeks, Shared Libraries in SunOS http://www.cs.brown.edu/courses/cs167/1998/lectures/linkload.pdf

Betriebssystem-Unterstützung für Ablaufkontrolle und Debugging

Dieser Vortrag soll die Debugging-Interfaces diverser Unix-Betriebssysteme beleuchten. Einen Einstieg und Vergleich diverser Varianten gibt David A. Wagner, Janus: an Approach for Confinement of Untrusted Applications, insbesondere Abschnitt 4, OS support for Janus.

Wichert Akkerman's strace setzt diese Schnittstellen ein, um auf verschiedenen Betriebssystemen einen portablen Systemcall-Tracer zu implementieren.

Auf diversen System V Release 4-Derivaten (wie z.B. Sun's Solaris 2) steht dagegen truss(1) zur Verfügung, über das man sich in der zugehörigen Manpage informieren kann.

truss, die Solaris 2-proc-Tools (proc(1)) und diverse Debugger setzen auf procfs auf, das auf Solaris 2 in der proc(4)-Manpage beschrieben ist. Eine ausführliche Beschreibung der Implementierung gibt Abschnitt 8.6, Procfs - The Process Filesystem, in Richard McDougall, Jim Mauro, Solaris Internals.

Die bisher beschriebenen Möglichkeiten stehen, wenn auch mit verschiedenen Interfaces, auf den meisten Unix-Derivaten zur Verfügung. Allerdings ermöglichen sie einfach nur ein Verfolgen von Systemcalls. Dagegen gibt ab Solaris 8 das truss-Kommando mit der -u-Option die Möglichkeit, auch beliebige Funktionsaufrufe zu tracen. Das setzt die mächtigen Support-Interfaces des Runtime-Linkers ld.so.1(1) voraus, die im Solaris 8 Linker and Libraries Guide im Kapitel Support Interfaces beschrieben sind.

APIs, ABIs und Testwerkzeuge

Dieser Vortrag gibt einen Überblick über Application Programming Interfaces (APIs) und Application Binary Interfaces (ABIs). Nach einer Begriffsklärung und einer Einführung in das Problemfeld sollen die Standards vorgestellt werden, die für C-Programmierung auf Unix-Plattformen relevant sind sowie Testwerkzeuge, die die Einhaltung dieser Standards überprüfen können.

Neben den diversen Versionen des C-Standards sind die POSIX.1-Standards des IEEE, die System V Interface Definition (SVID), die Single Unix Specification der Open Group und deren gemeinsamer Nachfolger, der von der Austin Common Standards Revision Group entwickelt wird, zu nennen.

ABI-Standards werden entweder ebenfalls von Hersteller-Konsortien festgelegt, wie im Fall des System V Application Binary Interface und deren diversen Processor Supplements oder der SPARC Compliance Definition (SCD), oder — dann meist ohne eine solche formale Spezifikation — von einzelnen Herstellern.

Gerade für Solaris existieren zahlreiche Werkzeuge, die es ermöglichen, die Einhaltung des Solaris-ABI zu überprüfen. Viele davon setzen besondere Möglichkeiten des Runtime-Linkers voraus, die sehr flexibel eingesetzt werden können. Timothy W. Curry, Profiling and Tracing Dynamic Library Usage Via Interposition stellt diese Technik vor. Die Überprüfung von Binaries wird unterstützt durch besondere Versionierungs-Informationen, die in Shared Libraries abgelegt werden. David J. Brown, Karl Runge, Library Interface Versioning in Solaris and Linux gibt einen guten Überblick.

Laufzeit-Analyse

Quellcode-Instrumentierung: Insure++

Insure++ Insure++ Technical Papers Archive Insure++: An Automatic Runtime Error Detection Tool

Instrumentierung von Objectcode: Purify

Rational Purify for Unix Rational Purify for UNIX Whitepapers Reed Hastings, Bob Joyce, Purify: Fast Detection of Memory Leaks and Access Errors Todd M. Austin, Scott E. Breach, Gurindar S. Sohi, Efficient Detection of All Pointer and Array Access Errors (extended version)

Flexible Objectcode-Instrumentierung: Aprobe und Dyninst

Aprobe Aprobe: A Unique Software Development and Testing Tool Oliver Cole, White-Box Testing An Application Program Interface (API) for Runtime Code Generation Bryan Buck, Jeffrey K. Hollingsworth, An API for Runtime Code Patching Dynamic Storage Allocation and Memory Management Information Repository Debugging Tools for Dynamic Storage Allocation and Memory Management

Debugger

Algorithmic and Automatic Debugging Home Page GDB: The GNU Debugger DDD: Data Display Debugger Andreas Zeller, Visual Debugging with DDD Insight home page cdb, A Machine-Independent Debugger

Duel: eine Very High Level-Sprache zum Debugging

Duel Michael Golan, David R. Hanson, DUEL - A Very High-Level Debugging Language

Weitere Werkzeuge

Erzeugung von Makefiles: Automake und Imake

GNU Automake http://www.primate.wisc.edu/software/imake-stuff/ Paul DuBois: Software Portability with imake http://www.primate.wisc.edu/software/imake-book/ The Source-Navigator IDE
Rainer Orth, 2001-04-06, 2001-06-11