![]() |
Dos Mode: Message Warnung
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:
Wenn man das dissassembliert sieht man schön, das der $21 Interrupt mit AH = 9 ausgeführt wird:
Hex Darstellung:
Begin Offset: $40 BA10000E1FB409CD21B8014CCD219090546869732070726F6772616D206D7573742062652072756E20756E6465722057696E33320D0A24370000000...0000 End Offset: $100 Ascii Darstellung: ´ Í!¸LÍ!This program must be run under Win32 $7
Code:
Warum ist hier jedoch EDX = $1f0e0010 ?
mov edx, 0x1f0e0010
mov ah, 0x9 int 0x21 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] |
Re: Dos Mode: Message Warnung
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.
|
Re: Dos Mode: Message Warnung
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 |
Re: Dos Mode: Message Warnung
also da drinnen findest du einige Informationen
![]() |
Re: Dos Mode: Message Warnung
@Himitsu
Ne, leider nicht MfG |
Re: Dos Mode: Message Warnung
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 :zwinker: |
Re: Dos Mode: Message Warnung
@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 |
Re: Dos Mode: Message Warnung
Äh... damit die Kompatibilität zu MS-DOS (8-Bit etc.) gegeben ist ? :gruebel:
An dieser Stelle ist ja der MS-Dos-Exe-Header. gefunden: ![]() ![]() |
Re: Dos Mode: Message Warnung
Hi,
Zitat:
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 |
Re: Dos Mode: Message Warnung
@thkerkmann
Ähm das wusste ich nicht bzw habs nicht berücksichtig. Hab mich da schnell erkundig ( ![]() 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:
Sorry für die Unannehmlichkeiten :wall:
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 MfG |
Re: Dos Mode: Message Warnung
das ImageBase aus'm NT-Header ist auch Wunschadresse für die Windows-Anwendung und hat mit der Platzierung in DOS nix zu tun
|
Re: Dos Mode: Message Warnung
Ja das wusste ich, deshalb ging ich ja davon aus, dass sich das ganze wo anders befindet...
Naja egal, mein Problem hat sich gelöst, Vielen Dank nochmal an alle MfG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz