Wenn 4eh Datei = 0b.tmp -> Ende
Moderatoren: crack, Krüsty, Marwin
-
Darthshoot
- Member
- Beiträge: 23
- Registriert: Dienstag 11. Juli 2006, 20:25
Wenn 4eh Datei = 0b.tmp -> Ende
Hallo!
Ich arbeite mit TASM 5.0.
Ganz kurz und knackig:
Es werden sehr dubiose .tmp Dateien in System32 kopiert.
Dagegen habe ich etwas gebaut, was ständig alle .tmp Dateien in System32 löscht. (Mit Assembler.) Allerdings darf 0b.tmp auf keinen Fall gelöscht werden, da diese Datei von einem Programm von mir gebraucht wird.
Das System arbeitet so: Es sucht sich immer eine andere .tmp Datei und löscht sie. Also mit 4eh + 4fh. Jetzt müsste irgendwie sobald das Programm eine Datei gefunden hat, es erst auf den Namen überprüfen. Wenn der Name 0b.tmp ist, dann soll er beenden. Wenn es nicht ist, soll er es löschen.
Also wie vergleiche ich nun eine gefundene Datei mit einem Namen?
Danke im Voraus.
MfG Darthshoot
Ich arbeite mit TASM 5.0.
Ganz kurz und knackig:
Es werden sehr dubiose .tmp Dateien in System32 kopiert.
Dagegen habe ich etwas gebaut, was ständig alle .tmp Dateien in System32 löscht. (Mit Assembler.) Allerdings darf 0b.tmp auf keinen Fall gelöscht werden, da diese Datei von einem Programm von mir gebraucht wird.
Das System arbeitet so: Es sucht sich immer eine andere .tmp Datei und löscht sie. Also mit 4eh + 4fh. Jetzt müsste irgendwie sobald das Programm eine Datei gefunden hat, es erst auf den Namen überprüfen. Wenn der Name 0b.tmp ist, dann soll er beenden. Wenn es nicht ist, soll er es löschen.
Also wie vergleiche ich nun eine gefundene Datei mit einem Namen?
Danke im Voraus.
MfG Darthshoot
Hallo! Hallo!
- crack
- Administrator
- Beiträge: 280
- Registriert: Dienstag 21. Dezember 2004, 15:02
- Wohnort: 53783 Eitorf
- Kontaktdaten:
Hi Darthshoot,
Nun, eigentlich sollten .tmp Dateien im Verzeichniss C:\TEMP landen ...
egal, was Du benötigst wäre ein Parser, schau dir mal dieses Beispielan, vielleicht kannst Du daraus was basteln.
Nun, eigentlich sollten .tmp Dateien im Verzeichniss C:\TEMP landen ...
egal, was Du benötigst wäre ein Parser, schau dir mal dieses Beispielan, vielleicht kannst Du daraus was basteln.
mit freundlichen grüssen,
with best regards,
crack
with best regards,
crack
-
Darthshoot
- Member
- Beiträge: 23
- Registriert: Dienstag 11. Juli 2006, 20:25
Hmm also mit anderen Worten, würde das hier:
Alle .tmp Dateien normal weiterlaufen, nur bei dem, was in DetecT drin steht, sucht er sich ein neues? P.S. NextFileB könnt ihr euch ja alle denken, dass dabei eine neue Datei gesucht wird.
Also aufjeden Fall sagt er, dass er nicht mit 2 es: zurecht kommt.
Was kann ich da tun? :/
Code: Alles auswählen
0bSearch:
mov si, offset DetecT
mov di, [bp+offset NDTA+1eh]
FirstByte:
es:cmpsb
je FirstByte
dec si
es:lodsb
cmp al, '@'
je NextFileBAlso aufjeden Fall sagt er, dass er nicht mit 2 es: zurecht kommt.
Was kann ich da tun? :/
Hallo! Hallo!
- crack
- Administrator
- Beiträge: 280
- Registriert: Dienstag 21. Dezember 2004, 15:02
- Wohnort: 53783 Eitorf
- Kontaktdaten:
Ja, bei den Stringbefeflen CMPSB und LODSB sind die Segmentpräfixe implimentiert:
LODSB lädt ein Byte von DS:SI in AL und inkrementiert SI um eins.
CMPSB Vergleicht zwei Strings Byteweise, und zwar DS:SI und ES:DI ...
Da die Segmentpräfixe in den Anweisungen implimentiert sind, soll-braucht- und darf man Sie im Code nicht nocheinmal verwenden ...
[Literaturempfehlung: Joachim Rohde; Assembler GE-PACKT ISBN 3-8266-0786-4]
LODSB lädt ein Byte von DS:SI in AL und inkrementiert SI um eins.
CMPSB Vergleicht zwei Strings Byteweise, und zwar DS:SI und ES:DI ...
Da die Segmentpräfixe in den Anweisungen implimentiert sind, soll-braucht- und darf man Sie im Code nicht nocheinmal verwenden ...
[Literaturempfehlung: Joachim Rohde; Assembler GE-PACKT ISBN 3-8266-0786-4]
mit freundlichen grüssen,
with best regards,
crack
with best regards,
crack
-
Darthshoot
- Member
- Beiträge: 23
- Registriert: Dienstag 11. Juli 2006, 20:25
-
Darthshoot
- Member
- Beiträge: 23
- Registriert: Dienstag 11. Juli 2006, 20:25
Code: Alles auswählen
NSearch:
mov si, offset DetecT
mov di, [bp+offset NDTA+1eh]
FirstByte:
cmpsb
je FirstByte
dec si
lodsb
cmp al, '@'
je NextFileB
DetecT db '0b.tmp@'Hallo! Hallo!
-
Darthshoot
- Member
- Beiträge: 23
- Registriert: Dienstag 11. Juli 2006, 20:25
Nein halt! Ich habs!
Es geht schon, aber irgendwo ist hier:
eine Endlosschleife eingebaut. Kannste mir noch kurz sagen wo? Das wäre klasse.
Code: Alles auswählen
NSearch:
mov si, [bp+offset DetecT]
mov di, [bp+offset NDTA+1eh]
FirstByte:
cmpsb
je FirstByte
dec si
lodsb
cmp al, '@'
je EndeHallo! Hallo!
- crack
- Administrator
- Beiträge: 280
- Registriert: Dienstag 21. Dezember 2004, 15:02
- Wohnort: 53783 Eitorf
- Kontaktdaten:
Oh, kannst Du evtl versuchsweies eine Ausgaberoutine 'zwischenschalten? evtl. müsstest Du das etwas umbauen ... oder mittels Debug . Trace einmal die Schleife 'zu Fuss' durchwandern, um festzustellen ob Di und Si weitergezählt werden, und in der richtigen Richtung zählen ... das 'Direction Flag' des 'Machine Status Register' stellt das ein: STD (Setdirection) lässt DI und SI inkrementieren (aufwärtszählen) und CLD (clear Direction) entsprechen abwärts, vielleich liegt das Problem da irgendwo ...
mit freundlichen grüssen,
with best regards,
crack
with best regards,
crack
-
Darthshoot
- Member
- Beiträge: 23
- Registriert: Dienstag 11. Juli 2006, 20:25
Oje :/ ich bin noch ein Newbie in Assembler. Kannst du mir das als Hilfe mal umbauen? Das ist noch alles Neuland für mich. Das wäre großeklasse 
Momentmal! Lässt sich das ganze nicht irgendwie loopen, sodass einfach eine bestimmte Anzahl an Bytes verglichen werden? (also 6 Bytes, wegen 0b.tmp) Dann würde man sich eigendlich das @Verfahren sparen und das Endlosschleifenproblem wäre ebenfalls gelößt. Allerdings gibt es da so ein Problem. Irgendwie bekomme ich keine Schleifen mehr hin seit neustem... Er loopt einfach unendlich. Ich stelle mir das ganze so vor:
Momentmal! Lässt sich das ganze nicht irgendwie loopen, sodass einfach eine bestimmte Anzahl an Bytes verglichen werden? (also 6 Bytes, wegen 0b.tmp) Dann würde man sich eigendlich das @Verfahren sparen und das Endlosschleifenproblem wäre ebenfalls gelößt. Allerdings gibt es da so ein Problem. Irgendwie bekomme ich keine Schleifen mehr hin seit neustem... Er loopt einfach unendlich. Ich stelle mir das ganze so vor:
Code: Alles auswählen
NSearch:
mov si, [bp+offset DetecT]
mov di, [bp+offset NDTA+1eh]
mov cx, 6
FirstByte:
cmpsb
jc NextFileB
loop FirstByte
Zuletzt geändert von Darthshoot am Donnerstag 13. Juli 2006, 15:53, insgesamt 2-mal geändert.
Hallo! Hallo!
-
Darthshoot
- Member
- Beiträge: 23
- Registriert: Dienstag 11. Juli 2006, 20:25
Code: Alles auswählen
NSearch:
mov si, [bp+offset DetecT]
mov di, [bp+offset NDTA+1eh]
mov cx, 6
FirstByte:
cmpsb
jc Routine
loop FirstByteHallo! Hallo!
-
Darthshoot
- Member
- Beiträge: 23
- Registriert: Dienstag 11. Juli 2006, 20:25
- crack
- Administrator
- Beiträge: 280
- Registriert: Dienstag 21. Dezember 2004, 15:02
- Wohnort: 53783 Eitorf
- Kontaktdaten:
Äh, was kommt unter 'loop FirstByte' ...
... weil diese Operation muss ja in zwei verschiedenen Aussprungbedingungen enden:
1. beide Strings sind bis zum Schluss 100% Identisch, und
2. beide String sind nicht 100% Identisch ...
... deswegen hatte ich auch damals dieses Konstrukt mit dem '@' am Ende entworfen das funktioniert ja so:
mit CMPSB werden die Strings verglichen, bis der erste Unterschied gefunden wurde, danach wurde geprüft ob dieser erste Unterschied das '@' Zeichen am Ende des Vergleichsstrings ist, wenn Ja, dann Aussprung zur 'Seite' 'Ok, der String wurde verifiziert' wenn Nein, sind beide Strings nicht identisch, und es wird zu einer anderen Programmstelle gesprungen ...
... weil diese Operation muss ja in zwei verschiedenen Aussprungbedingungen enden:
1. beide Strings sind bis zum Schluss 100% Identisch, und
2. beide String sind nicht 100% Identisch ...
... deswegen hatte ich auch damals dieses Konstrukt mit dem '@' am Ende entworfen das funktioniert ja so:
mit CMPSB werden die Strings verglichen, bis der erste Unterschied gefunden wurde, danach wurde geprüft ob dieser erste Unterschied das '@' Zeichen am Ende des Vergleichsstrings ist, wenn Ja, dann Aussprung zur 'Seite' 'Ok, der String wurde verifiziert' wenn Nein, sind beide Strings nicht identisch, und es wird zu einer anderen Programmstelle gesprungen ...
mit freundlichen grüssen,
with best regards,
crack
with best regards,
crack