私はCで楽しみと利益のためにスタックを破壊するの例を実行しようとしていますが、コードは次のとおりです(私はUbuntu 64ビットの64ビットマシンを持っています):
int main()
{
int x;
x = 0;
func(1,2,3);
x = 1;
printf("x is : %d\n", x);
}
void func(int a, int b, int c)
{
char buffer[1];
int *ret;
ret = buffer + 17;
(*ret) += 7;
}
上記のコードは正常に動作し、返されたx=1
行は実行されませんが、背後にあるロジックを理解できません。つまり、バッファーに 8 バイト、スタックに保存されたベース ポインターに 8 バイトでret = buffer + 17;
ある必要があります。ret = buffer + 16;
第二に、私の理解では、char buffer[1]
(64 ビット アーキテクチャにより) 8 バイトを使用しており、このバッファを増やしてbuffer[2]
.
よろしく、ヌマン