AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dos Mode: Message Warnung

Ein Thema von Aphton · begonnen am 1. Aug 2009 · letzter Beitrag vom 2. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#1

Dos Mode: Message Warnung

  Alt 1. Aug 2009, 21:05
Hallo liebe Leute,

Ich würde gerne wissen, warum der Offset von dem Text, das angezeigt wird, wenn man eine Win32 Applikation in einem zB Dos Emulator ausführt, so komisch ist.

Der Text befindet sich in der Exe zwischen dem Dos Header und dem NT Header.

Code:
Hex Darstellung:
Begin Offset: $40
BA10000E1FB409CD21B8014CCD219090546869732070726F6772616D206D7573742062652072756E20756E6465722057696E33320D0A24370000000...0000
End Offset: $100

Ascii Darstellung:
´   Í!¸LÍ!This program must be run under Win32
$7
Wenn man das dissassembliert sieht man schön, das der $21 Interrupt mit AH = 9 ausgeführt wird:

Code:
mov edx, 0x1f0e0010
mov ah, 0x9
int 0x21
Warum ist hier jedoch EDX = $1f0e0010 ?
Bei mir befindet sich der Text zur Laufzeit bei $400040 - so wie sich das eben gehört.

Kann es sein, dass die Appliaktion im Dos Modus ganz anders geladen wird und somit der Offset auch ein ganz anderer ist?

MfG

[edit=Luckie]Zeilenlänge korrigiert. Mfg, Luckie[/edit]
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Dos Mode: Message Warnung

  Alt 1. Aug 2009, 23:07
Unter Windows ist es so das man auf einem virtuellen Adressraum arbeitet. Die Basisadresse des virtuellen Adressraumes kann man in den Compiler-/Linkeroptionen angeben. Die virtuellen Adressräume sind dafür da, dass eine Anwendung nicht einfach so im Speicher von anderen rumschreibt und somit durch Fehler das gesamte System zu Absturz bringt. Unter Dos hingen sieht das anders aus. Da läuft immer nur eine Anwendung und somit war dort sowas nicht notwendig.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Dos Mode: Message Warnung

  Alt 1. Aug 2009, 23:10
Der erste Teil deiner Aussage war mir klar, der Zweite jedoch nicht.
Weißt du zufällig auch, wie ich die Adresse (vom Text) nun ermitteln kann?

MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#4

Re: Dos Mode: Message Warnung

  Alt 1. Aug 2009, 23:41
also da drinnen findest du einige Informationen
http://www.delphipraxis.net/internal...t.php?t=160791
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Dos Mode: Message Warnung

  Alt 2. Aug 2009, 00:22
@Himitsu
Ne, leider nicht

MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#6

Re: Dos Mode: Message Warnung

  Alt 2. Aug 2009, 07:20
also da sieht man, wie der Dateiheader ausgelesen wird, und wie z.B. Adressen umgerechnet werden (siehe RVA2RealPointer für Win32) ...

jetzt mußt du dich nur vom IMAGE_DOS_HEADER zu den für dich wichtigen Infos durchkämpfen und alles auf deine DOS-Bedürfnisse abändern
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Dos Mode: Message Warnung

  Alt 2. Aug 2009, 08:21
@Himitsu
Das tut alles leider nichts zur Sache
Dieser Teil befindet sich in keinem Header, sondern zwischen 2 Headers und zwar DOS & NT Header.
Lies bitte nochmal meinen ersten Beitrag durch

Danke bis jetzt

Die Frage ist leider immernoch offen

EDIT: Eventuell habe ich mich zu undeutig ausgedrück xD

Naja ich versuchs nochmal zu erklären:
Nach dem DOS Header, welcher $40 Byte groß ist, ist eine freie Stelle. Der NT Header fängt meist bei OFFSET $100 an.
DH man hat in diesem Fall $100 - $40 = $C0 freien Speicher zwischen dem DOS & NT Header.
Hier befindet sich der Code, welcher für die Warnmessage zuständig ist - führt man eine Win32 Applikation in Dos aus, so wird eben einem eine Message (siehe 1 Post) angezeigt.

Nun, die konkrete Frage war eben, warum der Offset von dem Text, das angezeigt werden soll, so komisch ist?!
Der kann sich doch nicht bei 0x1f0e0010 befinden? Wie komme ich auf die Adresse?
Und nein, im DOS Header sind keine nützlichen Infos zu diesem Offset gegeben.

MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#8

Re: Dos Mode: Message Warnung

  Alt 2. Aug 2009, 08:46
Äh... damit die Kompatibilität zu MS-DOS (8-Bit etc.) gegeben ist ?
An dieser Stelle ist ja der MS-Dos-Exe-Header.


gefunden:
http://support.microsoft.com/kb/65122
http://www.i8086.de/dos-diskettenformate/exe-datei.html
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Dos Mode: Message Warnung

  Alt 2. Aug 2009, 08:48
Hi,

Zitat:
Der kann sich doch nicht bei 0x1f0e0010 befinden? Wie komme ich auf die Adresse?
Hast Du berücksichtigt, dass unter DOS dies keine lineare Adresse ist, sondern sich in Segment und Offset aufteilt ?
Ich weiss jetzt nicht in welcher Reihenfolge, aber man muss wohl

0x1f0e:0x0010 (bzw. 0x0010:0x1f0e) als Seg:Ofs Paar sehen. Könnte das dann irgendwie hinhauen ?

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Dos Mode: Message Warnung

  Alt 2. Aug 2009, 09:50
@thkerkmann

Ähm das wusste ich nicht bzw habs nicht berücksichtig.
Hab mich da schnell erkundig ( http://www.bullhost.de/s/segment-off...essierung.html );
wenn ich die Berechnung durchführe komme ich nicht annähernderweise auf den Wert $400040 (hier beginnt der Dos-Stub, ein paar Bytes weiter befindet sich der Text).

Ich hab echt keine Ahnung, wie man jetzt diese Adresser ermittelt.
Wäre sie auch bei anderen Win32 Anwendungen mit gleicher ImageBase gleich, dann könnte ich sie als Konstante deklarieren, jedoch ist sie das nicht.
zZ gehe ich davon aus, dass in DOS die ganze Anwendung iwo anders hin geladen wird als wie es vorgesehen ist (ImageBase).

Danke für die bisherigen Mühen

Edit:
Ohhh ich habs raus.
Sorry für den obigen Assemblerextrakt, liebe Leute
Unabsichtlicherweise habe ich das mit 32Bit - anstatt mit 16Bit - dissassembliert

Ich hab das ganze nochmal mit Windows's Debug debugged und habe folgenden Output bekommen:
Code:
mov dx, 0x10 // nun wird mir alles klar :D hier befindet sich der Text xD
push cs
pop ds
mov ah, 0x09 // schreibe text
int 0x21
mov ax, 0x4c01 // terminiere
int 0x21
Sorry für die Unannehmlichkeiten

MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz