vmlinux ELF تجد التعويضات لأعضاء لبنية معينة
سؤال
في نواة لينكس، ولست بحاجة للعثور على إزاحة من المتغيرات عضو في البنية التي يتم استخدامها. على سبيل المثال، لinit_task الذي هو من نوع task_struct، أود الإزاحات من معرف المنتج والمهام.
وليس لدي سوى vmlinux الحالي لهذا الغرض. أنا يمكن أن تشير إلى رمز النواة مفتوحة المصدر، ولكن قد تختلف من الإنشاء لدي.
هل من الممكن الحصول على تعويضات من دون مصدر؟
وتحرير: وvmlinux هو ARM، وأنا قد لا تكون دائما قادرة على تشغيل التعليمات البرمجية C على الجهاز المستهدف
المحلول
وحجم وتصميم هياكل موجود في معلومات التصحيح من الملفات الكائن جمعت (إذا كنت ترجمة مع -g
ولا strip
).
pahole ( ويعرف أيضا باسم "كزة واحد في حفرة"، وتعبئتها كما dev-util/dwarves
في جنتو) يقرأ معلومات الكائن التصحيح قزم على المعلومات الناتج عن "ثغرات" في هياكل - التي قد تكون نقطة انطلاق جيدة بالنسبة لك
نصائح أخرى
6.47 Offsetof
والأدوات دول مجلس التعاون الخليجي لكلا C و C ++ تمديد النحوي لتنفيذ الماكرو offsetof.
primary:
"__builtin_offsetof" "(" typename "," offsetof_member_designator ")"
offsetof_member_designator:
identifier
| offsetof_member_designator "." identifier
| offsetof_member_designator "[" expr "]"
وهذا التمديد هو كاف بحيث
#define offsetof(type, member) __builtin_offsetof (type, member)
وهو تعريف مناسب الماكرو offsetof. في C ++، قد يكون يعتمد نوع. في كلتا الحالتين، يمكن أن تتكون عضوا في معرف واحد، أو تسلسل عضو بالوصول والمراجع مجموعة.
والعثور على حل آخر مع الذراع eabi-GDB - أستطيع أن أفعل الطباعة وinit_task والطباعة وinit_task.pid والفرق هو الإزاحة