Discussion:
per Batch Bytes in Datei schreiben???
(zu alt für eine Antwort)
Louis Noser
2006-10-23 09:06:39 UTC
Permalink
Grüss Euch

Ich möchte in einem DOS-Batch (unter WinXP) Binärdaten in einer Datei
ändern.

Geht das? Wie?

Konkret: Ich möchte einen geplanten Task abändern. Der soll einmalig zu
einem berechneten Zeitpunkt starten. Und der ist ja nicht im ANSI-Code,
sondern eben binär abgelegt.

Vielen Dank.

Grüsse
Louis
Dirk Wolfgang Glomp
2006-10-23 12:40:13 UTC
Permalink
Post by Louis Noser
Grüss Euch
Ich möchte in einem DOS-Batch (unter WinXP) Binärdaten in einer Datei
ändern.
Eine ausführbare Datei soll geändert werden?
Post by Louis Noser
Geht das?
Ich glaube mit Bordmitteln wohl nicht.
Post by Louis Noser
Wie?
Mit einem externen Programm.
Post by Louis Noser
Konkret: Ich möchte einen geplanten Task abändern.
Oh ich kenne mich hier nicht aus?
Post by Louis Noser
Der soll einmalig zu
einem berechneten Zeitpunkt starten.
Wieso einmalig?
Post by Louis Noser
Und der ist ja nicht im ANSI-Code,
sondern eben binär abgelegt.
Wie/wo sind denn die zu ändernden Binär-Daten genau?

Dirk
Michael Bednarek
2006-10-23 14:23:10 UTC
Permalink
On Mon, 23 Oct 2006 11:06:39 +0200, Louis Noser wrote in
Post by Louis Noser
Ich möchte in einem DOS-Batch (unter WinXP) Binärdaten in einer Datei
ändern.
Geht das? Wie?
Konkret: Ich möchte einen geplanten Task abändern. Der soll einmalig zu
einem berechneten Zeitpunkt starten. Und der ist ja nicht im ANSI-Code,
sondern eben binär abgelegt.
Es ist leider nicht ganz klar was du wirklich willst. Ist das, was du
ändern willst, ein Programm (.EXE) oder die Information innerhalb des
Task Planers? Im letzteren Fall sieh dir mal SCHTASKS.EXE an; damit kann
man Tasks ändern. Im ersteren Fall brauchst du einen Kommando-Zeilen
getriebenen Hex Editor. Im übrigen scheint mir, du verwechselst ANSI mit
ASCII.
--
Michael Bednarek http://mbednarek.com/ "POST NO BILLS"
Louis Noser
2006-10-23 15:02:15 UTC
Permalink
Hallo

Sorry, wenn ich etwas verwirrlich geschrieben habe.
...
Post by Louis Noser
Ich möchte in einem DOS-Batch (unter WinXP) Binärdaten in einer Datei
ändern.
Wenn ich einen Job des Taskplaners in einem Hex-Editor anschaue, sehe
ich, dass der Durchführungs-Zeitpunkt nicht im Textformat (ASCII)
abgespeichert ist.

Beispiel: Der Task soll um 17:33 Uhr stattfinden. Speicherung im
taskname.job -> 1100 2100 (=Anzeige im Hexeditor)

Wie sagt man nun diesen Daten (1100 und 2100)? Sind das nicht
Binärdaten? Also Text ist es ja nicht.
...Ist das, was du
ändern willst, ein Programm (.EXE) oder die Information innerhalb des
Task Planers? Im letzteren Fall sieh dir mal SCHTASKS.EXE an; damit kann
man Tasks ändern...
Ich möchte nur die Information ändern.

Der Batch soll nach, sagen wir mal, 20 Stunden Rechner-Betriebsdauer
(alle Sessionen zusammengezählt) automatisch einen Virenscan durchführen
lassen. Meine Idee ist, zusammengefasst, immer bei Rechnerstart die
Restbetriebsdauer zu berechnen und das Ergebnis als Startzeit einem
vorbereiteten Job zu übergeben bzw. in dessen Info-Datei zu schreiben.

Kann ich SCHTASK.EXE aus einem Batch heraus mit Parameterübergabe aufrufen?
...Im übrigen scheint mir, du verwechselst ANSI mit
ASCII.
Das ist möglich. :-)

Ist denn ASCII nicht eine Untermenge von ANSI (ASCII=7 Bit - 128 Werte -
und ANSI=8 Bit - 256 Werte)?

Vielen Dank.

Grüsse
Louis
Dirk Wolfgang Glomp
2006-10-24 06:18:19 UTC
Permalink
Post by Louis Noser
Hallo
Moin.
Post by Louis Noser
Sorry, wenn ich etwas verwirrlich geschrieben habe.
Post by Louis Noser
Ich möchte in einem DOS-Batch (unter WinXP) Binärdaten in einer Datei
ändern.
Wenn ich einen Job des Taskplaners in einem Hex-Editor anschaue, sehe
ich, dass der Durchführungs-Zeitpunkt nicht im Textformat (ASCII)
abgespeichert ist.
Aha.
Post by Louis Noser
Beispiel: Der Task soll um 17:33 Uhr stattfinden. Speicherung im
taskname.job -> 1100 2100 (=Anzeige im Hexeditor)
Wie sagt man nun diesen Daten (1100 und 2100)? Sind das nicht
Binärdaten? Also Text ist es ja nicht.
Ich würde mal sagen das ist hexadezimal gecodet.

Hexadezimal 11 ist dezimal 17 und hexadezimal 21 ist dezimal 33.

Wenn sich diese Bytes immer an der selben Stelle befinden,
ist es nicht schwer diese Werte etwa mit debug.exe via batch zu ändern.
(Ich habe den Taskplaner noch nie benutzt.)
Entsprechende Debug-Befehle werden dazu in eine Datei(hier tmp.deb)
geschrieben, dann wird diese Datei debug übergeben.
Der Ort der zu verändernden Daten(hier hex: 0200) muß
auf die richtige Stelle gesetzt werden.
(Debug.exe kennt nur hexadezimale Werte.)

echo n taskname.job>tmp.deb
echo l cs:0100>>tmp.deb
echo e cs:0200>>tmp.deb
echo 11 0 21 0>>tmp.deb
echo w cs:0100>>tmp.deb
echo q>>tmp.deb
debug <tmp.deb
del tmp.deb

An den Stellen bei "11" und "21" kann ggf. ein %1 und %2 eingesetzt werden.
Sind die Werte nicht hintereinander, muß obiges etwas erweitert werden.
Post by Louis Noser
...Im übrigen scheint mir, du verwechselst ANSI mit
ASCII.
Das ist möglich. :-)
Ist denn ASCII nicht eine Untermenge von ANSI (ASCII=7 Bit - 128 Werte -
und ANSI=8 Bit - 256 Werte)?
(Ein Byte hat nur Werte von 0-255.)

ASCII oder ANSI ist ja nur eine Frage der Interpretation der selber Bytes.
Nur alle Zeichen bis 127 sind bei beiden gleich.

ASCIIs haben aber andere Zeichen von 128-255. So werden meine schönen
Kästchen die ich unter DOS verwende unter ANSI falsch dargestellt.

Schön zu sehen etwa auch im: selfhtml80.exe -> LFW:\TMP\inter\ascii.gif

Dirk
Louis Noser
2006-10-24 12:20:14 UTC
Permalink
Hallo
Post by Dirk Wolfgang Glomp
Post by Louis Noser
...
Wie sagt man nun diesen Daten (1100 und 2100)? Sind das nicht
Binärdaten? Also Text ist es ja nicht.
Ich würde mal sagen das ist hexadezimal gecodet.
Ist es denn falsch, bei obigen Daten von 'Binärdaten' zu sprechen?

Sind mit 'Binärdaten' nur ausführbare Dateien, also Programme im
weiteren Sinne, gemeint?

Ich dachte, der Begriff 'Binärdaten' meint Werte, die für sich stehen
und nicht erst zugeordnet werden müssen wie zB. bei ASCII. Liege ich da
falsch?
Post by Dirk Wolfgang Glomp
Wenn sich diese Bytes immer an der selben Stelle befinden,...
Ist mit 'an der selben Stelle' gemeint, dass sich die Bytes immer am
gleichen Ort im RAM befinden oder immer an derselben Position innerhalb
der Datei (zB. immer das 155. Byte der Datei soundso)?
Post by Dirk Wolfgang Glomp
(Ein Byte hat nur Werte von 0-255.)
Schon. 0 mitgezählt ergibt aber 256 Werte, die ein Byte annehmen kann.
(Wie sagt Ihr Teutonen-Usenetler: Korinthe? :-) )
Post by Dirk Wolfgang Glomp
ASCII oder ANSI ist ja nur eine Frage der Interpretation der selber Bytes.
Nur alle Zeichen bis 127 sind bei beiden gleich.
7-Bit-ASCII ist also eine Untermenge von ANSI, richtig?
Post by Dirk Wolfgang Glomp
ASCIIs haben aber andere Zeichen von 128-255. So werden meine schönen
Kästchen die ich unter DOS verwende unter ANSI falsch dargestellt.
Unterscheidet man denn nicht zwischen ASCII (7Bit) und erweitertem ASCII
(8Bit)?

Grüsse
Louis
Hans-Bernhard Broeker
2006-10-24 18:03:33 UTC
Permalink
Post by Louis Noser
Post by Dirk Wolfgang Glomp
Post by Louis Noser
Wie sagt man nun diesen Daten (1100 und 2100)? Sind das nicht
Binärdaten? Also Text ist es ja nicht.
Ich würde mal sagen das ist hexadezimal gecodet.
Da sagt Dirk falsch. Bloss weil hexadezimale Darstellung bei nur zur
maschinellen Verarbeitung gedachten Daten oft geeigneter ist als
dezimale, macht sie das nicht "hexadezimal gecodet".
Post by Louis Noser
Ist es denn falsch, bei obigen Daten von 'Binärdaten' zu sprechen?
Nein. Strikt richtig liegst du aber auch nicht. Das Wort Binaerdaten
ist zwar durchaus gelaeufig als Gegenteil von "Text", aber letztlich
auch nicht richtiger als "hexadezimal gecodet".
Post by Louis Noser
Ich dachte, der Begriff 'Binärdaten' meint Werte, die für sich
stehen und nicht erst zugeordnet werden müssen wie zB. bei
ASCII. Liege ich da falsch?
Werte, die "fuer sich stehen", gibt es nicht. Der Informationsgehalt
einer gegebenen Menge Daten ist _immer_ vom Kontext abhaengig.
Strenggenommen haengt er sogar vom Vorwissen des Empfaengers der Daten
ab: nichts ist so alt wie die Neuigkeiten von gestern.
--
Hans-Bernhard Broeker (***@physik.rwth-aachen.de)
Even if all the snow were burnt, ashes would remain.
Dirk Wolfgang Glomp
2006-10-25 08:40:22 UTC
Permalink
Post by Hans-Bernhard Broeker
Post by Louis Noser
Post by Dirk Wolfgang Glomp
Post by Louis Noser
Wie sagt man nun diesen Daten (1100 und 2100)? Sind das nicht
Binärdaten? Also Text ist es ja nicht.
Ich würde mal sagen das ist hexadezimal gecodet.
Da sagt Dirk falsch. Bloss weil hexadezimale Darstellung bei nur zur
maschinellen Verarbeitung gedachten Daten oft geeigneter ist als
dezimale, macht sie das nicht "hexadezimal gecodet".
Stimmt dieses habe ich falsch ausgedrückt. Ich meinte eigentlich gar nicht
gecodet, sondern für die Betrachtung hexadezimal dargstellt.
Post by Hans-Bernhard Broeker
Post by Louis Noser
Ist es denn falsch, bei obigen Daten von 'Binärdaten' zu sprechen?
Nein. Strikt richtig liegst du aber auch nicht. Das Wort Binaerdaten
ist zwar durchaus gelaeufig als Gegenteil von "Text", aber letztlich
auch nicht richtiger als "hexadezimal gecodet".
Das Wort Binaerdaten benutzt man doch, wenn man wertfrei die Daten
betrachten ohne die Struktur zu kennen.
Letztendlich sind aber alle Daten Binaerdaten.
Post by Hans-Bernhard Broeker
Post by Louis Noser
Ich dachte, der Begriff 'Binärdaten' meint Werte, die für sich
stehen und nicht erst zugeordnet werden müssen wie zB. bei
ASCII. Liege ich da falsch?
Werte, die "fuer sich stehen", gibt es nicht.
Na wenn ich eine temporäre Datei anlege die nur einmal benutzt wird,
dann aber als Leiche auf einem Datenträger verbleibt,
dann könnte man diese Binaer-Daten kaum mehr konkret zuordnen
(etwa bei Zwischenergebnissen aus Fraktalberechnungen)
und stehen somit für sich verlassen alleine da als Daten-Müll.

Dirk
Dirk Wolfgang Glomp
2006-10-25 07:58:48 UTC
Permalink
Post by Louis Noser
Hallo
Post by Dirk Wolfgang Glomp
Post by Louis Noser
...
Wie sagt man nun diesen Daten (1100 und 2100)? Sind das nicht
Binärdaten? Also Text ist es ja nicht.
Ich würde mal sagen das ist hexadezimal gecodet.
Ist es denn falsch, bei obigen Daten von 'Binärdaten' zu sprechen?
Nö ist schon richtig.
Post by Louis Noser
Sind mit 'Binärdaten' nur ausführbare Dateien, also Programme im
weiteren Sinne, gemeint?
Nee, auch andere Daten.
Post by Louis Noser
Ich dachte, der Begriff 'Binärdaten' meint Werte, die für sich stehen
und nicht erst zugeordnet werden müssen wie zB. bei ASCII. Liege ich da
falsch?
Kann man so definieren.
Post by Louis Noser
Post by Dirk Wolfgang Glomp
Wenn sich diese Bytes immer an der selben Stelle befinden,...
Ist mit 'an der selben Stelle' gemeint, dass sich die Bytes immer am
gleichen Ort im RAM befinden oder immer an derselben Position innerhalb
der Datei (zB. immer das 155. Byte der Datei soundso)?
Ich meinte innerhalb der Datei,
denn die Position "Segmentadresse(xxxx)" beim Einladen in den Speicher,
ändert sich stets je nachdem wo vom OS der nächstfreie Speicher zur Verfügung
gestellt wird.

Wenn also die Datei nach hex xxxx:0100 geladen wird,
muß also ab hex 019B die Daten manipuliert werden(wenn das 155 Byte).
Post by Louis Noser
Post by Dirk Wolfgang Glomp
(Ein Byte hat nur Werte von 0-255.)
Schon. 0 mitgezählt ergibt aber 256 Werte, die ein Byte annehmen kann.
Ja stimmt.
Post by Louis Noser
Post by Dirk Wolfgang Glomp
ASCII oder ANSI ist ja nur eine Frage der Interpretation der selber Bytes.
Nur alle Zeichen bis 127 sind bei beiden gleich.
7-Bit-ASCII ist also eine Untermenge von ANSI, richtig?
Könnte man so nennen. Es gab erst ASCII dann kam ANSI dazu.
Post by Louis Noser
Post by Dirk Wolfgang Glomp
ASCIIs haben aber andere Zeichen von 128-255. So werden meine schönen
Kästchen die ich unter DOS verwende unter ANSI falsch dargestellt.
Unterscheidet man denn nicht zwischen ASCII (7Bit) und erweitertem ASCII
(8Bit)?
Klar unterscheide ich selber so etwas, nur gehen Windows-Anwendungen
meist von ANSI aus und stellen somit ASCII(>127)-Zeichen falsch dar.

In DOS gibt es nur ASCII(ich kenne keine DOS-Anwendung die ANSI benutzt).

Auch die GraKa hat in ihrem ROM die ASCII-CHARS,
siehe dazu auch den Vektor in 0:001Fh der auf das GraKa-Rom zeigt.
Hier sind auch die deutschen Umlaute schon vorhanden.

Dirk
Louis Noser
2006-11-10 10:07:43 UTC
Permalink
Hallo
Post by Dirk Wolfgang Glomp
...
echo n taskname.job>tmp.deb
echo l cs:0100>>tmp.deb
echo e cs:0200>>tmp.deb
echo 11 0 21 0>>tmp.deb
echo w cs:0100>>tmp.deb
...
Was genau tun hier die einzelnen Debug-Befehle? (Ich komm' einfach nicht
drauf.)

Grüsse
Louis
Dirk Wolfgang Glomp
2006-11-10 10:29:39 UTC
Permalink
Post by Louis Noser
Hallo
Post by Dirk Wolfgang Glomp
...
echo n taskname.job>tmp.deb
Setzt einen Datei-Namen.
Post by Louis Noser
Post by Dirk Wolfgang Glomp
echo l cs:0100>>tmp.deb
Läd die Datei nach cs:0100.
Post by Louis Noser
Post by Dirk Wolfgang Glomp
echo e cs:0200>>tmp.deb
Startet den Edit-Mode bei cs:0200.
Post by Louis Noser
Post by Dirk Wolfgang Glomp
echo 11 0 21 0>>tmp.deb
Trägt diese Bytes ein ab cs:0200.
Post by Louis Noser
Post by Dirk Wolfgang Glomp
echo w cs:0100>>tmp.deb
Schreibt die Datei zurück auf den Datenträger.
Post by Louis Noser
Post by Dirk Wolfgang Glomp
...
Was genau tun hier die einzelnen Debug-Befehle? (Ich komm' einfach nicht
drauf.)
Dirk
Dirk Wolfgang Glomp
2006-11-10 10:48:31 UTC
Permalink
Post by Louis Noser
Was genau tun hier die einzelnen Debug-Befehle? (Ich komm' einfach nicht
drauf.)
http://www.armory.com/~rstevew/Public/Tutor/Debug/debug-manual.html

Dirk
Michael Bednarek
2006-10-24 12:51:46 UTC
Permalink
On Mon, 23 Oct 2006 17:02:15 +0200, Louis Noser wrote in
de.comp.os.msdos:

[snip
Post by Louis Noser
Der Batch soll nach, sagen wir mal, 20 Stunden Rechner-Betriebsdauer
(alle Sessionen zusammengezählt) automatisch einen Virenscan durchführen
lassen. Meine Idee ist, zusammengefasst, immer bei Rechnerstart die
Restbetriebsdauer zu berechnen und das Ergebnis als Startzeit einem
vorbereiteten Job zu übergeben bzw. in dessen Info-Datei zu schreiben.
Ungewöhnlicher Ansatz.
Post by Louis Noser
Kann ich SCHTASK.EXE aus einem Batch heraus mit Parameterübergabe aufrufen?
[snip]

Warum nicht? "SCHTASKS /?" sagt was man machen kann.

Wenn du den Zeitplan von bestehenden Jobs ändern willst, geht das mit
SCHTASKS nicht (auch nicht mit AT); mit diesen kann man (u.a) neue
Jobpläne erstellen. Doch: JT.EXE (aus'm Resource Kit) [1] kann jeden
Aspekt eines existierenden Jobs ändern, ist aber ein wenig kompliziert.
"JT /? CTJ" ist wahrscheinlich ein guter Anfang.

[1] <ftp://ftp.microsoft.com/reskit/win2000/jt.zip>
--
Michael Bednarek http://mbednarek.com/ "POST NO BILLS"
Holger Petersen
2006-10-23 16:13:54 UTC
Permalink
Post by Louis Noser
Grüss Euch
Ich möchte in einem DOS-Batch (unter WinXP)
^^^--------------^^^^^

Da gibt es riesen-Unterschiede...
Post by Louis Noser
Binärdaten in einer Datei
ändern.
Geht das?
Ja.
Post by Louis Noser
Wie?
Na gut:

--->
Vorraussetzung: Du willst immer an der selben Stelle die gleiche
*Ersetzung* machen (und nix einfügen :-)

echo exx,yy > debug.inp
echo w >> debug.inp
echo q >> debug.inp

debug zu_aendernde_Datei < debug.inp

del debug.inp

In obigem solltest Du die Leerzeichen um die ">" bzw. ">>" Klammern
wahrscheinlich entfernen, da die Ausgabe-Umleitung dort ab und zu
ein Problem hat...

<----
Post by Louis Noser
Konkret: Ich möchte einen geplanten Task abändern. Der soll einmalig zu
einem berechneten Zeitpunkt starten.
Könntest Du dich überwinden, _alle_ Deine 'geplanten Tasks' nur auf
der Kommandozeile einzurichten statt die GUI zu benutzen?

DANN geht es mit einem einfachen " AT <Datum> <Programm> <Parameter> "
Aber schaue Dir bitte mit " AT /? " noch einmal die genaue Syntax an...

Es _soll_ (früher?) Probleme gegeben habe, wenn man den AT-Befehl mit
der GUI mixt.

Gruss, Holger
Louis Noser
2006-10-23 16:53:29 UTC
Permalink
Hallo
Post by Holger Petersen
...
echo exx,yy > debug.inp
echo w >> debug.inp
echo q >> debug.inp
debug zu_aendernde_Datei < debug.inp
del debug.inp
...
Könntest Du dich überwinden, _alle_ Deine 'geplanten Tasks' nur auf
der Kommandozeile einzurichten statt die GUI zu benutzen?
Eventuell. :-)
Post by Holger Petersen
DANN geht es mit einem einfachen " AT <Datum> <Programm> <Parameter> "
Aber schaue Dir bitte mit " AT /? " noch einmal die genaue Syntax an...
...
Diese Dinge sind Neuland für mich. Deshalb werde ich dazu noch weitere
Details zusammensuchen.

Aber ich denke, ich werde es mit Deinen Infos schaffen.

Vielen herzlichen Dank für Deine Hilfe!

Grüsse
Louis
Dirk Wolfgang Glomp
2006-10-24 06:28:26 UTC
Permalink
Post by Holger Petersen
echo exx,yy > debug.inp
Huch was sind das denn für Debug-Befehle?
Post by Holger Petersen
echo w >> debug.inp
Hier fehlt wohl eine Adresseangabe und die Dateilänge
in BX:CX darf auch nicht 0:0 sein.

Dirk
Holger Petersen
2006-10-24 20:21:11 UTC
Permalink
Post by Dirk Wolfgang Glomp
Post by Holger Petersen
echo exx,yy > debug.inp
Huch was sind das denn für Debug-Befehle?
Da habe ich micht wohl vertan. Ein "e"-Befehl braucht
auch eine Leer-Eingabe, um ihn abzubrechen. Das geht
zwar mit " echo. >> debug.inp " aber nach einer Nacht
nachdenken geht ein "f" (Fill, von, bis, mit) wohl ein-
facher.
Post by Dirk Wolfgang Glomp
Post by Holger Petersen
echo w >> debug.inp
Hier fehlt wohl eine Adresseangabe und die Dateilänge
Nein.
Post by Dirk Wolfgang Glomp
in BX:CX darf auch nicht 0:0 sein.
Egal.

WENN man " DEBUG DATEINAME " aufruft, dann mit welchen
Befehlen auch immer Bytes ändert, dann kann man ein
einfaches "w" machen. Und die Segment-Register werden
dann auch schon passend vorbesetzt.

Es sei denn, es wäre eine EXE-Datei. Aber da geht das
sowieso nicht.

Gruss, Holger
Dirk Wolfgang Glomp
2006-10-25 09:40:08 UTC
Permalink
Post by Holger Petersen
Post by Dirk Wolfgang Glomp
Post by Holger Petersen
echo exx,yy > debug.inp
Huch was sind das denn für Debug-Befehle?
Da habe ich micht wohl vertan. Ein "e"-Befehl braucht
auch eine Leer-Eingabe, um ihn abzubrechen.
Meinst du jetzt zwischen "e" und der Adresseangabe "cs:0100"
beim Start in den Enter-modus, oder um die Eingabe abzuschließen,
damit die Eingabe wieder Debug-Befehle verarbeiten kann?

Letzteres wird nicht benötigt, da jedes "CR" die Eingabe des
Enter-modus beendet.
Bei dem "a"-Befehl mit folgender Mnemonic-Eingabe ist das anders,
hier wird immer die Zeile mit "CR" übernommen und zum Beenden
bedarf es ein weiters "CR" auf einer Leerzeile.
Post by Holger Petersen
Das geht
zwar mit " echo. >> debug.inp "
Bei "e" auch wie oben beschrieben.
Post by Holger Petersen
aber nach einer Nacht
nachdenken geht ein "f" (Fill, von, bis, mit) wohl ein-
facher.
Stimmt wäre auch möglich.
Post by Holger Petersen
Post by Dirk Wolfgang Glomp
Post by Holger Petersen
echo w >> debug.inp
Hier fehlt wohl eine Adresseangabe und die Dateilänge
Nein.
Man kann natürlich auch mit "debug taskname.job"
die Datei gleich miteinladen lassen, dann ist
der Dateiname und die Dateilänge schon gegeben.
Ich denke dann wird wohl immer nach xxxx:0100 geladen,
wenn es kein executable ist.
Post by Holger Petersen
Post by Dirk Wolfgang Glomp
in BX:CX darf auch nicht 0:0 sein.
Egal.
Nicht egal, sonst werden 0 Bytes geschrieben.
Post by Holger Petersen
WENN man " DEBUG DATEINAME " aufruft, dann mit welchen
Ja ist mir auch jetzt eingefallen.
Post by Holger Petersen
Befehlen auch immer Bytes ändert, dann kann man ein
einfaches "w" machen.
Ah so.
Post by Holger Petersen
Und die Segment-Register werden
dann auch schon passend vorbesetzt.
Beim Normal-Debug-Start(ohne Anhängsel) werden immer die Segment-Register
(DS, ES, SS, CS) gleichsam auf den nächst freien Speicher gesetzt.
Der Indexpointer(IP) steht gewöhlich auf hex 0100.
Post by Holger Petersen
Es sei denn, es wäre eine EXE-Datei.
Beim Einladen einer ausführbaren *.exe-Datei, wird ggf. "IP" auch
höher/niedriger gesetzt, etwa nach 0200, weil da der PSP evtl. größer
als 0100 ist. SS, CS und IP werden dem Programmcode entsprechend
gesetzt. BX:CX wird dann beim Laden jeglicher Daten auf die
Dateilänge gesetzt.
Post by Holger Petersen
Aber da geht das sowieso nicht.
Warum sollte es da nicht gehen, wenn man dabei die richtigen
Adressangaben macht?

Dirk
Holger Petersen
2006-10-25 16:56:42 UTC
Permalink
Post by Dirk Wolfgang Glomp
Man kann natürlich auch mit "debug taskname.job"
die Datei gleich miteinladen lassen, dann ist
der Dateiname und die Dateilänge schon gegeben.
Und genau das habe ich in meinem Original-Posting vorgeschlagen:

| debug zu_aendernde_Datei < debug.inp
Post by Dirk Wolfgang Glomp
Ich denke dann wird wohl immer nach xxxx:0100 geladen,
Ja.
Post by Dirk Wolfgang Glomp
wenn es kein executable ist.
Jein. Eine COM-Date wird nach 100hex geladen, und ist durchaus ein
'executable'. Wie das mit " command.com " von Windows-XP ist, kann
ich im Moment nicht nachprüfen...
Post by Dirk Wolfgang Glomp
Post by Holger Petersen
Post by Dirk Wolfgang Glomp
in BX:CX darf auch nicht 0:0 sein.
Egal.
Nicht egal, sonst werden 0 Bytes geschrieben.
Post by Holger Petersen
WENN man " DEBUG DATEINAME " aufruft, dann mit welchen
Ja ist mir auch jetzt eingefallen.
Post by Holger Petersen
Befehlen auch immer Bytes ändert, dann kann man ein
einfaches "w" machen.
Ah so.
---===---
Post by Dirk Wolfgang Glomp
Post by Holger Petersen
Und die Segment-Register werden
dann auch schon passend vorbesetzt.
Beim Normal-Debug-Start(ohne Anhängsel) werden immer die Segment-Register
(DS, ES, SS, CS) gleichsam auf den nächst freien Speicher gesetzt.
Der Indexpointer(IP) steht gewöhlich auf hex 0100.
Post by Holger Petersen
Es sei denn, es wäre eine EXE-Datei.
Beim Einladen einer ausführbaren *.exe-Datei, wird ggf. "IP" auch
höher/niedriger gesetzt, etwa nach 0200, weil da der PSP evtl. größer
als 0100 ist. SS, CS und IP werden dem Programmcode entsprechend
gesetzt. BX:CX wird dann beim Laden jeglicher Daten auf die
Dateilänge gesetzt.
Post by Holger Petersen
Aber da geht das sowieso nicht.
Warum sollte es da nicht gehen, wenn man dabei die richtigen
Adressangaben macht?
1) Probiere es mal aus:
copy kleine.exe test.exe
cmp kleine.exe test.exe # oder war es "FC /B ... ..." ?

debug test-exe
- w

cmp kleine.exe test.exe # oder war es "FC /B ... ..." ?


2) Wenn es nicht geht, was ich (zuhause nur unter Linux arbeitend) nicht
testen kann, dann soll es an den beim Laden ausgefürten und beim write
nicht wiederherstellbaren Relokation-Informationen liegen.
Und: Eine EXE muss nicht in einem Stück im Speicher liegen, oder?

Gruss, Holger
Dirk Wolfgang Glomp
2006-10-26 05:15:40 UTC
Permalink
Post by Holger Petersen
Post by Dirk Wolfgang Glomp
Ich denke dann wird wohl immer nach xxxx:0100 geladen,
Ja.
Post by Dirk Wolfgang Glomp
wenn es kein executable ist.
Jein. Eine COM-Date wird nach 100hex geladen, und ist durchaus ein
'executable'.
Ja klar.
Post by Holger Petersen
Wie das mit " command.com " von Windows-XP ist, kann
ich im Moment nicht nachprüfen...
Ähm ich fahre hier W2K.
Ich kann keine Unterschiede zu DOS-Debug erkennen.
Post by Holger Petersen
Post by Dirk Wolfgang Glomp
Post by Holger Petersen
Aber da geht das sowieso nicht.
Warum sollte es da nicht gehen, wenn man dabei die richtigen
Adressangaben macht?
copy kleine.exe test.exe
cmp kleine.exe test.exe # oder war es "FC /B ... ..." ?
Wofür das?
Post by Holger Petersen
debug test-exe
- w
cmp kleine.exe test.exe # oder war es "FC /B ... ..." ?
2) Wenn es nicht geht, was ich (zuhause nur unter Linux arbeitend) nicht
testen kann, dann soll es an den beim Laden ausgefürten und beim write
nicht wiederherstellbaren Relokation-Informationen liegen.
Aha. Ist mir noch gar nicht aufgefallen.

...

PE-Files oder auch Elf-Files habe ich auch noch nicht in debug eingeladen.
Post by Holger Petersen
Und: Eine EXE muss nicht in einem Stück im Speicher liegen, oder?
Ja bei solch riesigen Dateien gibt debug eine Fehlermeldung beim laden.

Dirk
Louis Noser
2006-11-18 21:44:35 UTC
Permalink
Hallo
Post by Dirk Wolfgang Glomp
...
Beim Normal-Debug-Start(ohne Anhängsel) werden immer die Segment-Register
(DS, ES, SS, CS) gleichsam auf den nächst freien Speicher gesetzt.
Der Indexpointer(IP) steht gewöhlich auf hex 0100.
...
Wie gross ist ein Segment?

Ist sichergestellt, dass der Anwender mittels Debug keine sensiblen
Bereiche überschreiben kann? Wie?

Vielen Dank.

Louis
Dirk Wolfgang Glomp
2006-11-19 08:50:56 UTC
Permalink
Post by Louis Noser
Hallo
Post by Dirk Wolfgang Glomp
...
Beim Normal-Debug-Start(ohne Anhängsel) werden immer die Segment-Register
(DS, ES, SS, CS) gleichsam auf den nächst freien Speicher gesetzt.
Der Indexpointer(IP) steht gewöhlich auf hex 0100.
...
Wie gross ist ein Segment?
Ein Paragraph hat 16 Byte. Mit Verwendung eines Offsetregisters(16/32Bit)
kann man damit im Realmode(RM) jeweils einen Bereich von 64KB(FFFF) addressieren.
Im Protectmode(PM) oder im Bigreal-/Unreal-Mode können die Segmente erweitert
werden, so das man bis zu 4GB damit addressieren kann(32Bit Offsetregister).

Jeder Ramzugriff erfolgt mit seg:offset. Ohne vorangestelltes Segment-Prefix
beziehen sich Zugriffe mit eax,(e)bx,ecx,edx,(e)si,(e)di unter Verwendung als
Offsetregister, oder mit Angabe der Offsetadresse, auf das Datensegment(DS).

(e)bp und (e)sp sind dem Stacksegment(SS) zugeordnet.
(e)ip ist dem Codesegment(CS) zugeordnet, aber weder (e)ip noch cs
kann man direckt beschreiben, cs aber lesen.
Post by Louis Noser
Ist sichergestellt, dass der Anwender mittels Debug keine sensiblen
Bereiche überschreiben kann? Wie?
Unter purem DOS(RM) darf man alles überschreiben, das gilt für jeden
Speicherbereich, sowie allen erreichbaren Datenträger.

Was jetzt genau alles unter Windows geschützt wird weiß ich nicht.
Im PM lassen sich jegliche Segmente und Ports vor Zugriffe schützen.

Dirk
Robert Riebisch
2006-11-20 09:11:37 UTC
Permalink
Post by Dirk Wolfgang Glomp
Der Indexpointer(IP) steht gewöhlich auf hex 0100.
IP = Instruction Pointer
--
Robert Riebisch
Bitte NUR in der Newsgroup antworten!
Please reply to the Newsgroup ONLY!
Dirk Wolfgang Glomp
2006-11-21 05:01:00 UTC
Permalink
Post by Robert Riebisch
Post by Dirk Wolfgang Glomp
Der Indexpointer(IP) steht gewöhlich auf hex 0100.
IP = Instruction Pointer
Ups, ja natürlich.

Dirk

Christoph Maercker
2006-11-03 15:24:59 UTC
Permalink
Post by Louis Noser
Ich möchte in einem DOS-Batch (unter WinXP) Binärdaten in einer Datei
ändern.
Geht das? Wie?
Allenfalls mit QBasic. War mind. bis MS-DOS 6.22 mit dabei. Unter
32Bit-Windows nicht mehr, könnte aber auch dort laufen, weil
versionsunabhängig.
--
CU Christoph Maercker.
Dirk Wolfgang Glomp
2006-11-03 19:57:50 UTC
Permalink
Post by Christoph Maercker
Post by Louis Noser
Ich möchte in einem DOS-Batch (unter WinXP) Binärdaten in einer Datei
ändern.
Geht das? Wie?
Allenfalls mit QBasic. War mind. bis MS-DOS 6.22 mit dabei. Unter
32Bit-Windows nicht mehr, könnte aber auch dort laufen, weil
versionsunabhängig.
Stimmt Basic ist für etliche Spielereien sehr flexibel.
Ich würde mir dafür OPEN, GET, PUT und CLOSE mal anschauen.

...

So wie ich das sehe, benutzt edit.com(429 Bytes) aus MSDOS6.22
das dortige QBasic, so das beide sich beim Editieren identisch verhalten.

Bei W98SE ist QBasic nicht mehr enthalten, das dortige edit.com ist
nun 71022 Bytes groß.

[QBasic aus DOS6.22]
Qbasic.exe (195372 Bytes)
Qbasic.hlp (146989 Bytes)
Qbasic.ini (132 Bytes wird beim ändern der Optionen angelegt)

;---------------------------------------------------------

Dann habe ich hier noch Microsoft QuickBASIC V4.5(qb.exe und mehr).
Binärdateien können auch mit
BLOAD "Pfad Name.Exp",Offsetadresse
geladen und mit
BSAVE "Pfad Name.Exp",Offsetadresse,länge
gespeichert werden. Dabei wird die betreffende Segmentadresse etwa mit
DEF SEG = &HB800
vorher angegeben(hier in hexadezimaler Form).

...

Mit QuickBASIC läßt sich aus einem Basic-Listing, eine eigenständige
*.exe-Datei erstellen, die dann wahlweise auch völlig unabhängig von
QuickBASIC lauffähig ist. Diese *.exe-Dateien lassen sich dann aber
nachträglich entsprechend schwerer verändern oder erweitern,
wenn man den Basic-Quellcode und/oder QuickBASIC nicht besitzt.

Auch kann man Basic-Object Module(*.obj) mit Assembler-Object Module
zusammen linken, um damit neue/eigens dafür declarierte Funktionen
schon innerhalb eines BASIC-Listing zu benutzen.

;---------------------------------------------------------

Manche Basic-Programme(etwa Games) laufen jedoch auf heutigen Rechnern
derart schnell, da sie für/mit wesentlich langsameren Rechner erstellt
wurden. Es sieht dann entsprechend lustig aus.

Dirk
Michael Hemmer
2006-11-08 22:37:47 UTC
Permalink
Post by Dirk Wolfgang Glomp
Post by Christoph Maercker
Allenfalls mit QBasic. War mind. bis MS-DOS 6.22 mit dabei. Unter
32Bit-Windows nicht mehr, könnte aber auch dort laufen, weil
versionsunabhängig.
(...)
Post by Dirk Wolfgang Glomp
Bei W98SE ist QBasic nicht mehr enthalten, das dortige edit.com ist
nun 71022 Bytes groß.
Auch bei Windows ME ist EDIT.COM ein eigenständiges Programm; QBasic ist
aber trotzdem im Lieferumfang (nicht jedoch in der Standardinstallation)
enthalten, und zwar in Version 1.1 mit dem Copyrightvermerk "1987-1992".
Es lohnt sich vermutlich auch bei Windows 98, die Installations-CD etwas
genauer zu erforschen; bei ME liegen ein paar DOS-Zusatzprogramme (unter
anderem auch MSD.EXE, wenn ich mich nicht irre) ungepackt auf derselben.

Gruß,

Michael
Dirk Wolfgang Glomp
2006-11-10 05:52:33 UTC
Permalink
Post by Michael Hemmer
Post by Dirk Wolfgang Glomp
Post by Christoph Maercker
Allenfalls mit QBasic. War mind. bis MS-DOS 6.22 mit dabei. Unter
32Bit-Windows nicht mehr, könnte aber auch dort laufen, weil
versionsunabhängig.
Bei W98SE ist QBasic nicht mehr enthalten, das dortige edit.com ist
nun 71022 Bytes groß.
Auch bei Windows ME ist EDIT.COM ein eigenständiges Programm; QBasic ist
aber trotzdem im Lieferumfang (nicht jedoch in der Standardinstallation)
enthalten, und zwar in Version 1.1 mit dem Copyrightvermerk "1987-1992".
Aha.
Post by Michael Hemmer
Es lohnt sich vermutlich auch bei Windows 98, die Installations-CD etwas
genauer zu erforschen;
Bei 98SE in der Base4.cab -> ebd.cab -> kann ich u.a. edit.com finden,
aber kein QBasic.

Dirk
Robert Riebisch
2006-11-10 08:46:00 UTC
Permalink
Post by Dirk Wolfgang Glomp
Post by Michael Hemmer
Es lohnt sich vermutlich auch bei Windows 98, die Installations-CD etwas
genauer zu erforschen;
Bei 98SE in der Base4.cab -> ebd.cab -> kann ich u.a. edit.com finden,
aber kein QBasic.
Mach's doch nicht so kompliziert und benutze Google:
http://www.antonis.de/warumqb.htm
--
Robert Riebisch
Bitte NUR in der Newsgroup antworten!
Please reply to the Newsgroup ONLY!
Dirk Wolfgang Glomp
2006-11-10 09:52:39 UTC
Permalink
Post by Robert Riebisch
Post by Dirk Wolfgang Glomp
Post by Michael Hemmer
Es lohnt sich vermutlich auch bei Windows 98, die Installations-CD etwas
genauer zu erforschen;
Bei 98SE in der Base4.cab -> ebd.cab -> kann ich u.a. edit.com finden,
aber kein QBasic.
http://www.antonis.de/warumqb.htm
Stimmt das ist einfacher.

Dirk
Dirk Wolfgang Glomp
2006-11-10 10:05:06 UTC
Permalink
Post by Dirk Wolfgang Glomp
Post by Robert Riebisch
Post by Dirk Wolfgang Glomp
Post by Michael Hemmer
Es lohnt sich vermutlich auch bei Windows 98, die Installations-CD etwas
genauer zu erforschen;
Bei 98SE in der Base4.cab -> ebd.cab -> kann ich u.a. edit.com finden,
aber kein QBasic.
http://www.antonis.de/warumqb.htm
Stimmt das ist einfacher.
Uff nach dem Starten von "ftp://ftp.microsoft.com/softlib/mslfiles/olddos.exe"
friert mein W2K ein, so das nur noch ein Hardware-Reset hilft.

Muß ich wohl unter DOS auspacken?

Dirk
Dirk Wolfgang Glomp
2006-11-10 10:23:27 UTC
Permalink
Post by Dirk Wolfgang Glomp
Post by Dirk Wolfgang Glomp
Post by Robert Riebisch
Post by Dirk Wolfgang Glomp
Post by Michael Hemmer
Es lohnt sich vermutlich auch bei Windows 98, die Installations-CD etwas
genauer zu erforschen;
Bei 98SE in der Base4.cab -> ebd.cab -> kann ich u.a. edit.com finden,
aber kein QBasic.
http://www.antonis.de/warumqb.htm
Stimmt das ist einfacher.
Uff nach dem Starten von "ftp://ftp.microsoft.com/softlib/mslfiles/olddos.exe"
friert mein W2K ein, so das nur noch ein Hardware-Reset hilft.
Die Antwort befindet sich im File:

CAUTION! Make sure that you are running this *
* .EXE file in an empty folder or on a blank *
* formatted diskette! *
* *
* DO NOT run this .EXE file in your \WINDOWS *
* or \WINDOWS\SYSTEM folder!

Dirk
Lesen Sie weiter auf narkive:
Suchergebnisse für 'per Batch Bytes in Datei schreiben???' (Fragen und Antworten)
4
Antworten
WinXP/1.5Ghz: Back to the roots, back to 80286...?
gestartet 2007-01-13 12:50:11 UTC
computer & internet
Loading...