Home

Nähere Bekanntschaft mit dem MASM32-SDK

PROC, ENDP, PROT,
INVOKE und APIs

MASM32 - Infoseite

MASM32-SDK (Windows Konsolapplikationen):
NIX.exe: ein Programm, das nichts tut

Die Idee, ein Programm mit der Aufgabe „mache nichts” zu schreiben, verdanke ich meinem Laptop HP 6930p. Gelegentlich meldete er, dass die CPU nicht schneller getaktet werden könne, weil das von HP mitgelieferte Netzteil (HP nennt es „SMART AC Adapter”) zu schwach sei. Stöbern im WWW ergab, dass nicht nur mein Laptop von diesem Problem betroffen war. Als Problemlösung empfahl HP u.a., das die Meldung auslösende Überwachungsprogramm zu löschen.

Besser erscheint mir die Umgehung, das zu löschende Programm durch ein wirkungsloses Programm zu ersetzen. Nehmen wir an, das zu löschende Programm heißt hugo.exe. Dann kann man wie folgt vorgehen:

  • hugo.exe wird umbenannt in hugoexe.alt,
  • NIX.exe wird in das Verzeichnis kopiert, in dem hugoexe.alt steht, und
  • das dorthin kopierte NIX.exe wird in hugo.exe umbenannt.

Bei meiner Installation handelt es sich um das umzubenennende Programm

C:\Program Files (x86)\Hewlett-Packard\Shared\HpqToaster.exe

Auf den Programmnamen muss man erst einmal kommen....

Als weiteres so zu behandelndes Programm ist mir das Programm gup.exe unterhalb des im Zielverzeichnis des Editors notepad++ unter notepad++/updater/ aufgefallen. Es bewirkte nach einer Wartezeit von jeweils zwei Wochen einmal täglich eine Popup-Meldung beim Aufruf von notepad++. Früher ließ sich der Update von notepad++ abschalten. Das wurde aber so geändert, dass sich der mich nervende Hinweis auf anstehende Updates nicht mehr abschalten ließ.


Das mit dem masm32 erstellte Programm NIX.exe ist 1536 Bytes groß. Wirkungsgleiche .EXE-Programme in FreeBASIC oder in C sind um ein vielfaches größer.

Zum Assemblieren und Linken bietet sich die Stapelverarbeitungsdatei make32.bat-Datei an:

    @echo Aufruf: make32.bat file (Quellprogrammname ohne .asm)
    if exist "%1.obj" del "%1.obj"
    if exist "%1.exe" del "%1.exe"

    \masm32\bin\ml /c /coff "%1.asm"
    if errorlevel 1 goto errasm

    \masm32\bin\PoLink /SUBSYSTEM:CONSOLE "%1.obj"
    if errorlevel 1 goto errlink
    dir "%1.*"
    goto TheEnd

  :errlink
    echo _
    echo Link error
    goto TheEnd

  :errasm
    echo _
    echo Assembly Error
    goto TheEnd

  :TheEnd
  
Für den eigenen Gebrauch müssen die Pfadangaben entsprechend angepasst werden. Die Stapelverarbeitungsdatei muss im gleichen Verzeichnis stehen, wie das Quellprogramm! Gestartet wird die Stapelverabeitungsdatei mit Eingabe von „make32 nix”.
Das Quellprogramm
Hinweise dazu stehen unterhalb des Quellprogrammtextes.
.586
.MODEL flat,stdcall
OPTION casemap:none

include \masm32\include\windows.inc     ; always first
include \masm32\macros\macros.asm       ; MASM support macros

; -----------------------------------------------------------------
; include files that have MASM format prototypes for function calls
; -----------------------------------------------------------------
include \masm32\include\masm32.inc
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc

; ------------------------------------------------
; Library files that have definitions for function
; exports and tested reliable prebuilt code.
; ------------------------------------------------
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.CODE
start:
;   print "Nix ist was",13,10
    exit
end start
Hinweise zum Quellprogramm
Hier wird auf die Nutzung der Datei masm32rt.inc verzichtet. Statt dessen wird eine kleine Anzahl von Include- und includelib-Dateien eingebunden. Jedoch werden fast alle Zeilen mit include und includelib bei diesem Programm nicht benötigt. Da deren Löschung keine Auswirkung auf die Länge des ausführbaren Programms hat, habe ich sie nicht gelöscht.

Die Zeile

print "Nix ist was",13,10
ist eine Testhilfe. Sie macht sichtbar, dass das Programm ausgeführt wurde. In der endgültigen Version ist sie auskommentiert, so dass die Ausführung von NIX.exe keinerlei sichtbare Spuren hinterlässt.
Letztes Upload: 20.02.2019 um 06:12:19