#include <stdio.h>
#include <stdlib.h>
void badf(int n, char c, char* buffer)
{
int i;
for (i=0; i<n; i++)
{
buffer[i]=c;
}
}
void f(int n, char c)
{
char buffer[16];
badf(n,c,buffer);
}
void message ()
{
printf("Hello\n");
}
int main()
{
f(32,0x08048411);
return 0;
}
これは私がこれまでに入手したコードです(そのベースを与えられ、それに固執する必要があります。そのため、badf関数とf関数があります)
目標は、プログラムが命令ポインタにオーバーフローすることによってHelloメッセージを出力することです。Ubuntuでデータ表示デバッガーを使用すると、この表示のアドレスは0x0804811だと思います。
プログラムを実行してx/16x $ espを使用すると、スタック内の次のアドレスは1秒になります(上のアドレスから最後の2桁だけが取得されていると推測されます)
不思議に思うのは、次のアドレスを最後の2桁だけでなく、完全なアドレスにする方法です。
また、32は16(上記で定義されたバッファー)+ 8(ベースポインター)+ 8(命令ポインター)から計算されます。
私はこの特定の問題を知っているので、助けてくれてありがとう。