Tindanan dan Konvensyen Panggilan
Dalami cara fungsi menghantar argumen, memulangkan nilai dan mengurus bingkai tindanan, iaitu pengetahuan yang menjadikan kod dinyahhimpun mudah dibaca.
Tindanan dan Konvensyen Panggilan ialah pelajaran Asas Kejuruteraan Balikan & Analisis Binari percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Asas Kejuruteraan Balikan & Analisis Binari, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Asas Kejuruteraan Balikan & Analisis Binari merangkumi sejumlah 4 pelajaran.
Melangkaui Satu Panggilan
Anda boleh membaca arahan x86/x64 asas dan menjejaki aliran kawalan. Untuk benar-benar memahami panggilan fungsi, anda mesti mengetahui timbunan dan konvensyen panggilan.
Peraturan ini menentukan cara argumen tiba dan cara pembersihan dilakukan.
Apakah Timbunan
Timbunan ialah kawasan memori yang berkembang ke bawah (ke arah alamat yang lebih rendah). Ia menyimpan alamat pulangan, daftaran yang disimpan dan pemboleh ubah setempat.
pushmengurangkan RSP dan menulispopmembaca dan menambah RSP
push rax ; rsp -= 8, [rsp] = rax
pop rbx ; rbx = [rsp], rsp += 8RSP dan RBP
Dua daftaran menjejaki timbunan:
- RSP (penuding timbunan) menunjuk ke bahagian atas semasa
- RBP (penuding asas) menambat bingkai semasa
Pemboleh ubah setempat dialamatkan secara relatif kepada RBP, seperti [rbp-8].
Prolog Fungsi
Kebanyakan fungsi bermula dengan prolog yang menyediakan bingkai: simpan penuding asas lama, kemudian arahkan RBP kepada bingkai baharu.
push rbp
mov rbp, rsp
sub rsp, 0x20 ; reserve 32 bytes for localsEpilog Fungsi
Epilog membalikkan prolog, memulihkan bingkai pemanggil sebelum membuat pulangan.
mov rsp, rbp
pop rbp
retKonvensyen Panggilan
Konvensyen panggilan ialah kontrak untuk menghantar argumen dan memulangkan nilai.
- Tempat argumen diletakkan (daftaran atau timbunan)
- Pihak yang membersihkan timbunan
- Daftaran yang mesti dikekalkan
System V AMD64 (Linux x64)
Pada Linux x64, enam argumen integer pertama diletakkan dalam daftaran: rdi, rsi, rdx, rcx, r8, r9. Nilai pulangan diberikan melalui rax.
Argumen tambahan ditumpahkan ke timbunan.
; foo(1, 2, 3)
mov edi, 1
mov esi, 2
mov edx, 3
call fooKonvensyen Microsoft x64
Windows x64 menggunakan daftaran yang berbeza: empat argumen pertama diletakkan dalam rcx, rdx, r8, r9, dan pemanggil memperuntukkan 32 bait ruang bayang.
Mengenal pasti OS memberitahu anda pemetaan yang perlu digunakan semasa membaca argumen.
; Windows: bar(a, b)
mov rcx, a
mov rdx, b
sub rsp, 0x28 ; shadow space + alignment
call barDisimpan Pemanggil berbanding Disimpan Dipanggil
Sesetengah daftaran boleh diubah oleh panggilan (disimpan pemanggil), manakala yang lain mesti dikekalkan (disimpan dipanggil).
Melihat fungsi menolak rbx, rbp dan r12-r15 dalam prolognya merupakan petunjuk kukuh tentang daftaran yang ingin digunakannya.
Membaca Argumen secara Praktikal
Apabila anda tiba di sesuatu fungsi, memetakan daftaran kepada argumen membolehkan anda melabelkannya. Jika kod membaca rdi dahulu pada Linux, itu ialah argumen pertama.
Beginilah penyahhimpunan mentah bertukar menjadi pseudokod yang mudah dibaca seperti send(sock, buf, len).
Argumen yang Dihantar melalui Timbunan
Apabila fungsi mempunyai lebih banyak argumen daripada yang dibenarkan oleh konvensyen dalam daftaran, argumen tambahan ditolak ke timbunan oleh pemanggil. Fungsi yang dipanggil membacanya pada ofset positif daripada RBP, seperti [rbp+0x10].
Mengesan capaian ini membantu anda memulihkan senarai argumen penuh.
; 7th System V argument
mov rax, [rbp+0x10]Semakan Ringkas
Menurut konvensyen System V AMD64, daftaran manakah yang memegang argumen integer FIRST?
Imbas Kembali
Anda kini boleh menyahkod panggilan fungsi pada tahap mesin:
- Timbunan berkembang ke bawah; RSP berada di bahagian atasnya, manakala RBP menambat bingkai
- Prolog/epilog menyediakan dan meruntuhkan bingkai
- Konvensyen panggilan memetakan daftaran kepada argumen (System V berbanding Microsoft x64)
Ini menukar penyahhimpunan yang kabur menjadi tandatangan fungsi yang boleh dikenal pasti.
Pelajari Assembly dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Soalan Lazim
Adakah pelajaran “Tindanan dan Konvensyen Panggilan” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Asas Kejuruteraan Balikan & Analisis Binari, termasuk “Tindanan dan Konvensyen Panggilan”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Asas Kejuruteraan Balikan & Analisis Binari merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Tindanan dan Konvensyen Panggilan”?
Dalami cara fungsi menghantar argumen, memulangkan nilai dan mengurus bingkai tindanan, iaitu pengetahuan yang menjadikan kod dinyahhimpun mudah dibaca. Anda berlatih Asas Kejuruteraan Balikan & Analisis Binari menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Asas Kejuruteraan Balikan & Analisis Binari?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Asas Kejuruteraan Balikan & Analisis Binari di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Tindanan dan Konvensyen Panggilan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Asas Kejuruteraan Balikan & Analisis Binari ini?
Ya. Setiap pelajaran Asas Kejuruteraan Balikan & Analisis Binari menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Asas Assembly x86/x64
- Operasi Daftar dan Memori
- Aliran Kawalan dan Panggilan Fungsi
- Tindanan dan Konvensyen Panggilan