일반적인 트릭은 프로그램의 코드와 변수가 메모리에 레이아웃되는 방식과 관련이 있습니다. 예를 들어, 함수가 호출되면 프로그램 (컴파일러에 의해 삽입 된 코드)은 반환 할 명령어의 주소를 저장해야합니다. 이 32 비트 워드 그냥 스택의 시작 이전 인 경우 그래서, 사람은 할 수 :
void foo()
{
int array[5];
int var = 0;
int var2 = 0;
// read in user input
printf("Enter index and value to write:");
scanf("%i", var);
scanf("%i", var2);
// malicious user might set var to -1 and var2 to an address to execute
// if say the 32-bit value before the stack variables is the instruction to
// return to
array[var] = var2
// return now goes to malicious code
}
(. 그래서 당신의 일이 그런 일이 가능하지 않도록 코드를 구성하는 것입니다 :))
을
함수 호출을 구현하는 방법, 할당 된 스택 변수, 전달 된 값 및 반환 된 반환 값에 대한 규칙을 calling convention이라고합니다. 첨부 된 기사를 읽고 C 관례 회의를 잘 이해하기 바란다.
올바른 답변 옆에있는 확인란을 클릭하여 이전 질문 중 일부에 대한 답변을 수락 할 수 있습니다. –
나는 그 기능에 대해서 알지 못했다. – Recursion