Probleme mit write() und Firewall/Antivirus
-
Hallo,
ich neige dazu, mich in den low level Bereich zu begeben. Dabei bin ich auf eine merkwürdige Sache gestoßen. Weiß vielleicht jemand wieso sich bei folgendem Code
meine Firewall bzw. mein Antivirenprogramm (ist ein Programm für alles, ZoneAlarm Security Suite) meldet und die Ausfürhung verhindert?#include <fcntl.h> #include <iostream.h> int main(int argc,char *argv[]) { int filedeskriptor = open("Test.txt",O_RDWR); char c[1] = {65}; write(1,c,1); }Ich weiß dass ich die Variable "filedeskriptor" beim write() gar nicht benutze und stattdessen in die Standardausgabe schreibe.
Seltsamerweise funktionieren folgende Codestücke problemlos:Es fehlt hier nur das "#include <iostream.h>", sonst ist es der selbe Code.
#include <fcntl.h> int main(int argc,char *argv[]) { int filedeskriptor = open("Test.txt",O_RDWR); char c[1] = {65}; write(1,c,1); }Hier fehlt die Zeile mit dem filedeskriptor, funktioniert auch.
#include <fcntl.h> int main(int argc,char *argv[]) { char c[1] = {65}; write(1,c,1); }Und wenn ich ein "cout" einschiebe, geht's auch:
#include <fcntl.h> #include <iostream.h> int main(int argc,char *argv[]) { int filedeskriptor = open("Test.txt",O_RDWR); cout << "So geht's auch...\n"; char c[1] = {65}; write(1,c,1); }Ich kann mir keinen Reim darauf machen. Es muss doch möglich sein dass ich mit einen Filedeskriptor besorge und dann gleich danach auf die Standardausgabe etwas schreibe... wenn ich mein ZoneAlarm ausschalte kommt ganz normal die erwartete Ausgabe, ohne Probleme...
Weiß jemand was da vor sich geht und ZoneAlarm mein Programm für einen Virus hält?
Danke!
-
Hi,
gibt nur eine logische Erklärung, daß in der zugelinkten iostream ein Pattern erkannt wird, entweder weil ein Virus in der AV- DB mit dem gleichen Compiler gebastelt wurde und der AV- Hersteller das fälschlicherweise als Vir. klassifiziert hat oder die Heuristische Suche "danebenhaut". Auch das Behavorial Alerting kann zuschlagen, falls iostream im Initialisierungsteil was Überraschendes tut.
Abhilfe: Ausnahmen definieren oder falls bei Deiner Suite nicht möglich: Pack' Deine ganze Entwicklungsumgebung in eine virtuelle Maschine (z.B. VMWare oder XEN), dann sollte der Spuk beendet sein.

-
Moment: Du machst eine Datei auf. Die hat einen Descriptor.
Dann schreibst Du mit write() auf den Descriptor 1. Wie soll
das funktionieren ?Wenn, dann :
int main(int argc,char *argv[]) { int filedeskriptor = open("Test.txt",O_RDWR); char c[1] = {65}; write( [b]filedeskriptor[/b], c, 1); }
-
Scheppertreiber schrieb:
Moment: Du machst eine Datei auf. Die hat einen Descriptor.
Dann schreibst Du mit write() auf den Descriptor 1. Wie soll
das funktionieren ?Wenn, dann :
int main(int argc,char *argv[]) { int filedeskriptor = open("Test.txt",O_RDWR); char c[1] = {65}; write( [b]filedeskriptor[/b], c, 1); }Hast du überhaupt gelesen was der Threadersteller geschrieben hat? Er möchte in die "Datei" mit dem FD 1 schreiben, also die Standardausgabe.
-
stdout ist ein Filepointer - kein Descriptor.
schau Dir doch mal etwas genauer seinen Code an.
-
Scheppertreiber schrieb:
stdout ist ein Filepointer - kein Descriptor.
schau Dir doch mal etwas genauer seinen Code an.
write erwartet kein Filepointer, sondern einen Filedeskriptor.
-
Tippgeber schrieb:
Scheppertreiber schrieb:
stdout ist ein Filepointer - kein Descriptor.
schau Dir doch mal etwas genauer seinen Code an.
write erwartet kein Filepointer, sondern einen Filedeskriptor.
Eben. Genau. Soinetwa. Was den Virenscanner dabei stört bleibt sein Geheimnis.
-
Scheppertreiber schrieb:
Tippgeber schrieb:
Scheppertreiber schrieb:
stdout ist ein Filepointer - kein Descriptor.
schau Dir doch mal etwas genauer seinen Code an.
write erwartet kein Filepointer, sondern einen Filedeskriptor.
Eben. Genau. Soinetwa. Was den Virenscanner dabei stört bleibt sein Geheimnis.
Wenn du mir hier zumindest verstehe ich deinen ersten Einwand nicht

-
Darf ich mal ordnen:
Write erwartet einen Filedescriptor. "1" ist der Filedescriptor, der dem Filepointer stdout und damit der Standardausgabe zugeordnet ist (zumindest unter UNIX). Der OP will laut dem Eingangspost explizit mit write auf den Filedescriptor, der der Standardausgabe zugeordnet ist, schreiben.
-
Genau, ich will ganz normal auf die Standardausgabe schreiben mit der Systemfunktion write(). Aber das ob das lauf Virenprogramm in Ordnung ist, dürfte doch nicht davon abhängen, ob ich im Code ein paar Zeilen vor dem write() mir einenn Filedeskriptor (den ich dann gar nicht benutze) besorge oder nicht. Aber scheinbar doch.
Ich komme leider gar nicht dazu, mein Programm nach dem compilieren zu den Ausnahmen in meinem Antiviren-Programm hinzuzufügen. Vorher wird mein Programm ohne vorher zu fragen gelöscht.
Es ist nicht wirklich ein Problem für mich, ich kann es ja mit den entsprechenden includes umgehen. Aber es hat mir halt Fragen aufgeworfen.
Ich wollte nur ein Programm schreiben, welches ein bisschen mit Dateien und den Standard Ein- und Ausgaben arbeitet und dabei so wenig bzw. so kleine includes wie möglich zu benutzen.
Ich werd vielleicht mal beim Hersteller meines Antiviren-Programms nachfragen was das soll. Wenn ich etwas darüber herausgefunden habe, poste ich es hier.
Trotzdem danke an alle!
-
Schalt halt mal den Virenscanner ab und probiere ...
-
Hab ich schon, ohne den gehts. Es kommt die erwartete Ausgabe auf der Konsole. Weiß nicht was der Virenscanner da zu meckern hat. Ist doch so ein simples Programm...
-
Wechsel doch mal den Virenscannern, was ist das für einer ?
-
ZoneAlarm Security Suite. Ich bin mit dem Virenscanner eigentlich sehr zufrieden, aber jetzt läuft das Jahresabo sowieso aus, da könnte ich echt mal an einen Wechsel denken.
Aber es muss sich schon um eine sehr spezielle Sache handeln. es ist ja auch nichts schlimmes was sich nicht umgehen ließe, nur hat es mich halt neugierig gemacht was da vor sich geht.