나는 메모리 레이아웃 할당 와 조금 우리가 말할 수 혼란 스러워요.gcc가 스택 메모리 할당
char array[10];
int flag = 0;
여전히 메모리의 할당이 어떻게 할당이 변경되지 않은 와서 같은
(gdb) x/x array : 0xbffff4bc
(gdb) x/x flag : 0xbffff4cc
입니다 :
(gdb) x/x array : 0xbffff4bc
(gdb) x/x flag : 0xbffff4cc
그러나, 우리가 선을 반전 말할 수? 두 번째 옵션의 플래그가 스택의 배열보다 위에 있지 않아야합니까? 그래서 왜 스택에있는 정수 위에 배열에 할당되는 메모리가 있습니까? -fno-stack-protector
플래그로 컴파일 중입니까? 이 맞나요? 첫 번째 대답을 읽을 때 내가 GCC에서 내 코드를 실행하고 4.7.2 데비안
난 그냥 memory-allocation-issue-buffer-overflow-attack 그러나 같은 문제의 게시물을 발견
편집, 코멘트에 컴파일 때 물리게 -fno-stack-protector
으로 문제를 해결해야합니다 (선언 순서에 따라 순차적으로 메모리 할당). 그것은 비록 내 경우에는 작동하지 않습니다. 제안 사항이 있으십니까?
아래에 메모리를 assgneed 것을 의미 지역 변수.컴파일러는 이러한 변수를 자유롭게 재정렬 할 수 있습니다. 모든 준비가 "올바른"것입니다. 왜 이상하다고 생각하니? 배열의 크기가 "고르지"(10 바이트) 때문에 컴파일러가 주변을 이동하여 더 잘 묶거나 정렬 할 수있는 것은 놀라운 일이 아닙니다. – AnT
기본적으로 버퍼 오버플로 및 플래그 내용을 변경하려고합니다. 그래서 버퍼 위에 플래그가있을 때 해당 버퍼 오버플로 작동하지 않아야합니다. –
왜 당신은 할 수 있어야한다고 생각하니? –