1

だから私はセキュリティクラスの割り当てに取り組んでおり、割り当てはスタックオーバーフローを使用して、プログラムで使用されたことのない関数 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バイトを返すという印象を受けていたので、sfpを別の4つのランダムな文字で埋めてから、\ xfc \ x84 \ x04 \ x08を使用して作成しようとしました関数への戻りアドレスポイント。

誰かがスタックメモリの仕組みに精通していて、どこが間違っているのかを説明できれば、それは素晴らしいことですか?

4

1 に答える 1