실제 구현은 플랫폼에 따라 다르지만 잠재적으로 위험한 버퍼 오버 플로우의 원인입니다. 예를 들어,함수 스택이 일반적으로 '올라가는'동안 메모리의 배열이 '아래로 이동'하는 이유가 있습니까?
-------------
| arr[0] | \
------------- \
| arr[1] | -> arr[3] is local to a function
-------------/
| arr[2] |/
-------------
| frame ptr |
-------------
| ret val |
-------------
| ret addr |
-------------
| args |
-------------
내 질문은, 더 나은 동사의 부족에 대한 로컬 배열, 아래로 흐르는 이유가있다? 대신 어레이가 위로 올라가려면 반환 주소를 덮어 쓰는 버퍼 오버플로 오류의 수를 크게 줄이지 않습니까?
부여 된 스레드를 사용하면 현재 호출 한 함수의 반환 주소를 덮어 쓸 수 있습니다. 하지만 지금은 무시하십시오.
과 포인트를 둡니다.이 답변이 가장 좋습니다. 메모리 레이아웃에 대한 자세한 내용은 http://dirac.org/linux/gdb/02a-Memory_Layout_And_The_Stack.php를 참조하십시오. 스택과 힙은 사용되지 않는 메모리 주소 공간을 최대한 활용할 수 있도록 반대 방향으로 커집니다. –