だから私はセキュリティクラスの割り当てに取り組んでおり、割り当てはスタックオーバーフローを使用して、プログラムで使用されたことのない関数 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を使用して作成しようとしました関数への戻りアドレスポイント。
誰かがスタックメモリの仕組みに精通していて、どこが間違っているのかを説明できれば、それは素晴らしいことですか?