Forum: PC-Programmierung Go-Crosscompile: Executable läuft nicht unter Win11


von Ein T. (ein_typ)


Lesenswert?

Hallo Ihr Lieben,

für einen Freund habe ich ein kleines Golang-Programm erstellt, das bei 
ihm unter Windows laufen soll -- allerdings habe ich kein Windows und 
entwickele unter Linux. An sich sollte das jedoch trotzdem kein Problem 
darstellen, denn Go kann laut seiner Dokumentation crosskompilieren. Die 
Zielplattform und die Zielarchitektur sollen dabei dann über die 
Umgebungsvariablen GOARCH und GOOS eingestellt werden können. (Mit dem 
RasPi klappt das auch prima.)

Also habe ich mit
1
GOARCH=amd64 GOOS=windows CGO_ENABLED=0 go build -tags netgo,usergo,osusergo \ -ldflags="-s -w -extldflags=-static -buildid=" -gcflags=all="-l -B -C" \
2
-trimpath -o $(TARGET).exe

ein statisch gelinktes Executable "aa.exe" gebaut, das laut Linux' 
file(1) ein "PE32+ executable for MS Windows 6.01 (console), x86-64 
(stripped to external PDB), 7 sections" ist. Laut Internet sollte dies 
seit Windows 7 das korrekte Binärformat für Windows auf x86_64 sein.

Leider erhält mein Anwender bei dem Versuch, das Executable auszuführen, 
Fehlermeldungen, entweder "Diese App kann auf dem PC nicht ausgeführt 
werden. Wenden Sie sich an den Softwareherausgeber, um eine geeignete 
Version für Ihren PC zu finden." oder beim Versuch aus seiner 
Eingabeaufforderung eine Messagebox mit dem Titel "Nicht unterstützte 16 
Bit-Anwendung" und dem Text 'Das Programm bzw. das Feature 
"\??\C:\Users\username\aa.exe" kann aufgrund einer Inkompatibilität mit 
64 Bit-Versionen von Windows nicht gestartet bzw. ausgeführt werden. 
Wenden Siesich an den Softwarehersteller, [...]'.

Ich bin, um es vorsichtig zu sagen, verwirrt. Offensichtlich ist doch 
mein Executable im Format PE32+ (siehe oben), warum faselt Windows dabei 
etwas von 16 Bit? Außerdem habe ich irgendwo hier im Forum IIRC mal 
gelesen, daß auch moderne Windows-Versionen noch 16 Bit-Programme 
ausführen könnten? Gibt es eine eventuell Möglichkeit, bessere 
Fehlermeldungen zu erhalten? Und, achja: ist es normal, daß der Pfad in 
der Fehlermeldung mit "\??\" beginnt?

Wie dem auch sei: hat jemand entweder eine Idee, woran das Problem 
liegen könnte, oder, noch besser, vielleicht sogar einen 
Lösungsvorschlag?
von Udo K. (udok)


Lesenswert?

Fehlende DLL?  Zeig mal das Programm her, da kann ich mal schauen welche 
DLLs benötigt werden...
von Εrnst B. (ernst)


Lesenswert?

Ein T. schrieb:
> warum faselt Windows dabei
> etwas von 16 Bit?

Halbwissen:
Windows versucht den PE-Header zuerst als 64-Bit, dann 32-Bit, dann 
16-Bit zu lesen. Wenn die "16-Bit" Fehlermeldung kommt, sind die beiden 
vorherigen Versuche fehlgeschlagen.

Ein T. schrieb:
> ist es normal, daß der Pfad in
> der Fehlermeldung mit "\??\" beginnt?

Ja. Pfad im  NT-Namespace. Erlaubt z.B. die lästige Begrenzung auf 
Pfadlänge von 260 Zeichen zu umgehen.
Hat dein Freund es mit Unter-Unter-Unterordnern übertrieben, dass der 
gesamte Pfad so lang ist?

Ein T. schrieb:
> GOARCH=amd64 GOOS=windows CGO_ENABLED=0 go build -tags
> netgo,usergo,osusergo  -ldflags="-s -w -extldflags=-static -buildid="
> -gcflags=all="-l -B -C"
> -trimpath -o $(TARGET).exe

Versuch das mal ohne ldflags, gcflags, trimpath.

Wäre meine erste Vermutung, dass einer dieser Optimierungsschritte im 
Crosscompiler "zu Aggressiv" ist, und den EXE-Header beschädigt. "file" 
schaut ja nur grob nach Magic Numbers, und macht keine komplette 
Überprüfung vom Header.

Wenn's dann geht, die Flags sukkzessive wieder einsetzen.
von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


Lesenswert?

Es gibt drei Sperrmechanismen, die fremde oder selbsterzeugte EXE nicht 
ausführen lassen. Das sind Smart-Screen-Filter, Windows im S-Mode oder 
der Defender.
von Ein T. (ein_typ)


Lesenswert?

Udo K. schrieb:
> Fehlende DLL?  Zeig mal das Programm her, da kann ich mal schauen welche
> DLLs benötigt werden...

Danke für Deine Antwort, aber das kann ich ausschließen. Das Programm 
wird statisch kompiliert und lädt also keine dynamischen Bibliotheken.
von Ein T. (ein_typ)


Lesenswert?

Εrnst B. schrieb:
> Halbwissen:
> Windows versucht den PE-Header zuerst als 64-Bit, dann 32-Bit, dann
> 16-Bit zu lesen. Wenn die "16-Bit" Fehlermeldung kommt, sind die beiden
> vorherigen Versuche fehlgeschlagen.

Sowas hatte ich befürchtet... wie "schön", daß Windows nichts über seine 
fehlgeschlagenen Versuche mit den 64- und 32-Bit-Headern sagt. :-)

> Hat dein Freund es mit Unter-Unter-Unterordnern übertrieben, dass der
> gesamte Pfad so lang ist?

C:\Users\<username>\aa.exe -- und der Username ist fünf Zeichen lang, 
alles zusammen also 21 Zeichen.

> Versuch das mal ohne ldflags, gcflags, trimpath.

Gute Idee, das versuche ich mal.
von Ein T. (ein_typ)


Lesenswert?

Dieter D. schrieb:
> Es gibt drei Sperrmechanismen, die fremde oder selbsterzeugte EXE nicht
> ausführen lassen. Das sind Smart-Screen-Filter, Windows im S-Mode oder
> der Defender.

Aber Windows beklagt sich ja anscheinend über das Binärformat. Würde es 
denn nichts über Filter, Defender oder diesen S-Mode sagen, wenn es 
darin läge?
von Udo K. (udok)


Lesenswert?

Ein T. schrieb:
> Danke für Deine Antwort, aber das kann ich ausschließen. Das Programm
> wird statisch kompiliert und lädt also keine dynamischen Bibliotheken.

Optimist 😏
von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

Ein T. schrieb:
> Danke für Deine Antwort, aber das kann ich ausschließen. Das Programm
> wird statisch kompiliert und lädt also keine dynamischen Bibliotheken.
Du lädst in deinem Code vielleicht keine DLL, aber vielleicht braucht
ja GoLang intern irgendwelche DLLs.
Das würde aber obige Fehlermeldungen nicht erklären.
: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Ein T. schrieb:
> Würde es denn nichts über Filter, Defender oder diesen
> S-Mode sagen, wenn es darin läge?

Glaubst Du daran, daß Dieter konkrete Fragen beantworten kann?
von Frank D. (Firma: LAPD) (frank_s634)


Lesenswert?

Läufts denn bei dir unter Wine?
Mach mal
1
winedump -j import deine.exe

und schau was es an dlls braucht.
von Ein T. (ein_typ)


Lesenswert?

Heinz B. schrieb:
> Ein T. schrieb:
>> Danke für Deine Antwort, aber das kann ich ausschließen. Das Programm
>> wird statisch kompiliert und lädt also keine dynamischen Bibliotheken.
> Du lädst in deinem Code vielleicht keine DLL, aber vielleicht braucht
> ja GoLang intern irgendwelche DLLs.

ldd(1), objdump(1) und die anderen mir bekannten Werkzeuge sagen alle, 
das Programm sei nicht dynamisch gelinkt, peldd(1) nennt eine 
Abhängigkeit von einer kernel32.dll, die auf einem Windows doch 
sicherlich vorhanden und von dessen dynamischen Linker auffindbar sein 
sollte?!

Außerdem gehört es ja gerade zu den besonderen Alleinstellungsmerkmalen 
von Go bzw. seinem Compiler, statisch gelinkte Binaries erzeugen zu 
können.

> Das würde aber obige Fehlermeldungen nicht erklären.

Bezüglich der Fehlermeldungen von Windows kann und will ich nichts ein- 
und auch nichts ausschließen. Wirklich rein gar nichts. :-)
von Ein T. (ein_typ)


Lesenswert?

Harald K. schrieb:
> Ein T. schrieb:
>> Würde es denn nichts über Filter, Defender oder diesen
>> S-Mode sagen, wenn es darin läge?
>
> Glaubst Du daran, daß Dieter konkrete Fragen beantworten kann?

Die Hoffnung stirbt bekanntlich zuletzt. :-)
von Ein T. (ein_typ)


Angehängte Dateien:

Lesenswert?

Frank D. schrieb:
> Läufts denn bei dir unter Wine?
> Mach mal
>
1
winedump -j import deine.exe
>
> und schau was es an dlls braucht.

Danke für den Tipp, auch winedump(1) nennt lediglich eine Abhängigkeit 
von kernel32.dll -- nach meinem Verständnis dürfte dies die 
Schnittstelle zum Systemkernel sein, ähnlich linux-vdso.so.1 bei 
Linux-Executables, oder?

Die Ausgabe von winedump(1) habe ich angehängt, vielleicht kann ein 
klügerer Mensch als ich etwas darin erkennen, das mir verborgen bleibt.
von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

Ja, die Kernel32.dll, User32.dll und GDI32.dll lädt Windows beim Start 
schon
automatisch. Ich kenne mich zwar nicht in GoLang aUs, aber evtl. gibt es
in der IDE noch einen Schalter, den man zusätzlich noch anhaken muß.
von Ein T. (ein_typ)


Lesenswert?

Heinz B. schrieb:
> Ja, die Kernel32.dll, User32.dll und GDI32.dll lädt Windows beim Start
> schon automatisch. Ich kenne mich zwar nicht in GoLang aUs, aber evtl.
> gibt es in der IDE noch einen Schalter, den man zusätzlich noch
> anhaken muß.

Es gibt keine IDE, ich arbeite immer noch klassisch mit dem GNU Emacs, 
GNU make, dem Go-Compiler in Version 1.26.0 und natürlich der guten 
alten Bash-Shell. Ich bin faul -- was laut Larry Wall, dem wir Perl 
verdanken, aber zu den wichtigsten Kardinaltugenden von Entwicklern 
gehört. :-)
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Ein T. schrieb:

> Leider erhält mein Anwender bei dem Versuch, das Executable auszuführen,
> Fehlermeldungen, entweder "Diese App kann auf dem PC nicht ausgeführt
> werden. Wenden Sie sich an den Softwareherausgeber, um eine geeignete
> Version für Ihren PC zu finden." oder beim Versuch aus seiner
> Eingabeaufforderung eine Messagebox mit dem Titel "Nicht unterstützte 16
> Bit-Anwendung" und dem Text 'Das Programm bzw. das Feature
> "\??\C:\Users\username\aa.exe" kann aufgrund einer Inkompatibilität mit
> 64 Bit-Versionen von Windows nicht gestartet bzw. ausgeführt werden.
> Wenden Siesich an den Softwarehersteller, [...]'.

Der PE-Header ist definitiv ungültig! Poste das Programm doch einfach 
mal hier, dann kann ich dir sagen, wo's klemmt.

Beim Start von der Console gibt es dann einen Fallback-Mechanismus, der 
versucht, das Programm als DOS-Programm zu verwenden. Jede Exe enthalt 
nämlich auch noch einen DOS-Stub. Auf einer 32Bit-Version von Windows 
würde das klappen und der DOS-Stub ausgeführt werden, welcher dann aber 
auch bloß eine Fehlermeldung auf der Konsole ausgeben würde.
Bei einer 64Bit-Windows-Version existiert aber das DOS-Subsystem nicht 
mehr und so kann auch der Stub nicht gestartet werden. Es kommt dann 
halt die Fehlermeldung vom System.

> Wie dem auch sei: hat jemand entweder eine Idee, woran das Problem
> liegen könnte, oder, noch besser, vielleicht sogar einen
> Lösungsvorschlag?

Woran es liegt: s.o. Lösungsvorschlag: s.o.
von Rbx (rcx)


Lesenswert?

Ein T. schrieb:
> An sich sollte das jedoch trotzdem kein Problem
> darstellen, denn Go kann laut seiner Dokumentation crosskompilieren

Ja, du Schlauberger. Hast du dir mal genauer angesehen, welche 
Bibliotheken dein Programm nutzt? Du musst doch wenigstens ausschließen, 
nicht doch MinGw nutzen zu müssen. Die Haskell-Plattform-Entwickler 
waren auch so frei, ungefragt den Zielordner bei Auspacken zu überladen. 
Happy-Emacs-Noobs eben.
: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Ein „hello world“ probiert?

https://go.dev/wiki/WindowsCrossCompiling

Oliver
von Ein T. (ein_typ)


Angehängte Dateien:

Lesenswert?

Ob S. schrieb:
> Der PE-Header ist definitiv ungültig!

Woran machst Du das fest?

> Poste das Programm doch einfach
> mal hier, dann kann ich dir sagen, wo's klemmt.

Das gewünschte "Hello World" ist "helloworld.exe", das Programm 
"aa.exe", beide findest Du im Anhang.

> Bei einer 64Bit-Windows-Version existiert aber das DOS-Subsystem nicht
> mehr und so kann auch der Stub nicht gestartet werden. Es kommt dann
> halt die Fehlermeldung vom System.

Hmmm... das Programm "aa.exe" soll am Ende von FoxPro aufgerufen werden. 
Es war schon schwierig genug für mein Gemüt, zu erfahren, daß FoxPro 
wohl kein Konzept von stdin, stdout, stderr und popen(3) haben soll, 
jedenfalls keins bei dem FoxPro von std{out,err} eines aufgerufenen 
Programms lesen kann.

Also operiert das Programm mit Dateien, einer Logdatei und einer 
CSV-Datei, die FoxPro wohl einlesen können soll. In meinem Leichtsinn 
gehe ich einmal davon aus daß die Ausführung aus FoxPro jener in der 
"Eingabeaufforderung" ähneln sollte.
von Ein T. (ein_typ)


Lesenswert?

Rbx schrieb:
´> Ja, du Schlauberger. Hast du dir mal genauer angesehen, welche
> Bibliotheken dein Programm nutzt?

Ja. Steht im Thread.

> Du musst doch wenigstens ausschließen,
> nicht doch MinGw nutzen zu müssen.

Ja. Steht im Thread.

> Die Haskell-Plattform-Entwickler

...sind hier egal. Hier geht es um Go(lang). Steht sogar im Titel.

> Happy-Emacs-Noobs eben.

lol Na das sagt ja gerade der Richtige. Du kannst doch nichtmal 
zwischen Haskell und Golang unterscheiden oder auch nur den Thread 
verstehend lesen, bevor Du Dein wirres Gefasel abkippst. Trotzdem 
allerherzlichsten Dank für Deinen gewohnt "wertvollen" "Beitrag" "zum 
Thema", Scherzkeks. :-)
von Ein T. (ein_typ)


Lesenswert?

von Udo K. (udok)


Lesenswert?

Ein T. schrieb:
>> Der PE-Header ist definitiv ungültig!
>
> Woran machst Du das fest?

Die Header sind gültig.  Das helloworld.exe läuft durch und gibt "Hallo 
Wereld!" auf die Console aus.
Wie man es schafft ein einfaches HelloWorld.exe mit über 2.4 MByte zu 
schreiben möchte ich nicht wissen.

Das aa.exe crasht unmittelbar nach dem Aufruf:
1
[130]$ ./aa.exe
2
panic: runtime error: invalid memory address or nil pointer dereference
3
[signal 0xc0000005 code=0x0 addr=0x50 pc=0x1405be1be]
4
5
goroutine 20 [running]:
6
main.GetTitle(0x7ae3be8e690, 0x7ae3be90ac8, {0x1407b0e38, 0x4})
7
        /app/main.go:62 +0x11e
8
created by main.main in goroutine 1
9
        /app/main.go:48 +0x325
von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


Lesenswert?

Udo K. schrieb:
> crasht

Das passt. Die Sicherheitsfunktionen bei Win11 sind aktiv, wie es sein 
soll.
von Udo K. (udok)


Angehängte Dateien:

Lesenswert?

Im Bild die benötigten DLLs.
Die ext-ms-win-oobe-query-l1-1-0.dll wird zur Laufzeit geladen und nicht 
gefunden.  Keine Ahnung ob das schlimm ist.
von Udo K. (udok)


Lesenswert?

Dieter D. schrieb:
> Das passt. Die Sicherheitsfunktionen bei Win11 sind aktiv, wie es sein
> soll.

Blödsinn
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Udo K. schrieb:
> Dieter D. schrieb:
>> Das passt. Die Sicherheitsfunktionen bei Win11 sind aktiv, wie es sein
>> soll.
>
> Blödsinn

Ausnahmsweise scheinbar nicht. Die MS-Scan-Engine erkennt in aa.exe 
einen Trojaner, aber scheinbar fast als einzige. Dürfte also vermutlich 
ein false positive sein.

Etwas anders ist die Sachlage bei helloworld.exe. Lt. Virustotal 
erkennen hier ungefähr 1/3 der Scan-Engines Malware, MS auch wieder 
denselben Trojaner wie bei aa.exe.

Hier unter Win10 wurde helloworld.exe dann auch beim nächsten 
Systemstart stumpf gelöscht, aa.exe allerdings nicht.

Aber Win11 ist per default deutlich schärfer konfiguriert, also ist es 
sehr gut möglich, dass Dieter recht hat und der Kram wirklich geblockt 
wird.

Kann natürlich aber trotzdem in beiden Fällen letztlich nur false 
positive sein. Muss aber nicht. Wer sich sicher ist, kann ja dem 
Defender bzw. SmartScreen sagen, dass die Dinger nicht gefährlich sind 
und entsprechende Ausnahmen definieren.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Ein T. schrieb:

> Woran machst Du das fest?

Eigentlich am Verhalten. Aber das reichte hier offensichtlich nicht für 
eine zuverlässige Diagnose. Inzwischen konnte ich mir ja die Header 
ansehen und habe festgestellt: valide.
von Udo K. (udok)


Lesenswert?

Ob S. schrieb:
> Ausnahmsweise scheinbar nicht. Die MS-Scan-Engine erkennt in aa.exe
> einen Trojaner, aber scheinbar fast als einzige. Dürfte also vermutlich
> ein false positive sein.

Zeigt nur wie stumpfsinning der MS Defender ist.  Die haben aufgegeben.
Alles was nicht in einer White-List drinnen ist wird erst mal gesperrt.
Wenn sich dann 100 Leute aufregen wird das Programm freigegeben - ein 
Armutszeugnis.

Auf meinem PC läuft es aber.  Musst halt drei mal sagen "Beibehalten", 
"Ist sicher" und "ist ganz sicher sicher"...
von Oliver S. (oliverso)


Lesenswert?

Ob S. schrieb:
> Die MS-Scan-Engine erkennt in aa.exe
> einen Trojaner

So ganz völlig kommentarlos?

Oliver
von Rbx (rcx)


Lesenswert?

Ein T. schrieb:
> hat jemand entweder eine Idee, woran das Problem
> liegen könnte,

Sitzt vorm PC, aber mehr schreibe ich nicht mehr, schade eigentlich.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Oliver S. schrieb:
> Ob S. schrieb:
>> Die MS-Scan-Engine erkennt in aa.exe
>> einen Trojaner
>
> So ganz völlig kommentarlos?

Kommt auf die Konfiguration an. Wenn man die Benachrichtigungen 
deaktiviert hat, dann halt ggf. auch völlig kommentarlos.
von G. K. (zumsel)


Lesenswert?

Könnte es das hier sein?

Microsoft defender false positives of Go binaries on windows #1255
https://github.com/microsoft/go/issues/1255
von Oliver S. (oliverso)


Lesenswert?

Ob S. schrieb:
> Kommt auf die Konfiguration an. Wenn man die Benachrichtigungen
> deaktiviert hat, dann halt ggf. auch völlig kommentarlos.

Hm. Klingt komisch.

Oliver
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Oliver S. schrieb:
> Ob S. schrieb:
>> Kommt auf die Konfiguration an. Wenn man die Benachrichtigungen
>> deaktiviert hat, dann halt ggf. auch völlig kommentarlos.
>
> Hm. Klingt komisch.
>
> Oliver

Was soll daran komisch sein? Komisch (aber nicht lustig) wäre, wenn die 
Benachrichtigungen deaktiviert sind, aber trotzdem erfolgen. Oder auch 
das Gegenteil, wenn sie aktiviert sind, aber keine erfolgen.

Alles andere ist nicht komisch, sondern normal, erwartbar und logisch. 
Was hast du für ein Problem mit solchem Verhalten?
von Oliver S. (oliverso)


Lesenswert?

Ich gehe davon aus, daß der Defender so einen „Ich will die Datei nicht 
starten“-Alarm nicht im allgemeinen Benachrichtigungscenter bringt, 
sondern prominent als Dialog mitten auf den Bildschirm.

Aber ok, ist Microsoft…

Oliver
von Ein T. (ein_typ)


Lesenswert?

Rbx schrieb:
> Ein T. schrieb:
>> hat jemand entweder eine Idee, woran das Problem
>> liegen könnte,
>
> Sitzt vorm PC, aber mehr schreibe ich nicht mehr, schade eigentlich.

Natürlich sitzt Dein Problem vor Deinem PC, aber das ist hier nicht das 
Thema. Wenn Du nichts zum Thema des Threads beitragen kannst, was 
offensichtlich der Fall ist, halt Dich bitte raus.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

G. K. schrieb:
> Könnte es das hier sein?
>
> Microsoft defender false positives of Go binaries on windows #1255
> https://github.com/microsoft/go/issues/1255

Sicher. Da hat also wohl mal irgendein Arsch so ein Go-Executable als 
Trojan-Dropper missbraucht. Und das führt dank der primitiven 
Mustererkennung dazu, dass nun automatisch alle Go-Executables, die aus 
demselben Werkzeug stammen, mehr oder weniger verdächtig sind.

Die Virenscanner wissen halt nix von Go, die können nur das bissel 
Maschinencode analysieren, was da in den Executables enthalten ist.

Das Problem hat man bei allen interpretierenden Sprachen, der 
analysierbare Maschinencode für den Payload entsteht erst zur Laufzeit. 
Und auch bei allen Sprachen, die irgendeinen Zwischencode benutzen.

Deswegen sehe ich böse Zeiten anbrechen, wenn die ganzen Web-Frickler 
erst mal massiv mit WebAssembly rumsauen, um ihre Werbe- und 
Tracking-Scheiße zu verbreiten. Dagegen wird die heutige Bedrohung durch 
die JS-Seuche wie eine warme Sommerbrise im Vergleich zu einem Hurrican 
Kategorie 5 wirken.
von Hans W. (hanswieland)


Lesenswert?

Ob S. schrieb:
> Das Problem hat man bei allen interpretierenden Sprachen,

Go ist aber keine interpretierende Sprache.

> Und auch bei allen Sprachen, die irgendeinen Zwischencode benutzen.

Auch das ist Go nicht.
: Bearbeitet durch User
von Ein T. (ein_typ)


Lesenswert?

Ob S. schrieb:
> G. K. schrieb:
>> Könnte es das hier sein?
>>
>> Microsoft defender false positives of Go binaries on windows #1255
>> https://github.com/microsoft/go/issues/1255
>
> Sicher. Da hat also wohl mal irgendein Arsch so ein Go-Executable als
> Trojan-Dropper missbraucht. Und das führt dank der primitiven
> Mustererkennung dazu, dass nun automatisch alle Go-Executables, die aus
> demselben Werkzeug stammen, mehr oder weniger verdächtig sind.

Aber $Mistding beschwert sich doch nicht über irgendwelche Malware, 
sondern über das verd~mmte Binärformat?! Ist Windows wirklich SOOO 
schlecht?

> Deswegen sehe ich böse Zeiten anbrechen, wenn die ganzen Web-Frickler
> erst mal massiv mit WebAssembly rumsauen, um ihre Werbe- und
> Tracking-Scheiße zu verbreiten.

Für Microsoft wäre das vermutlich das Paradies: Programme können nur 
noch aus Microsofts Appstore installiert werden, und da werden sie nur 
angeboten, wenn der Hersteller freundlich zu Microsoft ist und ein 
kleines bisschen Kleingeld einwirft. Nächstes Jahr dann nur noch ein 
winzig kleines bisschen mehr. Sowas ist doch der feuchte Traum jedes 
Softwareherstellers: nicht nur an den eigenen Produkten verdienen, 
sondern auch an der Arbeit aller anderen schmarotzen. :-)
von Udo K. (udok)


Lesenswert?

Ein T. schrieb:
> Aber $Mistding beschwert sich doch nicht über irgendwelche Malware,
> sondern über das verd~mmte Binärformat?! Ist Windows wirklich SOOO
> schlecht?

Nein, tut es nicht.  Du hast einen SegFault, wahrscheinlich in der 
GetTitle Funktion.  Siehe weiter oben.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Hans W. schrieb:

> Ob S. schrieb:
>> Und auch bei allen Sprachen, die irgendeinen Zwischencode benutzen.
>
> Auch das ist Go nicht.

Offensichtlich doch. Wenn man das Executable auseinandernimmt, kann man 
das ganz deutlich sehen. In .text steckt nicht wirklich das, was man 
hier erwartet: ausführbarer Code für x86/64. Es ist vielmehr eine 
riesige Ansammlung von Sprungtabellen und ein paar gut verteilten 
Stücken echtem Code. Also exakt das, was man bei einer Sprache erwarten 
würde, die mit einem Zwischencode arbeitet.

Vergleichbar etwa mit dem, was man bei einer vorkompilierten 
Java-Anwendung oder .Net-CLI-Code zu sehen bekommt. Natürlich im Detail 
anders, aber letztlich dieselbe Soße.
von Hans W. (hanswieland)


Lesenswert?

Ob S. schrieb:
> Vergleichbar etwa mit dem, was man bei einer vorkompilierten
> Java-Anwendung oder .Net-CLI-Code zu sehen bekommt.

Nein. Du hast keine Ahnung, worüber du schreibst. Lasse es besser sein.
von Ein T. (ein_typ)


Lesenswert?

Udo K. schrieb:
> Ein T. schrieb:
>> Aber $Mistding beschwert sich doch nicht über irgendwelche Malware,
>> sondern über das verd~mmte Binärformat?! Ist Windows wirklich SOOO
>> schlecht?
>
> Nein, tut es nicht.  Du hast einen SegFault, wahrscheinlich in der
> GetTitle Funktion.  Siehe weiter oben.

Der Segfault trat auf, wenn für -titles ein leerer String übergeben 
wurde, das wird allerdings jetzt abgefangen. Aber die oben beschriebenen 
Fehlermeldungen sprechen doch nicht von einem Segfault, sondern davon, 
daß Windows das Format des Binary nicht erkannt, nicht verstanden, oder 
blockiert hat? Oder sieht so heute ein Segfault-Fehler unter Windows 
aus? Nicht wirklich, oder?

Andererseits ist das Programm bei Dir offensichtlich gestartet, sonst 
könnte es schließlich keinen Segfault auslösen und natürlich auch keine 
Debug-Infos zu Funktionen und Adressen ausgeben. Insofern würde ich es 
sehr interessant finden, herauszufinden, was Du dafür eingestellt hast, 
oder hast Du es nach Deinem Download einfach angestoßen und es lief? 
Hast Du den Virenscanner für die Ausführung ausgeschaltet, einen 
Kompatibilitätsmodus bemüht, oder etwas anderes getan, um die Ausführung 
zu ermöglichen? Welche Windows-Version nutzt Du, und auf was für einer 
CPU-Architektur?
von Hans (ths23)


Lesenswert?

Εrnst B. schrieb:
> Hat dein Freund es mit Unter-Unter-Unterordnern übertrieben, dass der
> gesamte Pfad so lang ist?
Was ist den an dem Pfad lang?
Ein T. schrieb:
> \??\C:\Users\username\aa.exe
Das ist das Homeverzeichnis des Users.

Dieter D. schrieb:
> Es gibt drei Sperrmechanismen, die fremde oder selbsterzeugte EXE nicht
> ausführen lassen. Das sind Smart-Screen-Filter, Windows im S-Mode oder
> der Defender.
Man kann auch in Windows Ausnahmen definieren, dann ist das Programm dem 
Defender so was von egal.
von Ein T. (ein_typ)


Lesenswert?

Ob S. schrieb:
> Hans W. schrieb:
>
>> Ob S. schrieb:
>>> Und auch bei allen Sprachen, die irgendeinen Zwischencode benutzen.
>>
>> Auch das ist Go nicht.
>
> Offensichtlich doch. Wenn man das Executable auseinandernimmt, kann man
> das ganz deutlich sehen. In .text steckt nicht wirklich das, was man
> hier erwartet: ausführbarer Code für x86/64. Es ist vielmehr eine
> riesige Ansammlung von Sprungtabellen und ein paar gut verteilten
> Stücken echtem Code. Also exakt das, was man bei einer Sprache erwarten
> würde, die mit einem Zwischencode arbeitet.

Der Compiler arbeitet mit einem Zwischencode (Plan9 Assembly) und 
übersetzt den dann in nativen Maschinencode. Aufgrund des 
Garbage-Collectors, Reflect, Struct Tags und allerlei Debug-Symbolen 
sieht das wild aus, ist aber dennoch nativer Maschinencode für x86_64, 
den "pedis -s .text aa.exe" auch ausgibt.

Golang-Binaries sind -- und das sagen die Entwickler auch selbst -- 
anders aufgebaut und organisiert als Binaries aus anderen Sprachen. Das 
verwirrt manche Malwarescanner so oft, daß es sogar in der FAQ steht: 
[1].

[1] https://go.dev/doc/faq#virus
von Ein T. (ein_typ)


Lesenswert?

Hans schrieb:
> Man kann auch in Windows Ausnahmen definieren, dann ist das Programm dem
> Defender so was von egal.

Könntest Du mir -- beziehungsweise meinem Anwender -- bitte kurz 
beschreiben, wie das geht, oder uns vielleicht einen Link zukommen 
lassen? Danke!
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Ein T. schrieb:

> Aber $Mistding beschwert sich doch nicht über irgendwelche Malware,
> sondern über das verd~mmte Binärformat?! Ist Windows wirklich /SOOO/
> schlecht?

Der Bin-Loader weiß einfach nix über des Kernel-Modul des Defender, was 
da reingrätscht. Sieht nur die Auswirkung in seiner Prozessumgebung.

> Für Microsoft wäre das vermutlich das Paradies

Leider eben nicht nur für MS. Siehe z.B. Android...
von Ein T. (ein_typ)


Lesenswert?

Ob S. schrieb:
> Ein T. schrieb:
>
>> Aber $Mistding beschwert sich doch nicht über irgendwelche Malware,
>> sondern über das verd~mmte Binärformat?! Ist Windows wirklich /SOOO/
>> schlecht?
>
> Der Bin-Loader weiß einfach nix über des Kernel-Modul des Defender, was
> da reingrätscht. Sieht nur die Auswirkung in seiner Prozessumgebung.

Würde dazu dann nicht wenigstens etwas in Windows' Logs stehen? Früher 
gab es da doch mal diese "Ereignisanzeige" oder so ähnlich, wie kommt 
man da unter Win11 mittlerweile heran, und wonach müßte man dort suchen?

>> Für Microsoft wäre das vermutlich das Paradies
>
> Leider eben nicht nur für MS. Siehe z.B. Android...

Google ist mit Android ja gerade erst auf dem Weg, Apple macht das seit 
sehr langer Zeit vor... :-(
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Ein T. schrieb:

> Der Compiler arbeitet mit einem Zwischencode (Plan9 Assembly) und
> übersetzt den dann in nativen Maschinencode.

Nunja, das ist dann doch etwas Euphemismus.

> Aufgrund des
> Garbage-Collectors, Reflect, Struct Tags und allerlei Debug-Symbolen
> sieht das wild aus, ist aber dennoch nativer Maschinencode für x86_64,
> den "pedis -s .text aa.exe" auch ausgibt.

Ja, rein formal ist es gültiger Maschinencode. Aber einer, dem die 
Abstammung von einem Zwischencode nur allzu deutlich anzusehen ist. 
Sprich: deutlich suboptimal und natürlich verwirrend für alles, was ihn 
analysieren soll. Jedenfalls, so lange es keine Ahnung von dem 
Zwischencode hat.

> Golang-Binaries sind -- und das sagen die Entwickler auch selbst --
> anders aufgebaut und organisiert als Binaries aus anderen Sprachen.

Und warum ist das wohl so...
von Hans (ths23)


Lesenswert?

Ein T. schrieb:
> Könntest Du mir -- beziehungsweise meinem Anwender -- bitte kurz
> beschreiben, wie das geht, oder uns vielleicht einen Link zukommen
> lassen? Danke!
Reicht dieser Link : 
https://www.computerbild.de/artikel/cb-Tipps-Windows-Windows-Defender-Ausnahme-hinzufuegen-31494057.html
von Harald K. (kirnbichler)


Lesenswert?

Ein T. schrieb:
> Früher gab es da doch mal diese "Ereignisanzeige" oder so ähnlich,
> wie kommt man da unter Win11 mittlerweile heran

Schon immer:

eventvwr.exe aufrufen

Kann man entweder über die beschissene Suchscheiße aufrufen, die die 
anstelle eines Startmenüs haben, oder aus einem Kommandozeilenfenster 
heraus.
von Udo K. (udok)


Lesenswert?

Ein T. schrieb:
> Debug-Infos zu Funktionen und Adressen ausgeben. Insofern würde ich es
> sehr interessant finden, herauszufinden, was Du dafür eingestellt hast,
> oder hast Du es nach Deinem Download einfach angestoßen und es lief?
> Hast Du den Virenscanner für die Ausführung ausgeschaltet, einen
> Kompatibilitätsmodus bemüht, oder etwas anderes getan, um die Ausführung
> zu ermöglichen? Welche Windows-Version nutzt Du, und auf was für einer
> CPU-Architektur?

Windows 11, x64.  Ich habe das Programm in einem Ordner ausgeführt mit 
einer Ausnahmeregel für den Defender.
Vorher musst du das Programm runterladen, ein zip wäre einfacher.  Die 
exe wird sonst markiert und als nicht sicher eingestuft.
von Rbx (rcx)


Lesenswert?

Ein T. schrieb:
> Wenn Du nichts zum Thema des Threads beitragen kannst, was
> offensichtlich der Fall ist, halt Dich bitte raus.

Du hast doch angefangen, herumzustänkern, nicht ich. Und wenn dir nicht 
passt, was ich hier schreibe, dann ist das auch dein Problem. Und die 
Beleidigungen über Email habe ich auch noch nicht vergessen - du reitest 
ständig auf der Persönlichkeitsebene herum - dabei wäre etwas mehr 
Sachverstand und Respekt schon wünschenswert.
Letztlich: du hast lange Zeit gehabt, dich mal mit Windows-Grundlagen zu 
beschäftigen. Weil du dir aber viel dazu zu fein bist, nimmst du dir 
hier heraus, Leute anzuprangern - was letztendlich dein Ziel ist. Wenn 
man sich keine Mühe gibt, gewisse Sachzusammenhänge zu verstehen, weil 
man sich für etwas besseres hält, dann bleibt einem eben mur die 
Persönlichkeitsebene. Alles andere ist von dir hier nur vorgegaukelt.
von Ein T. (ein_typ)


Lesenswert?

Rbx schrieb:
> [wirren Unsinn]

Die 'Mutwillige Störung von Diskussionen ("trollen")' ist in diesem 
Forum gemäß seiner Nutzungsbedingungen nicht erlaubt: [1].

[1] https://www.mikrocontroller.net/user/conditions
von G. K. (zumsel)


Lesenswert?

Udo K. schrieb:

> Windows 11, x64.  Ich habe das Programm in einem Ordner ausgeführt mit
> einer Ausnahmeregel für den Defender.
> Vorher musst du das Programm runterladen, ein zip wäre einfacher.  Die
> exe wird sonst markiert und als nicht sicher eingestuft.

Ein Virenscanner der keine Archive scannt?
Wow, echte Profi-Software.
von Εrnst B. (ernst)


Lesenswert?

G. K. schrieb:
> Ein Virenscanner der keine Archive scannt?
> Wow, echte Profi-Software.

Es geht nicht um den Virenscanner, es geht um das "Mark-of-the-Web", was 
Windows unabhängig vom Virenscanner verwaltet.

(Metadaten-Tag in einem NTFS-Alternate Data Stream "Zone.Identifier" für 
die Datei)

Wird vom Webbrowser/Mail-Programm beim Download gesetzt, Windows "merkt" 
sich damit, dass die Datei aus dem Bösen Internet gekommen ist, und 
woher.

Ob die Markierung beim Extrahieren von ZIP-Dateien "vererbt" wird, hängt 
von der Software und deren Einstellungen ab.
Der Windows-eigene Entpacker vererbt das Flag, WinZIP und WinRAR in 
aktuellen Versionen auch, 7Zip nur wenn man das in den Settings explizit 
aktiviert.
von Udo K. (udok)


Lesenswert?

G. K. schrieb:
> Ein Virenscanner der keine Archive scannt?
> Wow, echte Profi-Software.

Heruntergeladene Dateien werden markiert (MOTW). Ist echt lässtig wenn 
du jedesmal beim Ausführen 3 Dialoge wegklicken musst.  7zip entfernt 
das.

Edit: Ernst war schneller
: Bearbeitet durch User
von G. K. (zumsel)


Lesenswert?

Εrnst B. schrieb:

> Wird vom Webbrowser/Mail-Programm beim Download gesetzt, Windows "merkt"
> sich damit, dass die Datei aus dem Bösen Internet gekommen ist, und
> woher.

Das funktioniert aber nur mit dem sehr guten Profi-Browser von M$?
Und beim entpacken von Archiven implementieren das alle Entpacker unter 
Windows?
von Harald K. (kirnbichler)


Lesenswert?

G. K. schrieb:
> Und beim entpacken von Archiven implementieren das alle Entpacker unter
> Windows?

Tun sie nicht alle, steht doch im Thread. Ist Lesen zu anstrengend?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.