21. Juni 2010 Win32 Systemprogrammierung Marius Schäfer Ralf Erik Rossel 1 von 27 Hochschule RheinMain WS 2009/2010 Allgemeine Informatik (B.Sc.) Vertiefung Bachelor AI Windows32 Systemprogrammierung Eine Gegenüberstellung von Systemaufrufen unter Windows und Linux
27
Embed
Windows32 Systemprogrammierung - cs.hs-rm.deweber/sysprog/proj10/windows.pdf · 21. Juni 2010 Win32 Systemprogrammierung Marius Schäfer Ralf Erik Rossel 3 von 27 Grundlagen – Windows
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 1 von 27
Hochschule RheinMain WS 2009/2010Allgemeine Informatik (B.Sc.)Vertiefung Bachelor AI
Windows32 Systemprogrammierung
Eine Gegenüberstellung vonSystemaufrufen unterWindows und Linux
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 2 von 27
Grundlagen Windows APIDatentypen und NotationenRegistrierungsdatenbank
Dateioperationen Dateisysteme und -verwaltungBEISPIEL: cat
Prozesse und Threads SpeicherverwaltungSynchronisation
Dynamic Link LibrariesInterprozesskommunikation Named Pipes
MailslotsVerteilte Systeme WCF
SocketsQuellcodeportabilität
Inhalte
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 3 von 27
Abgeschlossene Bibliothek einheitlicher ProgrammierschnittstellenIn C/C++ und Assembler → kernel32.dll, user32.dll, gdi32.dll, …Funktionsverweise auf System Call Table im Betriebssystemkern
Typdefinitionen aus ISO C Standard (Plattformabhängig ! )
size_t vorzeichenloser Datentyp (mindestens 16 Bit)time_t Integer oder Float (32 oder 64 Bit)...
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 6 von 27
Grundlagen – Registrierungsdatenbank
Konfigurationsdatenbank von Windows seit NT
Einträge z.B. durch Installationsprogramme: Key-Value-PaareInstallationspfade, Programmkonfigurationen, ...
+ Zentraler Ablageort für Windows und -Programme+ Schnell durch direkte Speicherung der Datentypen– Problematisch, wenn „defekt“ oder ungepflegt → „uninstall“– Einstellungen nicht portabel bzw. rechnerübergreifend
Manipulationen von Hand durch das Dienstprogramm regedit.exe
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 7 von 27
Grundlagen – Registrierungsdatenbank
DHKEY_LOCAL_MACHINE\SOFTWARE
\Microsoft\Windows
\CurrentVersion\Run
Grob Vergleichbar:
Pseudodateisystem undKonfigurations-Skripte z.B. in /etc/init.d/
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 8 von 27
Prozesse:Virtueller Adressraum von 4 GB2 GB für System 2 GB für BenutzerMindestens ein Thread und dessen HeapThreads:Entsprechen POSIX Threads von LinuxEin Übergabeargument: (struct-)Zeigerpthread_create ↔ CreateThreadpthread_exit ↔ ExitThread
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 12 von 27
Prozesse und Threads
CreateProcess(...) → eigenener, neuer Prozess„Kind“prozess kann auch nach „Eltern“prozess aktiv seinKeine abgegrenzten Prozessgruppen (aber Signalgruppen)Handles und IDs
fork() → exakte Prozesskopie exec(...) → ÜberlagerungHierarchie: Ende des Elternprozesses beendet KindprozesseBegrenzte ProzessgruppenNur Prozess-IDs
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 13 von 27
Prozesse und Threads
BEISPIEL: Prozesserzeugung
Zusammenfassung von fork(...) und exec(...) in CreateProcess(...)
CreateProcess( NULL, // No module name (use command line) argv[1], // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE 0, // No creation flags NULL, // Use parent's environment block NULL, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure &pi ) // Pointer to PROCESS_INFORMATION structure
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 21 von 27
Interprozesskommunikation – Mailslots
Quelle: Hart - Windows System Programming
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 22 von 27
Verteilte Systeme – WCF
● Windows Communication Foundation● DCOM, Enterprise Services, MSMQ, WSE, Web-Services unter einer
einheitlichen API● .NET Framework ab Version 3.0● mögliche Sprachen: C++, C#, VB
● Address (Adresse) als URI (https://srv.domain.com/data/Service)● Binding (Anbindung) Festlegung von Protokoll und Kodierung● Contract (Vertrag) legt Schnittstellen und Methoden fest
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 23 von 27
Verteilte Systeme – Sockets
● Implementierung von IP unter BSD● durch die freie Lizenz nahezu 1:1 auch unter anderen Systemen
implementiert, auch unter Windows● Programmierung auf allen Systemen sehr ähnlich
● bind(),listen(), accept(), connect(), ...
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 24 von 27
Quellcodeportabilität
Vor allem von Serveranwendungen wird oft vorausgesetzt, dass diese zumindest auf Windows, UNIX und Linux laufen.
● ein Quellcode für alle Plattformen● per Makros und Build-Parameter werden Zielplattform, Prozessor-
architektur und 32- oder 64-Bit festgelegt● bedingte Compilierung (#IFDEF, …) sollte wenn möglich vermieden
werden● der Quellcode sollte mit verschiedenen Compilern kompatibel sein● Systemvoraussetzungen sollten auf allen Systemen ähnlich sein
Bis auf wenige Ausnahmen, sollte dies bei einem ordentlichen Code ohne GUI-Interface möglich sein.
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 25 von 27
Quellcodeportabilität
Strategien, um Portabilität zu erreichen
● Bibliotheken verwenden, die Open-Source sind oder von Microsoft bereitgestellt werden, welche POSIX-Funktionen unter Windows emulieren (häufig eingesetzt)
● Bibliotheken verwenden, die Windows-Funktionen unter UNIX/Linux emulieren (sehr rar)
● Industrie-Standard-Funktionen verwenden, die auch Microsoft direkt unterstützt (häufig)
● Makros anstelle von Bibliotheken verwenden, welche ein OS unter einem Anderen emuliert (auch rar)
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 26 von 27
Quellcodeportabilität
Windows Services for UNIX
● SFU: Microsoft Produkt, das ein UNIX-Subsystem (Interix) im NT-Userspace bereitstellt
● aktuelle Version: 3.5, kann von der Microsoft Webseite bezogen werden
● erfüllt theoretisch alle POSIX-Anforderungen● wird lt. Microsoft nicht weiter unterstützt
21. Juni 2010 Win32 SystemprogrammierungMarius Schäfer Ralf Erik Rossel 27 von 27
Microsoft Developer Network – Entwicklerbibliothek:http://msdn.microsoft.com/en-us/library/ee663297(v=VS.85).aspx
Literatur:Johnson M. Hart: Windows System Programming (4th. Edition)
Tutorial: Einführung in die Win32-Programmierung in Chttp://www.pronix.de/pronix-1023.html
Ergänzung der Vorgänger:http://www.cs.hs-rm.de/~weber/sysprog/sysp.html
Wikipedia-Artikel als Ausgangspunkt zur Stichwortsuche:http://en.wikipedia.org/wiki/Windows.h
System Call Table von Linux und Windows (x86 Architektur):http://lxr.linux.no/#linux+v2.6.34/arch/x86/kernel/syscall_table_32.Shttp://www.metasploit.com/users/opcode/syscalls.html