2009-09-03 10 views
5

Ich versuche, ein freigegebenes Benutzermodus-Objekt zurückzuentwickeln, das über ioctl syscalls mit einem Kerneltreiber interagiert. Ich habe eine Header-Datei mit Definitionen für die ioctl-Schnittstelle des Kernel-Treibers (d. H. #defines für ioctl-Befehlsnummern und Strukturdefinitionen für die verschiedenen Daten, die an ioctl gesendet werden).Hinzufügen von benutzerdefinierten Struct-Typen zu strace

Ich sehe, dass strace die Fähigkeit hat, Benutzerzeiger zu de-referenzieren, die an Systemaufrufe übergeben werden, aber es kann natürlich meine benutzerdefinierten Strukturen nicht de-referenzieren, die in ioctl übergeben werden. Gibt es eine einfache Möglichkeit, meine Definitionen zu strace hinzuzufügen, sodass ich aussagekräftige Daten an ioctl übergeben kann und nicht nur eine Zeigeradresse?

Ich habe die Quelle für strace und habe es erfolgreich kompiliert/installiert, aber alle meine Versuche, meinen eigenen Header einzuschließen, hatten keine Wirkung.

Antwort

2

Der Strace-Build untersucht nicht automatisch Strukturen und generiert Parser für sie - Sie müssen Code schreiben, um mit Ihren Strukturen umzugehen.

+0

Ich sehe. Einfach die Definition meiner Struktur einzuschließen ist nicht genug. Ich markiere das als die akzeptierte Antwort, weil es die Frage anspricht. Obwohl Daves Antwort ein weiterer guter Weg ist, um mein Ziel zu erreichen. –

2

Der einfachste Weg, um dies zu erreichen, kann ein Bibliothek Interposer für ioctl() schreiben. Es gibt eine nette Anleitung dazu unter Linux here.

Sie können nach den benutzerdefinierten Befehlsnummern suchen, die Ihre Anwendung verwendet; und die Strukturen für diese ausgeben.