Sử dụng ví dụ này đến từ wikipedia, trong đó DrawSapes () gọi DrawLine (),
(Lưu ý rằng sơ đồ này có địa chỉ cao ở dưới cùng và địa chỉ thấp ở trên cùng.)
Bất cứ ai có thể giải thích cho tôi những gì ebp
và esp
trong bối cảnh này?
Từ những gì tôi thấy, tôi muốn nói con trỏ ngăn xếp luôn luôn ở đầu ngăn xếp và con trỏ cơ sở đến đầu hàm hiện tại? Hay cái gì?
chỉnh sửa: Tôi có nghĩa là trong bối cảnh của các chương trình windows
edit2: Và nó cũng eip
hoạt động như thế nào ?
edit3: Tôi có đoạn mã sau từ 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
Tất cả chúng dường như là mật khẩu, do đó lấy 4 byte mỗi cái. Vì vậy, tôi có thể thấy có một khoảng cách từ hInstance đến var_4 là 4 byte. Họ là ai? Tôi cho rằng đó là địa chỉ trả lại, như có thể thấy trong ảnh của wikipedia?
(lưu ý của biên tập viên: đã xóa một trích dẫn dài khỏi câu trả lời của Michael, không thuộc câu hỏi, nhưng câu hỏi tiếp theo đã được chỉnh sửa trong):
Điều này là do luồng của lệnh gọi hàm là:
* Push parameters (hInstance, etc.)
* Call function, which pushes return address
* Push ebp
* Allocate space for locals
Câu hỏi của tôi (cuối cùng, tôi hy vọng!) Bây giờ là, chính xác những gì xảy ra từ lúc tôi bật các đối số của hàm tôi muốn gọi đến cuối prolog? Tôi muốn biết ebp, đặc biệt phát triển như thế nào trong những khoảnh khắc đó (tôi đã hiểu cách prolog hoạt động, tôi chỉ muốn biết những gì đang xảy ra sau khi tôi đẩy các đối số trên stack và trước prolog).