
368
3
부
시스템의 구현
enum JpegReadMode {
JPEG_READ_HEADER, // 기본 헤더만 읽는다
JPEG_READ_TABLES, // 헤더와 테이블 (quant, Huffman 등)을 읽는다
JPEG_READ_ALL, // 모든 데이터를 읽는다
}
이 세 값을 대입해보기 위해 세 가지 다른 퍼저를 작성할 필요는 없으며 하나의 퍼저에서 입력
의 서브셋을 해시하고 그 결과를 라이브러리 기능을 다르게 조합해서 실행하는 데 사용할 수
있다. 다만 다양한 해시 결과를 출력하기 위한 충분한 입력값을 사용해야 한다는 점만 유의하
자. 만일 파일 포맷 규칙상 입력값의 처음
N
개의 바이트가 모두 같아야 한다면 옵션에 영향을
줄 바이트를 결정할 때
N
개보다 최소한 하나라도 더 많은 바이트값을 사용해야 한다.
또 다른 방법은 앞서 언급했던
FuzzedDataProvider
를 이용해 입력값을 나누거나 라이브러리
파라미터를 설정할 때 입력의 처음 몇 바이트를 빼버리면 된다. 그러면 나머지 바이트만 퍼즈
대상의 입력으로 전달된다. 반면 입력값을 해싱하면 입력값이 조금만 바뀌어도 설정이 크게 바
뀌어 버리기도 하므로 입력값을 나눠서 퍼즈 엔진이 선택한 옵션과 코드 동작 간의 관계를 더
잘 추적할 수 있도록 하는 것도 대안이다. 다만 이 방법들은 기존 시드