mikrocontroller.net

Forum: PC-Programmierung Funktionsparameter einer unbekannten DLL bestimmen


Autor: Thomas W. (thomas_v2)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Thomas W. (thomas_v2)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas W. (thomas_v2)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stulle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: oe6jwf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: IIDDAA (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Thomas W. (thomas_v2)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.