Hallo, hat jemand einen Tip womit man am besten die Funktionsparameter eines Aufrufs einer Fremd-DLL herausfinden kann? Im konkreten Fall habe ich eine Funktion in einer DLL int dll_func(char *) Der Zeiger sollte auf einen String zeigen, und diesen Inhalt würde ich gerne herausfinden. Ich habe nur zum Testen mal den IDA Disassembler installiert und damit die interessante DLL geladen. Die Funktion konnte ich darin auch lokalisieren. Nur weiß ich nicht ob das Programm überhaupt dazu geeignet ist um meine gewünschten Informationen zu erhalten, da der IDA den Zeiger ja dereferenzieren können müsste um mir den Text anzuzeigen. Weiterhin ist das Programm ungemein komplex, vielleicht hat jemand einen Tip ob es da eine einfachere Möglichkeit gibt, bzw. ob das was ich vorhabe überhaupt möglich ist. Gruß
Thomas W. schrieb: > Im konkreten Fall habe ich eine Funktion in einer DLL > > int dll_func(char *) > Der Zeiger sollte auf einen String zeigen, und diesen Inhalt würde ich > gerne herausfinden. versteht ich nicht, mit char* hast du doch schon die Parameter welche Paramete willst du jetzt noch rausfinden?
Der Funktion wird ein String übergeben, und vermutlich stellt die Funktion mit dem Inhalt des Strings irgendwelche Dinge an. Und das scheint der Threadstarter wissen zu wollen. Es gibt beispielsweise DLLs, die solche Funktionen zum "Freischalten" gewisser Funktionalitäten enthalten, wo Seriennummern o.ä. an die Funktion zu übergeben sind. Ohne (korrekten) Aufruf der Funktion stellt die DLL ihre Funktion nach einiger Zeit ein oder eben nur einen Teil ihrer Funktionalität zur Verfügung. Wenn es so eine DLL ist, wird der Threadstarter hier nicht mit weiterer Hilfe rechnen können. Es kann natürlich auch sein, daß ich ihn komplett missverstanden habe und sein Problem ganz anderer Natur ist ...
Die DLL ist für den Zugriff auf eine sich in dem PC befindliche Schnittstellenkarte, und diese möchte ich in einer eigenen Anwendung verwenden. Der Funktionsaufruf dient zum öffnen der Schnittstelle, und da wird wohl ein Text in Art eines Zugangspunktes o.Ä übergeben, und diesen Text benötige ich eben. Die Signatur der Funktion habe ich mit dem IDA herausgefunden.
Thomas W. schrieb: > Der Funktionsaufruf dient zum öffnen der Schnittstelle, und da wird wohl > ein Text in Art eines Zugangspunktes o.Ä übergeben, und diesen Text > benötige ich eben. Und eine Dokumentation der Schnittstellenkarte bzw. der DLL existiert nicht? Du könntest die diese DLL nutzende Software im Debugger laufen lassen und einen Breakpoint auf genau diese Funktion setzen - dann siehst Du, was da übergeben wird.
Rufus Τ. Firefly schrieb: > Und eine Dokumentation der Schnittstellenkarte bzw. der DLL existiert > nicht? Nein, es gibt eine Software welche die Schnittstelle nutzt. Es ist vorgesehen eben alles über diese Software zu machen, aber das will ich nicht ;-) > Du könntest die diese DLL nutzende Software im Debugger laufen lassen > und einen Breakpoint auf genau diese Funktion setzen - dann siehst Du, > was da übergeben wird. Also meinst du mit dem IDA ist das schon das richtige Programm? Wenn ich dort einen Breakpoint setze friert meine aufrufende Anwendung ein. Aber wenn der Weg schonmal richtig ist muss ich mich mit diesem Programm mal eingehender befassen.
Thomas W. schrieb: > Also meinst du mit dem IDA ist das schon das richtige Programm? Das "richtige" Programm ist ein Debugger, mit dem man das eigentliche Programm laufen lassen kann und an die korrekte Stelle der DLL einen Breakpoint setzen kann. Da ich sowieso damit arbeite, würde ich den Debugger des Visual Studio dafür verwenden, wenn IDA so eine Funktionalität auch bietet, dann "nur zu". Eine aufwendigere Alternative wäre die Nachbildung der DLL durch eine selbstgebaute aufrufkompatible. Die hat dann zwar nicht die gewünschte Funktionalität, aber die Funktionsaufrufe sind da. Und wenn die von Dir gesuchte Funktion so ziemlich als erstes aufgerufen werden sollte, dann wärest Du Deinem Ziel den gewünschten Schritt näher. BTW: Was ist das für eine Karte?
ollydbg dll laden, breakpoint auf den funktionsentrypoint setzen, dann die die exe attachen (starten) und schaun was ankommt.... es gibt im netz zum thema debuggen mit ollydbg (und nat. softice) haufenweise anleitungen... 73
Zitat Wikipedia: "In neueren Versionen besitzt IDA die Möglichkeit auf Intel-Prozessoren den Binärcode unter seiner Kontrolle auszuführen und mit einem Debugger Haltepunkte zu setzen. Damit ergeben sich neue Möglichkeiten, den Programmfluss des analysierten Binärcodes zu verstehen." Sollte also gehen mit dem IDA!
Danke für eure Hinweise. Ich habe mir die Einsprungadressen mit IDA herausgesucht, und dann mit Ollydbg versucht das Programm an der entsprechenden Stelle zu debuggen. Leider hängt sich mein zu beobachtendes Programm weg wenn ich mich mit dem Debugger dranhänge. Das zu beobachtende Programm ruft beim Start allerdings auch gleich die Funktion aus der DLL auf, sodass ich nicht weiß ob es dann noch was bring sich an den Prozess zu "attachen". Ich glaube ich muss den Umgang mit den Werkzeugen erstmal mit einer eigenen exe und dll testen. Die Karte ist übrigens eine Siemens Profibuskarte.
Thomas W. schrieb: > Die Karte ist übrigens eine Siemens Profibuskarte. Und die dazugehörige Siemens-Originalsoftware kommt mit so einem netten kleinen USB-Stick, nicht?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.