vmlinux ELF تجد التعويضات لأعضاء لبنية معينة

StackOverflow https://stackoverflow.com/questions/1415745

  •  06-07-2019
  •  | 
  •  

سؤال

في نواة لينكس، ولست بحاجة للعثور على إزاحة من المتغيرات عضو في البنية التي يتم استخدامها. على سبيل المثال، ل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 والفرق هو الإزاحة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top