Forum: PC-Programmierung Funktionsparameter einer unbekannten DLL bestimmen


von Thomas W. (thomas_v2)


Lesenswert?

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ß

von Peter (Gast)


Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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 ...

von Thomas W. (thomas_v2)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Thomas W. (thomas_v2)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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?

von Stulle (Gast)


Lesenswert?


von oe6jwf (Gast)


Lesenswert?

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

von IIDDAA (Gast)


Lesenswert?

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!

von Thomas W. (thomas_v2)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.