아래 코드의 출력은 "오버플로"이지만 명시 적으로 func
함수를 호출하지 않았습니다. 어떻게 작동합니까?명시 적으로 호출하지 않고 함수를 실행하는 코드를 설명 하시겠습니까?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int copy(char *input)
{
char var[20];
strcpy(var, input);
return 0;
}
int func(void)
{
printf("Overflow\n");
return 0;
}
int main(int argc, char *argv[])
{
char str[] = "AAAABBBBCCCCDDDDEEEEFFFFGGGG";
int *p = (int *)&str[24];
*p = (int)func;
copy(str);
return 0;
}
버퍼 오버플로를 의미합니까 ...? – JosephH
이것은 정확하게 해커가 의미없는 코드를 실행하기 위해 보안되지 않은 프로그램을 얻을 수있는 방법입니다. 이를 이해하려면 컴파일러, 런타임 환경 및 CPU 아키텍처에 대한 저급 지식이 필요합니다. – Jon
참고 사항 : func의 주소가 0 바이트 인 경우 예상대로 작동하지 않습니다. – aaronps