Asas Kejuruteraan Balikan & Analisis Binari · Pelajaran

Tindanan dan Konvensyen Panggilan

Dalami cara fungsi menghantar argumen, memulangkan nilai dan mengurus bingkai tindanan, iaitu pengetahuan yang menjadikan kod dinyahhimpun mudah dibaca.

Pelajaran 4 daripada 413 langkah

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.

  • push mengurangkan RSP dan menulis
  • pop membaca dan menambah RSP
push rax   ; rsp -= 8, [rsp] = rax
pop  rbx   ; rbx = [rsp], rsp += 8

RSP 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 locals

Epilog Fungsi

Epilog membalikkan prolog, memulihkan bingkai pemanggil sebelum membuat pulangan.

mov rsp, rbp
pop rbp
ret

Konvensyen 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 foo

Konvensyen 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 bar

Disimpan 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.

Percuma untuk bermula

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

  1. Asas Assembly x86/x64
  2. Operasi Daftar dan Memori
  3. Aliran Kawalan dan Panggilan Fungsi
  4. Tindanan dan Konvensyen Panggilan
← Kembali ke Asas Kejuruteraan Balikan & Analisis Binari