CSAPP
-
설명 void echo() { char buf[8]; // 대충 buf에 사용자 입력 값 삽입하는 코드 } void caller() { echo(); } char buf[8] 선언 시 여러 상태정보와 함께 스택에 24바이트 할당한다. buf와 저장된 리턴 포인터 사이의 16바이트는 사용되지 않는다. echo()의 buf에 8문자(널 문자 포함)를 입력하면 buf에 할당된 공간에 알맞게 저장한다. 하지만 보다 긴 문자열을 입력하면 스택에 저장된 정보의 일부를 덮어쓰게 된다. 23개 까지는 심각한 결과가 발생하지 않지만, 이 이상부터는 리턴 포인터의 값과 저장 상태까지도 손상된다. 리턴 주소가 손상되면 ret instruction이 프로그램을 전혀 예상하지 못한 곳으로 점프하게 한다. 저장 공간을 오버플로우..
[CS] 버퍼 오버플로우와 공격 대응 기법 (Buffer Overflow)설명 void echo() { char buf[8]; // 대충 buf에 사용자 입력 값 삽입하는 코드 } void caller() { echo(); } char buf[8] 선언 시 여러 상태정보와 함께 스택에 24바이트 할당한다. buf와 저장된 리턴 포인터 사이의 16바이트는 사용되지 않는다. echo()의 buf에 8문자(널 문자 포함)를 입력하면 buf에 할당된 공간에 알맞게 저장한다. 하지만 보다 긴 문자열을 입력하면 스택에 저장된 정보의 일부를 덮어쓰게 된다. 23개 까지는 심각한 결과가 발생하지 않지만, 이 이상부터는 리턴 포인터의 값과 저장 상태까지도 손상된다. 리턴 주소가 손상되면 ret instruction이 프로그램을 전혀 예상하지 못한 곳으로 점프하게 한다. 저장 공간을 오버플로우..
2023.11.14 -
실수를 표현하는 방식으로 꽤 많은 종류의 형태가 제안되었지만, 현재까지 가장 많이 사용하는 방식은 IEEE 표준 754 부동 소수점 표현이다. 십진수 표기법 이진수 표기법 (비트) 이진수 표기법의 한계 0.2 같은 경우에는 이진수 표기법으로 정확하게 표기가 불가능하다. 매우 큰 수를 표현하기에 부적합하다 : 예를 들어 5 * 2^100은 101000000000…. (0이 100개 필요) IEEE 부동소수점 S는 숫자가 음수인지 양수인지 결정, 해당 비트는 MSB(Most Significant Bit) 처리 M은 분수 이진수 (가수부) E는 2의 거듭제곱인 가중치 단정밀도 (float) : 앞 8비트 = 지수, 뒤 23비트 = 분수 배정밀도 (double) : 앞 11비트 = 지수, 뒤 52비트 = 분수 ..
[CS] 부동 소수점 (Floating Point)실수를 표현하는 방식으로 꽤 많은 종류의 형태가 제안되었지만, 현재까지 가장 많이 사용하는 방식은 IEEE 표준 754 부동 소수점 표현이다. 십진수 표기법 이진수 표기법 (비트) 이진수 표기법의 한계 0.2 같은 경우에는 이진수 표기법으로 정확하게 표기가 불가능하다. 매우 큰 수를 표현하기에 부적합하다 : 예를 들어 5 * 2^100은 101000000000…. (0이 100개 필요) IEEE 부동소수점 S는 숫자가 음수인지 양수인지 결정, 해당 비트는 MSB(Most Significant Bit) 처리 M은 분수 이진수 (가수부) E는 2의 거듭제곱인 가중치 단정밀도 (float) : 앞 8비트 = 지수, 뒤 23비트 = 분수 배정밀도 (double) : 앞 11비트 = 지수, 뒤 52비트 = 분수 ..
2023.11.14