Ich habe ein (sehr) grundlegendes Verständnis von Assembly mit Systemaufrufen unter Linux (ich benutze den GNU-Assembler as
).
Unter Windows 7 verwende ich den MinGW (32-Bit) -Port der GCC-Compiler-Suite, um Assembler-Programme zu erstellen. Unter Linux verwende ich regelmäßig die C-Bibliothek für einige Betriebssystem-Interaktionen in meinen Assembler-Programmen, und auf meiner Windows-Plattform funktioniert das auch perfekt mit MinGW. Manchmal möchte ich jedoch Systemaufrufe auf niedriger Ebene verwenden - hauptsächlich, um meine ausführbaren Dateien so klein wie möglich zu halten. Unter Linux weiß ich, wie man das macht:
Ich benutze diese Systemaufrufe auch zum Lesen / Schreiben von Zeichen zum / vom Terminal (zum Schreiben von syscall mit 4 in EAX zum Beispiel). Ich habe mich gefragt, wie man das auf einer Windows NT-Plattform macht. Ist es möglich? Ich schaute auf diese Tabelle , aber ich verstehe die Namen der Systemaufrufe nicht wirklich. Jede Hilfe ist willkommen.
Der Nt*
-Satz von Funktionen ist aus gutem Grund undokumentiert: Er ist intern in Windows und wechselt zwischen den Versionen, was bedeutet, dass Programme, die direkt darauf abzielen, ein hohes Risiko haben, zwischen Windows-Versionen zu brechen.
Wirklich, es gibt keinen großen Overhead bei der Ausrichtung auf öffentliche, dokumentierte Funktionen, und Sie erhalten Microsofts Garantie, dass Ihr Programm mit zukünftigen Versionen von Windows funktioniert, vorausgesetzt, Sie verwenden die API korrekt.
Aus diesem Grund werde ich Ihnen nicht die Antwort geben, die Sie wollen. Ich rate Ihnen dringend, die öffentliche Konsolen-API zu verwenden: Ссылка
Es scheint, dass meine Antwort ziemlich kontrovers ist (14, 9 Stimmen)! Ab Ende März 2017 hat diese Antwort 4 Upvotes, aber 6 Downvotes. Ich werde meine Position verteidigen, indem ich sage, dass das OP nicht klar gemacht hat, dass dies für Experimente oder Spaß ist, tatsächlich schrieb er:
Manchmal möchte ich jedoch Systemaufrufe auf niedriger Ebene verwenden - meistens, um meine ausführbaren Dateien so klein wie möglich zu halten.
... Ich halte diese Argumentationskette für problematisch und möchte nicht als Ermöglicher für diese Art von Entwicklungspraktiken fungieren, zumal es keinen praktischen Nutzen für die Verwendung von syscalls für Konsolenaufgaben gibt. Ist es wirklich richtig, mich dafür zu verurteilen, dass ich diese Frage nicht direkt beantworte, während meine Antworten auf "SQL by concatenation" -Fragen dem OP nicht geben, was sie wollen, aber sagen, dass sie Parametrisierung verwenden und ziemlich stark upvoted?
Wenn jemand wissen möchte, wie man Low-Level-Syscalls in Windows verwendet, dann posten Sie bitte eine neue Frage, passend eingerahmt, und ich werde es gerne beantworten.