জিডিবিতে নিবন্ধকের মানগুলি কীভাবে প্রিন্ট করা যায়?


191

আমি এর মান কিভাবে মুদ্রণ করব %eaxএবং %ebp?

(gdb) p $eax
$1 = void

8
layout regআগের নির্দেশ অনুসারে পরিবর্তিত এক (গুলি) টি হাইলাইট করে সমস্ত পূর্ণসংখ্যা এবং পতাকা নিবন্ধগুলির একটি সারণী প্রদর্শন করতে জিডিবি ব্যবহার করুন । উদাহরণস্বরূপ stackoverflow.com/tags/x86/info দেখুন ।
পিটার কর্ডেস

উত্তর:


232

info registersসমস্ত নিবন্ধগুলি দেখায়; info registers eaxশুধু রেজিস্টার দেখায় eax। কমান্ডটি সংক্ষিপ্ত হিসাবে করা যেতে পারেi r


আমি পেয়েছি: অবৈধ রেজিস্টার `% ইক্স 'এবং আমি যদি কেবল" তথ্য নিবন্ধগুলি "করি তবে ইক্সটি প্রদর্শিত হবে না। তবুও আমি আইডিইতে আমার কোড অ্যাসেমবিলির দিকে তাকিয়ে আছি যেখানে নির্দেশের সাথে একটি EXC_BAD_ACCESS সিগন্যাল তৈরি করা হয়েছে: পরীক্ষার% eax,% eax এটি এক্সকোডে চলছে জিডিবিতে। কেন জিডিবি ইক্স রেজিস্টারটি রিপোর্ট করছে না?
নূহআর

1
একই সমস্যা:% ইক্স কোডে রয়েছে, তবুও মুদ্রণ $ ইক্স শূন্য রয়েছে।
রুসলান ইউশচেঙ্কো

5
ব্রিজেটের উত্তর আমার পক্ষে কাজ করে। গাইকোসরের উত্তর বেশিরভাগ ক্ষেত্রে সঠিক, তবে আপনাকে% চিহ্নটি বাদ দিতে হবে, সুতরাং নির্দিষ্ট রেজিস্টারের জন্য আদেশটি info registers eax। যদিও জিডিবি-র বিভিন্ন সংস্করণের জন্য এটি আলাদা কিনা তা আমি নিশ্চিত নই।
কেভিন

আমি lldb জন্য একই জিনিস অনুসন্ধানের জন্য করা হয়েছে, তাই আমাকে শুধু মনে রাখবেন যে: lldb জন্য, কমান্ডregister read [eax]
holgac

আপনি যদি কোডটি ব্যবহার করতে পারেন তবে পদক্ষেপের সাথে সাথে নিবন্ধের মানগুলি ধারাবাহিকভাবে প্রদর্শন করতে চান display। জন্য যেমন display $eax
srgsanky

50

আপনি যদি জিডিবিতে একটি নির্দিষ্ট রেজিস্টার মুদ্রণ করার চেষ্টা করছেন, আপনাকে% চিহ্নটি বাদ দিতে হবে। উদাহরণ স্বরূপ,

info registers eip

যদি আপনার এক্সিকিউটেবল bit৪ বিট হয় তবে রেজিস্টারগুলি আর দিয়ে শুরু হবে। ই দিয়ে তাদের শুরু করা বৈধ নয়।

info registers rip

সেগুলি সংক্ষেপে বলা যেতে পারে:

i r rip

37

এছাড়াও আছে:

info all-registers

তারপরে আপনি যে নিবন্ধটি আগ্রহী তার নাম পেতে পারেন - প্ল্যাটফর্ম-নির্দিষ্ট রেজিস্টারগুলি (যেমন এআরএম তে নিওন কিউ ... এর মত) জন্য খুব দরকারী।


3
এটি শিখেছি এমন রেজিস্ট্রার সম্পর্কে থাকতে হবে যা আমার জানা ছিল না :-)
সিরো সান্তিলি 法轮功 冠状 病 六四 事件 法轮功

1
আমার মেশিন, এই কপি করে প্রিন্ট eax, ecxএবং অন্যান্য মান রেজিস্টার দ্বারা লুকানো info registers। এটি সম্ভবত গ্রহণযোগ্য উত্তর হওয়া উচিত।
20:51

15
  • যদি কেবল একবার এটি পরীক্ষা করতে চান তবে নিবন্ধগুলি info registersদেখান।
  • যদি কেবল একটি রেজিস্টার দেখতে চান, উদাহরণস্বরূপ, display $espgdb কমান্ড লাইনে esp রেজিস্টারগুলি চালিয়ে যান।
  • যদি সমস্ত রেজিস্টারগুলি দেখতে চান layout regs, টিयूআই মোড সহ নিবন্ধগুলি চালিয়ে যান।

12

জিডিবি আদেশ :

  • i r <register_name>: একটি একক নিবন্ধ মুদ্রণ করুন, যেমন i r rax,i r eax
  • i r <register_name_1> <register_name_2> ...: একাধিক নিবন্ধগুলি মুদ্রণ করুন, যেমন i r rdi rsi,
  • i r: ভাসমান পয়েন্ট এবং ভেক্টর রেজিস্টার (এক্সএমএম, ই মিমি, জেড এমএম) বাদে সমস্ত রেজিস্টার মুদ্রণ করুন।
  • i r a: সমস্ত নিবন্ধক মুদ্রণ করুন, ভাসমান পয়েন্ট এবং ভেক্টর নিবন্ধ অন্তর্ভুক্ত (x মিমি, ইয়িম, জেড এমএম)।
  • i r f: সমস্ত এফপিইউ ভাসমান রেজিস্টারগুলি মুদ্রণ করুন ( st0-7এবং আরও কয়েকটি f*)

a( all) এবং f( float) এর সাথে নিবন্ধভুক্ত অন্যান্য গ্রুপগুলি এর সাথে পাওয়া যাবে:

maint print reggroups

এখানে নথিবদ্ধ হিসাবে: https://sourceware.org/gdb/current/onlinesocs/gdb/Register.html# রেজিস্টারস

টিপস :

  • xmm012 xmm15, 128 বিট, প্রায় প্রতিটি আধুনিক মেশিনে এটি রয়েছে, তারা 1999 সালে প্রকাশিত হয়েছিল।
  • ymm0~ ymm15, 256 বিট হয়, নতুন মেশিনটি সাধারণত এটি থাকে, সেগুলি 2011 এ প্রকাশিত হয়।
  • zmm05 zmm31, 512 বিট, সাধারণ পিসি সম্ভবত এটি না থাকে ( ২০১ 2016 সালের হিসাবে ), এগুলি ২০১৩ সালে প্রকাশিত হয়েছিল এবং মূলত এ পর্যন্ত সার্ভারগুলিতে ব্যবহৃত হয়।
  • Xmm / ymm / zmm এর কেবল একটি সিরিয়াল প্রদর্শিত হবে, কারণ তারা বিভিন্ন মোডে একই রেজিস্টার। আমার মেশিনে ymm দেখানো হয়েছে।

6

p $eax জিডিবি 7.7.1 হিসাবে কাজ করে

জিডিবি 7.7.১ হিসাবে, আপনি যে কমান্ডটি চেষ্টা করেছেন তা কাজ করে:

set $eax = 0
p $eax
# $1 = 0
set $eax = 1
p $eax
# $2 = 1

এই সিনট্যাক্সটি বিভিন্ন ইউনিয়নের সদস্যদের মধ্যে যেমন নির্বাচন করতে ব্যবহৃত হয় যেমন এআরএম ভাসমান পয়েন্ট রেজিস্টারগুলির জন্য যা ভাসমান পয়েন্ট বা পূর্ণসংখ্যার হতে পারে:

p $s0.f
p $s0.u

ডক্স থেকে :

পূর্বনির্ধারিত মেশিন-নির্দিষ্ট রেজিস্টার্ড নামগুলির মধ্যে একটি না হলে 'by' এর আগে থাকা কোনও নামই সুবিধামত চলকটির জন্য ব্যবহার করা যেতে পারে।

এবং :

আপনি '$' দিয়ে শুরু হওয়া নামের সাথে ভেরিয়েবল হিসাবে মেশিনের নিবন্ধের বিষয়বস্তুগুলিকে উল্লেখ করতে পারেন express প্রতিটি মেশিনের জন্য রেজিস্টারের নাম আলাদা; আপনার মেশিনে ব্যবহৃত নামগুলি দেখতে তথ্য নিবন্ধগুলি ব্যবহার করুন।

তবে এখন পর্যন্ত নিয়ন্ত্রণ রেজিস্টারগুলিতে আমার খুব ভাগ্য হয়নি: ওএসডিভ 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 || 2005 এর বৈশিষ্ট্যটির অনুরোধ https://www.sourceware.org/ML/gdb/2005-03/msg00158.html || alt.lang.asm 2013 https://groups.google.com/forum/#!topic/alt.lang.asm/JC7YS3Wu31I

এআরএম ভাসমান পয়েন্ট রেজিস্টার

দেখুন: /reverseengineering/8992/floating-Point-register-on-arm/20623#20623


2
এই $সিনট্যাক্সটি দিয়ে এক্সপ্রেশনগুলিতে নিবন্ধগুলি ব্যবহার করতে সক্ষম হওয়ায় দুর্দান্ত।
পুনরুদ্ধার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.