가능한 중복은 : 버퍼 오버 플로우 (반환 주소)
how to skip a line doing a buffer overflow in c
main()
기능을 분해. 기본적으로 코드의 다른 명령어로 리턴 주소를 변경하려고합니다.
시나리오 :
function(int a,int b)
{
char buffer[16];
//some operations here..
}
int main()
{
int x = 12;
int y =13;
int p ;
function(x,y);
p = 100;
printf("%d",p);
}
내가 P = 100을 건너 뛸와의 printf 호출에 이동합니다.! GDB에서 함수 호출의 주소를 검사합니다. > 0x080 ..... 뭔가 - main()
및 function()
의 주소의
something --> 0x0804827b
범위.
그러나 프로그램에서 변수의 주소를 &a
을 사용하여 얻으려고 할 때 16 진수 주소는 0xbfeca ...와 같습니다.
왜 그렇습니까? 나는 그 이유를 알지 못해서 반송 주소를 얻거나 반송 주소를 변경할 수조차 못했습니다. 어떻게해야합니까? 그 이유는 무엇일까요?
아마도 ** [이 답변] (http://stackoverflow.com/questions/5280789/how-to-skip-a-line-doing-a-buffer-overflow-in-c/5571224#5571224) * * to * [c에서 버퍼 오버플로를 수행하는 행을 건너 뛰는 방법] (http://stackoverflow.com/q/5280789/203667) * 일부 사용이 가능할 수 있습니다. – jschmier