Tôi mới sử dụng stackoverflow, vì vậy tôi xin lỗi trước vì bất kỳ sai lầm nào tôi cam kết.Thay đổi bộ nhớ ngăn xếp từ chương trình C
Tôi đã xem qua câu đố C này Gần đây. Chương trình được đưa ra dưới đây.
#include<stdio.h>
void change()
{
}
int main()
{
printf("\nHello");
change();
printf("\nHai");
printf("\nHow are you?");
return 0;
}
Sản lượng dự kiến là,
Hello
Hai
How are you?
Vấn đề đòi hỏi chúng ta phải thay đổi sản lượng như sau bằng cách thêm một số mã trong sự thay đổi chức năng()
Hello
How are you?
Bạn đang không được phép thực hiện bất kỳ thay đổi nào trong chính().
Tôi đã cố gắng thay đổi địa chỉ trả về của thay đổi hàm() được lưu trữ trong bộ nhớ ngăn xếp và ở đó bằng cách tránh lệnh printf ("\ nHai"). Nhưng tôi nhận được lỗi khi tôi biên dịch bằng gcc.
Mã tôi đã thêm vào thay đổi() được hiển thị bên dưới.
void change()
{
char ch;
*(&ch+10)+=20;
}
Các giá trị thêm vào ch (10 và 20) được cố định bằng cách sử dụng
objdump -d ./a.out
tôi hy vọng sẽ nhận được một số gợi ý để giải quyết vấn đề. Cám ơn bạn trước vì đã dành thời gian và kiên nhẫn của bạn.
Bạn có thể đăng các lỗi bạn nhận được không? – nvoigt
Trước tiên, bạn cần phải tháo rời để kiểm tra vị trí chính xác trong ngăn xếp giá trị trả về được lưu trữ. – m0skit0
Tôi coi đó là "câu đố" nghèo nàn nếu bạn phải dựa vào hành vi không xác định để đạt được kết quả. Kiến thức như vậy không có giá trị gì, trừ khi bạn được bảo mật hệ thống một cách chuyên nghiệp. – DevSolar