আমি কোডের একটি অংশ জুড়ে এসেছি void *p = &&abc;
। এখানকার তাৎপর্য কী &&
? আমি মূল্যের রেফারেন্সগুলি সম্পর্কে জানি তবে আমি মনে করি &&
এই প্রসঙ্গে ব্যবহৃত অন্যরকম। কি &&
নির্দেশ করে void *p = &&abc;
?
আমি কোডের একটি অংশ জুড়ে এসেছি void *p = &&abc;
। এখানকার তাৎপর্য কী &&
? আমি মূল্যের রেফারেন্সগুলি সম্পর্কে জানি তবে আমি মনে করি &&
এই প্রসঙ্গে ব্যবহৃত অন্যরকম। কি &&
নির্দেশ করে void *p = &&abc;
?
উত্তর:
&&
বর্তমান ফাংশনে সংজ্ঞায়িত লেবেলের ঠিকানা পাওয়ার জন্য জিসিসির এক্সটেনশন ।
void *p = &&abc
স্ট্যান্ডার্ড সি 99 এবং সি ++ এ অবৈধ।
এটি g ++ দিয়ে সংকলন করে।
void*
।
__forceinline
? __declspec(naked)
? আমার প্রিয় এমএসভিসিজমগুলির মধ্যে একটি হ'ল:, template<typename T> class X { friend T; }
যা সি ++ 03 অবৈধ।
এটি কোনও লেবেলের ঠিকানা এবং এটি জিসিসির নির্দিষ্ট বৈশিষ্ট্য ।
int main(void) {
void* startp;
s:
startp = &&s;
printf("the assignment above starts at address %p\n", startp);
return 0;
}
আপনি এটি পরীক্ষা করে নিজেই বের করতে পারতেন:
int main(void) {
void* startp;
int a;
startp = &&a;
printf("startp=%p\n", startp);
return 0;
}
যে ক্ষেত্রে জিসিসি বলেছেন:
ত্রুটি: লেবেল 'এ' ব্যবহৃত তবে সংজ্ঞায়িত হয়নি
এটি সত্যই বুঝতে আপনার এসেম্বেবলারকে জানতে হবে, তবে আমি আপনাকে একটি লেবেলের ঠিকানার অর্থ কী তা বোঝানোর চেষ্টা করব।
ওএস ডিস্ক থেকে .exe ফাইলটি লোড করার পরে, "লোডার" নামে অপারেটিং সিস্টেমের একটি উপাদান (উইন্ডোতে "পিই লোডার" থাকে, লিনাক্সটিতে "ইএলএফ লোডার" থাকে বা এমনকি অন্যরাও থাকে, যদি তারা সংকলিত থাকে তবে কার্নেল), এটি সেই প্রোগ্রামটির একটি "ভার্চুয়ালাইজেশন" করে, এটি একটি প্রক্রিয়াতে রূপান্তরিত করে।
এই প্রক্রিয়াটি মনে করে যে এটি র্যামের মধ্যে একমাত্র এবং এতে সম্পূর্ণ র্যামের অ্যাক্সেস রয়েছে (এটি একটি 32-বিট মেশিনে 0x00000000-0xFFFFFFFF)।
(উপরেরটি কী ঘটছে তার একটি সংক্ষিপ্ত ওভারভিউ, এটি পুরোপুরি বুঝতে আপনাকে সত্যই সমাবেশ শিখতে হবে, সুতরাং আমার সাথে সহ্য করুন)
এখন, উত্স কোডের লেবেলটি মূলত একটি ঠিকানা। "গেটো লেবেল;" এই ঠিকানায় লাফানো ছাড়া আর কিছুই করেন না ( সমাবেশে নির্দেশিকা নির্দেশকের কথা ভাবেন )। এই লেবেলটি এই র্যামের ঠিকানা সঞ্চয় করে এবং আপনি সেই ঠিকানাটি কীভাবে খুঁজে পেতে পারেন।
আপনি ASM শিখার পরে, আপনি বুঝতে পারবেন যে ঠিকানাটি .text
এক্সিকিউটেবলের বিভাগের মধ্যে থাকা কোনও নির্দেশকে নির্দেশ করে। .text
অধ্যায় এক যা নিষ্পন্ন করা হবে আপনি প্রোগ্রামের (বাইনারি) কোড ঝুলিতে নেই।
আপনি এটি দিয়ে এটি পরিদর্শন করতে পারেন:
objdump -x a.out
বর্ণনা অনুযায়ী জিসিসি , আপনি একটি লাফ টেবিল আরম্ভ করতে ব্যবহার করতে পারেন। কিছু স্ক্যানার জেনারেটর যেমন রি 2 সি ( -g
প্যারামিটার দেখুন) আরও কমপ্যাক্ট স্ক্যানার তৈরি করতে এটি ব্যবহার করে। সম্ভবত এখানে একই প্রযুক্তি ব্যবহার করে কোনও পার্সার জেনারেটর রয়েছে ।