[英]Smashing the Stack
因此,我正在為安全類分配任務,該任務是使用堆棧溢出來調用函數oopsDidISmashTheStack,而該函數從未在程序中使用過。
#include <stdio.h>
#include <stdlib.h>
int oopsDidISmashTheStack(void)
{
printf("Yup, smashing the stack is fun!\n");
exit(0);
}
int getUserInput (void)
{
char buf[12];
gets(buf);
return(1);
}
int main(void)
{
getUserInput ();
printf("Overflow failed, normal return\n");
return(1);
}
我理解在buf變量之后是sfp的概念,然后我不知道的返回地址就是將返回值更改為函數所在地址0x080484fc的輸入。 我以為需要12個字符來填充緩沖區,然后我覺得sfp並返回4個字節,所以我嘗試用另外4個隨機字符填充sfp,然后使用\\ xfc \\ x84 \\ x04 \\ x08進行填充返回地址指向該函數。
如果有人熟悉堆棧存儲器的工作原理並且可以解釋我要去哪里,那會很棒嗎?
您幾乎在正確的軌道上。 我建議您查看堆棧,看看寄信人地址是否在您認為的位置。 里面可能還有其他東西。 還要仔細檢查字節序,
我假設這是您的輸入字符串?
“ 012345678901xxxx \\ xfc \\ x84 \\ x04 \\ x08”
程序的輸出是什么,通常,如果您關閉但不完全正確,則程序崩潰:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.