Gnu এসেমব্লার (জিএএস) এর সিএফআই নির্দেশাবলী কীসের জন্য ব্যবহৃত হয়?


118

প্রতিটি লাইনের পরে একটি .CFI নির্দেশিকা রয়েছে বলে মনে হয় এবং এগুলির প্রাক্তনের বিস্তৃত বিভিন্নতাও রয়েছে,.cfi_startproc , .cfi_endprocইত্যাদি .. এখানে

    .file   "temp.c"
    .text
.globl main
    .type   main, @function
main:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    movq    %rsp, %rbp
    .cfi_offset 6, -16
    .cfi_def_cfa_register 6
    movl    $0, %eax
    leave
    ret
    .cfi_endproc
.LFE0:
    .size   main, .-main
.globl func
    .type   func, @function
func:
.LFB1:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    movq    %rsp, %rbp
    .cfi_offset 6, -16
    .cfi_def_cfa_register 6
    movl    %edi, -4(%rbp)
    movl    %esi, %eax
    movb    %al, -8(%rbp)
    leave
    ret
    .cfi_endproc
.LFE1:
    .size   func, .-func
    .ident  "GCC: (Ubuntu 4.4.1-4ubuntu9) 4.4.1"
    .section    .note.GNU-stack,"",@progbits

আমি এগুলির উদ্দেশ্য পাইনি।


3
এখানেcfi নির্দেশাবলীর বিবরণGNU AS
পাসচালিস

সম্পর্কিত: জিসিসি / ঝনঝন সমাবেশ আউটপুট থেকে কীভাবে "শব্দ" সরিয়ে ফেলবেন? , আপনি যদি নির্দেশনা ছাড়াই কেবল নির্দেশগুলি চান। এসএম ব্লকের সাথে সোর্স লাইনের সাথে রঙিন হাইলাইট করে রঙিন হাইলাইটিং সহ বিভিন্ন উপায় ( বিভিন্ন- x86 সহ) এর বিভিন্ন সংস্করণ থেকে দুর্দান্ত ফিল্টারড এসএম আউটপুট দেখতে আপনার কোডটি gcc.godbolt.org এ রাখা ভাল উপায় is
পিটার

উত্তর:


70

আমি একটি অনুভূতি পেয়েছি এটি কল ফ্রেম তথ্য বোঝায় এবং কল ফ্রেম পরিচালনা করার জন্য একটি GNU AS এক্সটেনশন। বিকাশকারীদের থেকে :

কিছু স্থাপত্যগুলিতে, কল ফ্রেম তথ্য নির্দেশাবলীর সাথে ব্যতিক্রম হ্যান্ডলিং পরিচালনা করতে হবে। এই নির্দেশাবলী সমাবেশ থেকে সরাসরি ব্যতিক্রম পরিচালনা পরিচালনা করতে ব্যবহৃত হয়। এই নির্দেশাবলী পাওয়ার লিনাক্সে উপলব্ধ, যদি কোনও কারণে (কোড বেসের বহনযোগ্যতা, উদাহরণস্বরূপ), জিসিসি উত্পন্ন ব্যতিক্রম হ্যান্ডলিং তথ্য যথেষ্ট নয় not

দেখে মনে হচ্ছে এগুলি ব্যতিক্রম হ্যান্ডলিংয়ের প্রয়োজনীয়তার উপর নির্ভর করে কিছু প্ল্যাটফর্মে উত্পন্ন হয়েছে।

আপনি যদি এইগুলি অক্ষম করতে চান তবে দয়া করে ডেভিডের উত্তর দেখুন


5
এছাড়াও আপনি .LFB0, .LFB1, .LFE0, .LFE1
নখ

@ ক্লাউস - সেগুলি সংকলক-উত্পাদিত লেবেল (যেমন আপনি দেখতে পাচ্ছেন :)। স্ট্যাকওভারফ্লো.com
ক্যালকুলাসহুইজ

144

এগুলি অক্ষম করতে, জিসিসি বিকল্পটি ব্যবহার করুন

-fno-asynchronous-unwind-tables

-fno-dwarf2-cfi-asm প্রয়োজন হতে পারে।


12
-fno-dwarf2-cfi-asmপ্রয়োজন হতে পারে
টেকনোসরাস 11'16

যদি আপনি এটি মানব-পঠনযোগ্য এএসএম আউটপুটটির জন্য অক্ষম করে থাকেন তবে কীভাবে জিসিসি / ঝনঝন সমাবেশ আউটপুট থেকে "শব্দ" সরিয়ে ফেলবেন তা দেখুন ? অন্যান্য দরকারী বিকল্প এবং কৌশল জন্য।
পিটার কর্ডেস

30

সিএফআইয়ের নির্দেশাবলী ডিবাগিংয়ের জন্য ব্যবহৃত হয়। এটি ডিবাগারটিকে স্ট্যাকটি আনওয়াইন্ড করার অনুমতি দেয়। উদাহরণস্বরূপ: যদি পদ্ধতি A কল করে বি বি যা তারপরে একটি সাধারণ পদ্ধতিকে কল করে C প্রক্রিয়া সি ব্যর্থ হয়। আপনি এখন জানতে চান কে প্রকৃতপক্ষে সি বলেছিল এবং তারপরে আপনি জানতে চাইতে পারেন কে কে ডেকেছেন

কোনও ডিবাগার স্ট্যাক পয়েন্টার (% আরএসপি) ব্যবহার করে এই স্ট্যাকটি আনওয়াইন্ড করতে পারে এবং% আরবিপি নিবন্ধন করতে পারে, তবে এটিগুলি কীভাবে সন্ধান করতে হবে তা জানা দরকার। সেখান থেকেই সিএফআইয়ের নির্দেশনা আসে।

movq    %rsp, %rbp
.cfi_def_cfa_register 6

সুতরাং এখানে সর্বশেষ লাইনটি বলুন যে "কল ফ্রেম ঠিকানা" এখন নিবন্ধে 6 (% আরবিপি) রয়েছে


2
তবে সিবিএর ব্যতিক্রম হ্যান্ডলিংয়ের ব্যবহারটি ডিবাগিংয়ের চেয়ে বেশি ঘন ঘন হওয়া উচিত বলে আমি মনে করি।
osgx

6
আসলে সিএফএ মানে "ক্যানোনিকাল ফ্রেম ঠিকানা"। এখানে দেখুন ।
ক্যামেরন


1
সিবিআইয়ের নির্দেশাবলী -fomit-frame-pointerআরবিপির বিকল্প হিসাবে (যা জিসিসি বা ঝনঝন -O1এবং উচ্চতর ডিফল্টরূপে রয়েছে ) এর সাথে সংকলিত কোডের জন্যও স্ট্যাক-আনওয়াইন্ডিংকে অনুমতি দেয় । এটি সি ++ ব্যতিক্রম হ্যান্ডলিংয়ের পাশাপাশি ডিবাগার / প্রোফাইলার দ্বারা ব্যবহৃত হয়। Traditionalতিহ্যবাহী আরবিপি ফ্রেম পয়েন্টার সহ কোডে , বর্তমান আরবিপি মান সর্বদা একটি সংরক্ষিত আরবিপি মানকে নির্দেশ করে এবং পূর্ববর্তীটিতে এটি একটি লিঙ্কযুক্ত তালিকা গঠন করে। সেক্ষেত্রে সিএফআইয়ের দরকার নেই। (যদিও ফাংশনগুলিতে কোনও ফ্রেম পয়েন্টার ব্যবহার করা হয়, তবুও সিএফআই সিএফএ রেজিস্টার প্রতিটি আরএসপি পরিবর্তনের জন্য আরও মেটাডেটার দরকার যেমন এড়িয়ে যাচ্ছেন তা এড়িয়ে চলে))
পিটার কর্ডেস

2

এগুলি অক্ষম করতে, জি ++ -fno-exceptionsএর পূর্বে উল্লিখিতগুলির পাশাপাশি প্রয়োজনীয়তা রয়েছে -fno-asynchronous-unwind-tablesযা আপনি ব্যতিক্রম ব্যবহার না করেন use

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