الإنجليزيةالفرنسيةالإسبانية

OnWorks فافيكون

pstruct - عبر الإنترنت في السحابة

قم بتشغيل pstruct في موفر الاستضافة المجاني OnWorks عبر Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

هذه هي بنية الأوامر التي يمكن تشغيلها في موفر الاستضافة المجاني OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

برنامج:

اسم


c2ph ، pstruct - تفريغ هياكل C كما تم إنشاؤها من طعنات "cc -g -S"

موجز


c2ph [-dpnP] [var = val] [ملفات ...]

OPTIONS
خيارات:

-w واسعة اختصار لـ: type_width = 45 member_width = 35 offset_width = 8
سداسي عشري. اختصار لـ: offset_fmt = x offset_width = 08 size_fmt = x size_width = 04

-n لا تنشئ كود perl (افتراضي عند استدعائه كـ pstruct)
-p إنشاء كود perl (افتراضي عند استدعائه كـ c2ph)
-v توليد كود perl ، مع decls C كتعليقات

- لا أعد حساب الأحجام لأنواع البيانات الجوهرية
-معلومات تفريغ عن الجوهر أيضًا

-t تتبع التنفيذ
-d ينثر رزم من إخراج التصحيح

-قائمة تعطي قائمة مفصولة بفواصل هياكل لتفريغها

الوصف


التالي هو توثيق c2ph.doc القديم من قبل توم كريستيانسن[البريد الإلكتروني محمي]>
التاريخ: 25 يوليو 91 ، 08:10:21 بتوقيت جرينتش

ذات مرة ، كتبت برنامجًا يسمى pstruct. لقد كان برنامج بيرل الذي حاول ذلك
تحليل الهياكل C وعرض تعويضات أعضائها لك. كان هذا على وجه الخصوص
مفيد للأشخاص الذين يبحثون في مقالب ثنائية أو يدقون حول النواة.

لم يكن برنامج Pstruct برنامجًا رائعًا. كما أنها لم تكن قوية بشكل خاص. المشكلة أنت
ترى ، هل كان مترجم C أفضل بكثير في تحليل C مما كنت أتمنى أن أكون.

لذلك أصبحت ذكيًا: قررت أن أكون كسولًا وأترك ​​مترجم C يحلل C ، والذي سيبصق
من طعنات مصحح الأخطاء لي لقراءتها. كانت هذه أسهل بكثير لتحليلها. ما زالت ليست ملف
برنامج جميل ، لكنه على الأقل أكثر قوة.

يأخذ Pstruct أي ملفات .c أو .h ، أو يفضل ملفات .s ، نظرًا لأن هذا هو التنسيق
سأقوم بتدليكهم على أي حال ، وبصق قوائم مثل هذه:

هيكل tty {
إنت tty.t_locker 000 4
إنت tty.t_mutex_index 004 4
هيكل tty * tty.t_tp_virt 008 4
بنية clist tty.t_rawq 00c 20
int tty.t_rawq.c_cc 00c 4
int tty.t_rawq.c_cmax 010 4
014
018 4
هيكل tty * tty.t_rawq.c_tp_cpu 01c 4
هيكل tty * tty.t_rawq.c_tp_iop 020 4
حرف غير موقع * tty.t_rawq.c_buf_cpu 024 4
حرف غير موقع * tty.t_rawq.c_buf_iop 028 4
بناء كليست tty.t_canq 02c 20
int tty.t_canq.c_cc 02c 4
إنت tty.t_canq.c_cmax 030 4
Int tty.t_canq.c_cfx 034 4
إنت tty.t_canq.c_clx 038 4
هيكل tty * tty.t_canq.c_tp_cpu 03c 4
هيكل tty * tty.t_canq.c_tp_iop 040 4
044 char * tty.t_canq.c_buf_cpu غير موقعة 4
حرف غير موقع * tty.t_canq.c_buf_iop 048 4
هيكل كليست tty.t_outq 04c 20
إنت tty.t_outq.c_cc 04ج 4
إنت tty.t_outq.c_cmax 050 4
054 int tty.t_outq.c_cfx 4
058 عدد 4
هيكل tty * tty.t_outq.c_tp_cpu 05c 4
هيكل tty * tty.t_outq.c_tp_iop 060 4
حرف غير موقّع * tty.t_outq.c_buf_cpu 064 4
* حرف * tty.t_outq.c_buf_iop 068 4
(* int) () tty.t_oproc_cpu 06c 4
(* int) () tty.t_oproc_iop 070 4
(* int) () tty.t_stopproc_cpu 074 4
(* int) () tty.t_stopproc_iop 078 4
موضوع الهيكل * tty.t_rsel 07c 4

وما إلى ذلك.

في الواقع ، تم إنشاء هذا من خلال مجموعة معينة من الخيارات. يمكنك التحكم في ملف
تنسيق كل عمود ، سواء كنت تفضل عريضًا أو سمينًا ، أو سداسي عشري أو عشري ، الأصفار البادئة
أو أيا كان.

كل ما تحتاجه لتكون قادرًا على استخدام هذا هو مترجم C من يولد طعنات على غرار BSD / GCC.
إنّ -g الخيار على مترجمي BSD الأصليين و GCC يجب أن يحصلوا على هذا من أجلك.

لمعرفة المزيد ، ما عليك سوى كتابة خيار زائف ، مثل - \؟، وستكون رسالة الاستخدام الطويلة
متاح. هناك عدد لا بأس به من الاحتمالات.

إذا كنت مجرد مبرمج سي ، فهذه هي نهاية الرسالة بالنسبة لك. يمكنك الإقلاع عن التدخين
في الوقت الحالي ، وإذا كنت مهتمًا ، فاحفظ المصدر وقم بتشغيله عندما ترغب في ذلك. أو
لا.

لكن إذا كنت مبرمج بيرل ، فأنا بالنسبة لك لدي شيء رائع أكثر من ذلك بكثير
مجرد طابعة أوفست هيكل.

ترى ، إذا استدعيت pstruct من خلال حرفها الآخر ، c2ph ، فلديك مولد أكواد
الذي يترجم كود C إلى كود بيرل! حسنًا ، إعلانات الهيكل والنقابات على الأقل ،
لكن هذا قليل جدًا.

قبل هذه النقطة ، كان أي شخص يبرمج في perl يريد التفاعل مع برامج C ،
مثل النواة ، تم إجبارها على تخمين تخطيطات الهياكل C ، ثم الأسلاك الصلبة
هذه في برنامجه. بالطبع ، عندما أخذت برنامجك الرائع إلى ملف
النظام حيث تم وضع هيكل sgtty بشكل مختلف ، تعطل برنامجك. وهو ملف
عار.

لدينا مترجم لاري h2ph ، والذي ساعد ، لكن هذا لا يعمل إلا على رموز cpp ، لا
C الحقيقي ، والذي كان أيضًا في أمس الحاجة إليه. ما أقدمه لك هو طريقة رمزية للوصول إليه
كل الهياكل C. لقد صاغتها من حيث الحزم والوظائف. ضع في اعتبارك
البرنامج التالي:

#! / usr / local / bin / perl

تتطلب "syscall.ph" ؛
تتطلب 'sys / time.ph' ؛
تتطلب "sys / Resource.ph" ؛

$ ru = "\ 0" x & rusage'sizeof ()؛

syscall (& SYS_getrusage، & RUSAGE_SELF، $ ru) && die "getrusage: $!"؛

ru = unpack ($ t = & rusage'typedef ()، $ ru)؛

$ utime = $ ru [& rusage'ru_utime + & timeval'tv_sec]
+ ($ ru [& rusage'ru_utime + & timeval'tv_usec]) / 1e6؛

$ stime = $ ru [& rusage'ru_stime + & timeval'tv_sec]
+ ($ ru [& rusage'ru_stime + & timeval'tv_usec]) / 1e6؛

printf "لقد استخدمت٪ 8.3fs +٪ 8.3fu ثانية. \ n"، $ utime، $ stime؛

كما ترى ، اسم الحزمة هو اسم الهيكل. الحقول العادية فقط
أسمائهم الخاصة. بالإضافة إلى وظائف الموصّل التالية لتوفير الراحة لك:

الهيكل هذا لا يأخذ أي حجج ، وهو مجرد رقم المستوى الأول
عناصر في الهيكل. يمكنك استخدام هذا للفهرسة
في مصفوفات من الهياكل ، ربما مثل هذا

$ usec = $ u [& user'u_utimer
+ (& ITIMER_VIRTUAL * & itimerval'struct)
+ & itimerval'it_value
+ & timeval'tv_usec
];

sizeof تُرجع وحدات البايت في البنية أو العضو إذا
تقوم بتمريره حجة ، مثل

& rusage'sizeof (& rusage'ru_utime)

typedef هذا هو تعريف تنسيق perl للتمرير إلى حزمة و
أفرغ. إذا طلبت محرفًا لشيء ، تحصل عليه
الهيكل بأكمله ، وإلا ستحصل على هيكل العضو
تسأل عن. يتم الاعتناء بالحشو ، كما هو الحال بالنسبة للسحر
ضمان تفكيك النقابة في جميع الأسماء المستعارة الخاصة بها.
لا يتم دعم Bitfields تمامًا حتى الآن.

offsetof هذه الوظيفة هي إزاحة البايت في مصفوفة ذلك
عضو. قد ترغب في استخدام هذا للفهرسة مباشرة
في الهيكل المعبأ بـ vec () إذا كنت كسولًا جدًا
لتفريغها.

typeof يجب عدم الخلط بينه وبين وظيفة ملحق typedef ، هذا
واحد يقوم بإرجاع نوع C لهذا الحقل. هذا من شأنه أن يسمح
يمكنك طباعة طباعة جميلة منظمة لبعض
دون معرفة أي شيء عنها مسبقًا.
لا توجد حجج لهذا واحد هو noop. يوما ما سأقوم بنشر مثل هذا
شيء لتفريغ هيكلك من أجلك.

الطريقة التي أرى بها استخدام هذا هي في الأساس ما يلي:

٪ h2ph /usr/lib/perl/tmp.ph
٪ c2ph some_include_file.h >> /usr/lib/perl/tmp.ph
٪ ثَبَّتَ

إنه أمر خادع قليلاً مع c2ph لأنه يجب عليك الحصول على العناصر المضمنة بشكل صحيح. لا استطيع ان اعرف
هذا لنظامك ، لكنه ليس صعبًا جدًا في العادة.

الكود ليس جميلًا كما ذكرت - لم أفكر أبدًا أنه سيكون برنامجًا مكونًا من 1000 سطر
عندما بدأت ، أو ربما لم أبدأ. :-) لكني كنت سأكون أقل تعجرفًا في كيفية القيام بذلك
أجزاء البرنامج متصلة ببعضها البعض ، وما إلى ذلك. وقد يكون مفيدًا أيضًا
لم يكن علي أن أتخيل تركيبة الطعنات أثناء الطيران ، ثم حساب الميكرو
الاختلافات بين مترجمي و دول مجلس التعاون الخليجي.

على أي حال ، ها هو. يجب أن يعمل على Perl v4 أو أعلى. ربما أقل.

- توم

استخدم pstruct عبر الإنترنت باستخدام خدمات onworks.net


خوادم ومحطات عمل مجانية

قم بتنزيل تطبيقات Windows و Linux

أوامر لينكس

Ad