Menggunakan contoh ini berasal dari wikipedia, di mana DrawSquare () memanggil DrawLine (),
(Perhatikan bahwa diagram ini memiliki alamat tinggi di bagian bawah dan alamat rendah di bagian atas.)
Adakah yang bisa menjelaskan kepada saya apa ebp
dan esp
dalam konteks ini?
Dari apa yang saya lihat, saya akan mengatakan penunjuk tumpukan selalu menunjuk ke atas tumpukan, dan penunjuk dasar ke awal fungsi saat ini? Atau apa?
sunting: Maksud saya ini dalam konteks program windows
edit2: Dan bagaimana cara eip
kerjanya juga?
edit3: Saya memiliki kode berikut dari MSVC ++:
var_C= dword ptr -0Ch
var_8= dword ptr -8
var_4= dword ptr -4
hInstance= dword ptr 8
hPrevInstance= dword ptr 0Ch
lpCmdLine= dword ptr 10h
nShowCmd= dword ptr 14h
Semuanya tampaknya dword, sehingga masing-masing mengambil 4 byte. Jadi saya bisa melihat ada celah dari hInstance ke var_4 dari 4 byte. Apakah mereka? Saya menganggap itu adalah alamat pengirim, seperti yang dapat dilihat pada gambar wikipedia?
(catatan editor: menghapus kutipan panjang dari jawaban Michael, yang tidak termasuk dalam pertanyaan, tetapi pertanyaan lanjutan telah diedit):
Ini karena aliran pemanggilan fungsi adalah:
* Push parameters (hInstance, etc.)
* Call function, which pushes return address
* Push ebp
* Allocate space for locals
Pertanyaan saya (terakhir, saya harap!) Sekarang adalah, apa sebenarnya yang terjadi sejak saya memunculkan argumen fungsi yang ingin saya panggil hingga akhir prolog? Saya ingin tahu bagaimana ebp, esp berkembang pada saat-saat itu (saya sudah mengerti bagaimana prolog bekerja, saya hanya ingin tahu apa yang terjadi setelah saya mendorong argumen di stack dan sebelum prolog).