![]() |
OutputDebugString überwachen
|
Re: OutputDebugString überwachen
Indem du ganz gepflegt die gleiche Methode verwendest. Und die wäre diese:
1. Du lernst C/C++ und NT-Treiberprogrammierung (für Windoes 9x natürlich VXD-Programmierung) 2. Du schreibst einen Treiber und einen Service welcher mit dem Treiber kommuniziert 3. Der Treiber muß diverse APIs im Kernelmode hooken 4. Dein Tool zeigt die Ausgabe dessen an, was der Hook abfängt. Voila. Das war's schon. Viel Erfolg. Wenn irgendjemand meine "wilden Hypothesen" verifizieren möchte, mag er sich seinen Lieblingsressourceneditor/-betrachter zur Hand nehmen und in ebendiesem alle Ressourceneinträge unter "BINRES" betrachten. Für eine weitere Analyse empfiehlt sich dann ein Disassembler, wie z.B. ![]() |
Re: OutputDebugString überwachen
Zitat:
PS: Für mich bist du aber der "Schlaumeier des Tages". |
Re: OutputDebugString überwachen
Zitat:
|
Re: OutputDebugString überwachen
|
Re: OutputDebugString überwachen
Zitat:
OutputDebugString kann man abfangen indem man den prozess debuggt, mit hilfe der funktion ![]() ![]() |
Re: OutputDebugString überwachen
ok, Sprint war schneller ;)
|
Re: OutputDebugString überwachen
@w3seek: Du hast insofern recht, als diese natürlich ebenfalls abgefangen werden können. Da du im ROS-Projekt dabei bist, kennst du ja quasi die Windows-Interna. Allerdings debuggt eben der DbgView von Sysinternals keinesfalls den Target, sondern setzt auf einer tieferen Ebene an.
__________________________________________________ ________ @Sprint: Zitat:
Zitat:
Zitat:
Komisch, dann war ich wohl der einzige dumme Schlaumeier des Tages, der in der Fragestellung komischerweise genau das verstanden hat, was in ihr stand. Wie dumm von mir ... Delphi Star schrieb (Hervorhebung Mephisto): Ich bitte also untertänigst um Vergebung und werde mich sogleich aus diesem Thread entfernen. |
Re: OutputDebugString überwachen
Delphi-Quellcode:
Was ist daran falsch :?:
if WaitForDebugEvent(OUTPUT_DEBUG_STRING_EVENT,INFINITE)=true then
showmessage('test'); |
Re: OutputDebugString überwachen
Zitat:
Im Platform SDK steht: The WaitForDebugEvent function waits for a debugging event to occur in a process being debugged. (Speziell an w3seek:) Ich habe mir soeben mal die Implementation von Windows 2000's kernel32!OutputDebugString() angeschaut. Dabei ist mir aufgefallen, daß theoretisch auch wenn der Prozess nicht debuggt wird dieser String in eine MMF geschrieben wird. Zusätzlich werden 2 Ereignisse geöffnet und mglw. signalisiert. Und mit einem Mutex wird der Zugriff auf die MMF gesperrt (dieser scheint intern der Kernel32 zu gehören - zumindest kennt die Kernel32 sein Handle und öffnet ihn nicht explizit innerhalb der Funktion). Die MMF heißt: "DBWIN_BUFFER" Die Ereignisse heißen: "DBWIN_DATA_READY" und "DBWIN_BUFFER_READY" Wie kompatibel (mit Windows 9x) und vorigen/späteren NT-Versionen ein solches Vorgehen ist, bleibt dahingestellt. Wenn eine tiefere Analyse erwünscht ist, kann ich die u.U. noch nachliefern. Aber auch kernel32!OutputDebugString() ruft ntdll!DbgPrint() auf, welches wiederum ntdll!DebugPrint() aufruft, welches wiederum ntdll!DebugService() aufruft, welches den Aufruf über SYSENTER bzw. INT 2Eh über die SSDT in den Kernelmode weiterleitet. Da ich keine Zeit habe, kann ich die auch nicht sagen, wie der Service-Index auf eine Kernelmodefunktion mappt. Zumindest gleicht sich der Code o.g. Funktionsaufrufe im Kernel- und im Usermode wie ein Ei dem anderen (NTOSKRNL.EXE vs. NTDLL.DLL). PS: Das alles war ein sehr oberflächliches Anschauen des Codes. Könnte also Fehler in der Beschreibung enthalten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 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