Frage

In dem Linux-Kernel, ich brauche die Versätze von Membervariablen einer Struktur zu finden, das verwendet wird. Zum Beispiel für die init_task die vom Typ task_struct ist, würde ich die Offsets seiner pid und Aufgaben mag.

Ich habe nur die vmlinux Geschenk für diese. Ich kann mit dem Open-Source-Kernel-Code beziehen, aber es kann aus dem Build unterscheidet ich habe.

Ist es möglich, die Offsets ohne die Quelle zu bekommen?

EDIT:. Die vmlinux für ARM sind, und ich kann nicht immer in der Lage sein, C-Code auf dem Zielgerät ausgeführt

War es hilfreich?

Lösung

Die Größe und Layout-Strukturen in den Debug-Informationen der kompilierten Objektdateien vorhanden ist (wenn Sie mit -g kompilieren und Sie strip nicht).

pahole ( aka "Poke-a-Loch", verpackt als dev-util/dwarves in Gentoo) liest ein DWARF Debug-Informationen des Objekts zur Ausgabe von Informationen über „Löcher“ in Bauwerken -., die ein guter Ausgangspunkt für Sie sein

Andere Tipps

6,47 offsetof

GCC Geräte sowohl für C und C ++ eine syntaktische Erweiterung des offsetof Makro zu implementieren.

 primary:
         "__builtin_offsetof" "(" typename "," offsetof_member_designator ")"

 offsetof_member_designator:
           identifier
         | offsetof_member_designator "." identifier
         | offsetof_member_designator "[" expr "]"

Diese Erweiterung ist ausreichend, so dass

 #define offsetof(type, member)  __builtin_offsetof (type, member)

ist eine geeignete Definition des offsetof Makro. In C ++ kann Typ abhängig sein. In jedem Fall wird das Mitglied eines einzigen Identifizierers bestehen kann, oder eine Folge von Element greift und Array-Referenzen.

Gefunden eine andere Lösung mit Arm-EABI-GDB -. Ich kann Drucken und init_task und Print & init_task.pid tun und die Differenz wird der Offset

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top