BOF ( Buffer Over Flow )
동적할당 -> 문자열 저장 -> 버퍼 -> 동적할당 해제
임시로 데이터를 저장할 공간 버퍼


CDECL



스택구조
| p의 주소 | sfp | ret | 1 | 2 |
 
*(&p+2) += 4;
해석
&p+2 == ret
*ret = 4(16)
/*
ret의 값에는 주소가 들어가 있기 때문에
ret + 1은 실제로 +4한 주소값이 된다.
그렇기 때문에 주소값 +4를 한 경우 주소에 16을 더한 결과가 된다.
*/
 
int *p
p += 정수 뒤에 자동으로 sizeof(int)가 붙는다.
 
p +- 정수 * sizeof(int)
 
결과



STDCALL


스택구조
| p의 주소 | sfp | ret | 1 | 2 |
내부에서 arg를 정리하기 때문에 +13을 해주어야 한다.
여기서 +13은 뛰어넘을 코드의 byte 이다.
     
     
     
     
    
FASTCALL



스택구조
 
| p | n1 | n2 | sfp | ret |
 
p의 스택주소에서 16byte 만큼이동해야 ret 주소가 나오므로
*(&p+4) +=13;을 해주면 crack만 출력된다.
여기서 +13은 뛰어넘을 코드의 byte 이다.

결과




+ Recent posts