Die besten Beispiele sind jene mit fasm, weil fasm keinen Linker verwendet, der die Komplexität der Windows-Programmierung durch eine weitere undurchsichtige Komplexitätsschicht verbirgt. Wenn Sie mit einem Programm zufrieden sind, das in ein GUI-Fenster schreibt, dann gibt es dafür im Beispielverzeichnis von fasm ein Beispiel.
Wenn Sie ein Konsolenprogramm wollen, das die Umleitung von Standard- und Standard-Out ermöglicht, ist dies ebenfalls möglich. Es gibt ein (helas sehr nicht-triviales) Beispielprogramm, das kein gui verwendet und ausschließlich mit der Konsole arbeitet, also fasm selbst. Dies kann auf das Wesentliche ausgedünnt werden. (Ich habe einen vierten Compiler geschrieben, der ein anderes Nicht-GUI-Beispiel ist, aber es ist auch nicht-trivial).
Ein solches Programm hat den folgenden Befehl, um einen richtigen ausführbaren Header zu generieren, der normalerweise von einem Linker ausgeführt wird.
FORMAT PE CONSOLE
Ein Abschnitt namens ‚.idata‘ enthält eine Tabelle, die Fenster während des Starts zu koppeln Namen von Funktionen zu den Runtimes Adressen hilft.Es enthält auch einen Verweis auf KERNEL.DLL, das Windows-Betriebssystem ist.
section '.idata' import data readable writeable
...
Ihr Programm wird im Abschnitt '.text'. Wenn Sie diesen Abschnitt schreibbar und ausführbar deklarieren, ist dies der einzige Abschnitt, den Sie benötigen.
section '.text' code executable readable writable
Sie können alle von Ihnen im Abschnitt .idata deklarierten Einrichtungen aufrufen. Für ein Konsolenprogramm benötigen Sie _GetStdHandle, um die Dateideskriptoren für Standard In und Standardout zu finden (mit symbolischen Namen wie STD_INPUT_HANDLE, die fasm in der Include-Datei win32a.inc findet). Sobald Sie die Dateideskriptoren haben, können Sie WriteFile und ReadFile tun. Alle Funktionen sind in der Dokumentation zu kernel32 beschrieben. Sie sind sich dessen wahrscheinlich bewusst oder Sie würden Assembler-Programmierung nicht versuchen.
Zusammenfassend: Es gibt eine Tabelle mit ASCI-Namen, die an das Windows-Betriebssystem gekoppelt sind. Während des Startvorgangs wird diese in eine Tabelle mit aufrufbaren Adressen umgewandelt, die Sie in Ihrem Programm verwenden.
Schauen Sie sich auch Steve Gibson's (kleine ist schön) (http://www.grc.com/smgassembly.htm) Windows Assembly Starter-Kit. – Jeremy
Nicht mit C-Bibliotheken ist eine etwas seltsame Einschränkung. Man muss eine Bibliothek innerhalb des MS-Windows-Betriebssystems aufrufen. wahrscheinlich kernel32.dll. Ob Microsoft das in c geschrieben hat oder Pascal scheint irrelevant zu sein. Ist gemeint, dass nur vom Betriebssystem bereitgestellte Funktionen aufgerufen werden können, was in einem Unix-System heißt Systemaufrufe? –
Mit C-Bibliotheken gehe ich davon aus, dass er oder sie meint, ohne eine C-Laufzeitbibliotheken wie die, die mit GCC oder MSVC kommen, zu verwenden. Natürlich muss er oder sie einige Standard-Windows-DLLs wie kernel32.dll verwenden. –