簡體   English   中英

砸棧

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM