Tôi muốn, như tiêu đề nói, in nội dung của ngăn xếp trong chương trình C của tôi.Làm cách nào để in nội dung của ngăn xếp trong chương trình C?
Dưới đây là các bước tôi đã:
tôi đã thực hiện một file lắp ráp đơn giản (helper.s) trong đó có một hàm trả về địa chỉ của thanh ghi ebp tôi và một hàm trả về địa chỉ của tôi đặc biệt là đăng ký
.globl get_esp get_esp: movl %esp, %eax ret # get_ebp is defined similarly, and included in the .globl section
- tôi gọi là
get_esp()
vàget_ebp()
chức năng từ chương trình của tôi C (fpC = get_esp();
nơi FPC là một int) - I (thành công, tôi nghĩ) in chỉnh sửa địa chỉ của sổ đăng ký đặc biệt và ebp của tôi (
fprintf (stderr, "%x", fcP);
) - Tôi đã thử và không in được nội dung của sổ đăng ký đặc biệt của mình. (Tôi đã thử
fprintf (sderr, "%d", *fcP);
vàfprintf (sderr, "%x", *((int *)fcP));
, cùng với các phương pháp khác). Chương trình của tôi truy cập lỗi phân đoạn khi chạy khi dòng này được xử lý.
Tôi đang làm gì sai?
EDIT: Điều này phải được thực hiện bằng cách gọi các chức năng lắp ráp này để có được các con trỏ ngăn xếp. EDIT2: Đây là bài tập về nhà.
Bạn có ý gì khi nói không thành công? Bạn đã nhận được kết quả gì và bạn mong đợi điều gì? –
Để in con trỏ, bạn phải sử dụng 'printf ("% p ", (void *) (p))'. "Nội dung của% esp" là một con trỏ. –
@CarlNorum: Không, việc sử dụng 'printf' chỉ đơn giản là bắt buộc theo tiêu chuẩn C. (Cf. "đối số variadic".) –