كيفية تمييز وتلوين إخراج gdb أثناء التصحيح التفاعلي؟
سؤال
من فضلك لا ترد، يجب أن أستخدم ddd، أو nemiver، أو emacs، أو vim، أو أي واجهة أمامية أخرى، فأنا أفضل gdb كما هو، ولكني أرغب في رؤية مخرجاته مع بعض الألوان الطرفية.
المحلول
.gdbinit
يمكنك تعديل الخاص بك ~/.gdbinit
أن يكون لها ألوان.يمكنك استخدام الجشع .gdbinit
وهو متاح هنا:
https://github.com/gdbinit/gdbinit
يمكنك تعديله بقدر ما تريد أيضًا.لقد وجدت هذا بفضل هذه الإجابة SO.إليك نوع الإخراج الذي يمكنك الحصول عليه:
يتوفر أيضًا مستودع GitHub: https://github.com/gdbinit/Gdbinit
وفي ملاحظة جانبية، كانت نفس الفكرة أيضا تنطبق على lldb.
لوحة تحكم جي دي بي
باتباع نفس المفهوم، لوحة تحكم جي دي بي يوفر واجهة مرئية معيارية لـ GDB في Python.
(بائع متجول غير قانوني
يستخدم مشروع آخر مشابه دعم GDB's Python لتوفير المزيد من القابلية للتوسعة، لذلك يستحق التحقق من ذلك: https://github.com/dholm/voidwalker
@dholm يقدم أيضًا خدماته الخاصة .gdbinit مستوحاة من السابق.
pwndbg
توفر بعض المشاريع مجموعة من الوظائف المفيدة، بما في ذلك العرض المحسن.هذا هو الحال ل بيدا أو pwndbg.هذا الأخير يعطي الوصف التالي:
بديل PEDA.بروح صديقنا الطيب
windbg
,pwndbg
هو واضحpwnd-bag
.
- سرعة
- المرونة
- رمز نظيف
وهو يوفر أوامر لدعم تصحيح الأخطاء واستغلال التطوير المشابهة لتلك الموجودة في PEDA، وعرض أفضل (على الرغم من أن هذا ليس محور التركيز الرئيسي للمشروع).لا يزال البرنامج قيد التطوير، ولم يتم إصداره بشكل صحيح بعد.
فولترون
ال مشروع وصف الدول:
Voltron عبارة عن واجهة مستخدم مصحح أخطاء قابلة للتوسيع للمتسللين.يتيح لك إرفاق طرق عرض الأداة المساعدة التي تعمل في محطات أخرى إلى مصحح الأخطاء (LLDB أو GDB) ، وعرض معلومات مفيدة مثل التفكيك ، ومحتويات المكدس ، وقيم التسجيل ، وما إلى ذلك ، مع الاستمرار في منحك نفس مصحح الأخطاء التي اعتدت عليها.
يمكنك تعديل الخاص بك .gdbinit
لدمجها تلقائيا.ومع ذلك، فإن العرض نفسه خارج GDB (على سبيل المثال.في تقسيم tmux).
مرفق البيئة العالمية
مرفق البيئة العالمية هو خيار آخر، ويتم وصفه على النحو التالي:
يهدف إلى استخدامها في الغالب من قبل المستغلين ومهندسي العكسيين ، لتوفير ميزات إضافية لـ GDB باستخدام Python API للمساعدة أثناء عملية التحليل الديناميكي وتطوير استغلال.
نصائح أخرى
إنها ليست ألوانًا، ولكن فكر في gdb واجهة المستخدم الرسومية النص.إنه يحدث فرقًا كبيرًا في مدى قابلية استخدام gdb.
يمكنك إطلاقه باستخدام:
gdb -tui executable.out
لقطة شاشة:
كما ترون، الميزات الرئيسية هي:
- يُظهر خط المصدر الذي نحن فيه والخطوط المحيطة به
- يظهر نقاط التوقف
وأنا أعلم أنك لا تريد الواجهة. ولكن ماذا عن cgdb أنها قريبة جدا إلى جدب، فمن TEXTMODE ولكن لديه نافذة مصدر أعلاه مع تسليط الضوء على تركيب على التعليمات البرمجية.
من الممكن تحسين مظهر gdb بشكل كبير من خلال استخدام الألوان.ويتم ذلك عبر أي من الطرق التالية:
المطالبة الملونة عبر "تعيين المطالبة".على سبيل المثال، اجعل المطالبة غامقة وحمراء:
set prompt \033[1;31m(gdb) \033[m
أو اجعل المطالبة ذات شكل جديد، غامق وأحمر:
set prompt \033[01;31m\n\n#####################################> \033[0m
الأوامر الملونة عبر الخطافات
- تسليط الضوء على بناء الجملة الملون لأمر "القائمة".
جميع الأمثلة متاحة في منشورات المدونة التالية التي كتبها مايكل كيليهر:
“تجميل GDB”، 12 مايو 2010 (عبر archive.org)
"تسليط الضوء على بناء جملة GDB التجريبي"، 15 مايو 2010 (عبر archive.org)
#into .gdbinit
shell mkfifo /tmp/colorPipe
define hook-disassemble
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=asm -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-disassemble
hookpost-list
end
define hook-list
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=cpp -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-list
set logging off
set logging redirect off
shell sleep 0.1s
end
define hook-quit
shell rm /tmp/colorPipe
end
define re
hookpost-disassemble
echo \033[0m
end
document re
Restore colorscheme
end
تحذير: عربات التي تجرها الدواب. أي دعم TUI، "وضع المستخدم" الإختراق.
والعثور على الجزء href="http://bluec0re.blogspot.com/2011/05/gdb-disassembly-syntax-highlighting-cpp.html" هنا وتعديله قليلا. يحتاج الضوء، ج ++ FILT. إذا تحصل على افسدت الألوان يصل قضية إعادة الأوامر.
وcgdb
هو أفضل بكثير من gdb -tui
وأنيق، أنا فقط وجدت هذا الإختراق باستخدام colout: الشبكي: / /github.com/nojhan/colout/blob/master/colout/example.gdbinit
وكنت أرغب في تسليط الضوء على ما يلي: التأكيد على خطوط تتبع مكدس التي تنتمي إلى ملفات مصدر بلدي (بدلا من المكتبات)
. وكان الحل لاستخدام GDB-الثعبان (على MSYS.؟ على لينكس عادة gdb
يأتي مع بيثون المدمج في بالفعل)، وربط backtrace
، استخدم
python stack_trace = gdb.execute('backtrace', False, True')
وبعد عملية stack_trace
مع regexes بايثون، وطباعتها. وتتحقق جريئة وغيرها من الألوان من خلال وظيفة مثل هذا:
def term_style(*v):
"""1 is bold, 30--37 are the 8 colours, but specifying bold may also
change the colour. 40--47 are background colours."""
return '\x1B['+';'.join(map(str, v))+'m'
#Use like this:
print term_style(1) + 'This will be bold' + term_style(0) #Reset.
print term_style(1,30) + 'This will be bold and coloured' + term_style(0)
print term_style(1,30,40) + 'Plus coloured background' + term_style(0)
ويعطى مزيج جيد آخر من الألوان من خلال هذا التكوين . فإنه يجعل يتفقد backtraces أسهل كثيرا. لاستخدامها، فقط حفظ هذا الملف كما ~/.gdbinit
وتشغيل جدب عادة
الجديد في القادم جي دي بي 8.3!
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS
يتوفر الآن التصميم الطرفي لـ CLI وTUI.بالإضافة إلى ذلك ، يمكن استخدام تسليط الضوء على مصدر GNU لتوفير تصميم قصاصات شفرة المصدر.راجع أوامر "ضبط النمط" أدناه لمزيد من المعلومات.
ويمكنك الحصول على كل ما الألوان التي تريدها؛
# gdb
(gdb) shell echo -en '\E[47;34m'"\033[1m"
...
anything is now blue foreground and white background
...
(gdb) shell tput sgr0
... back to normal