리눅스에서 buffer overrun 검출하는 tool 이 있나요?

익명 사용자의 이미지

리눅스에서 buffer overrun 을 탐지하고 싶은데요

가령 buffer size 가 10 인데 20byte 를 write 한다던지

이런 것을 찾고 싶은데 GDB 로는 못찾는 것 같더라구요

이런것을 runtime 시check 해 주는 tool 을 찾고 있습니다

알려주시면 감사하겠습니다.

ymir의 이미지

gcc 에 -fsanitize=address 옵션 주고 빌드 해보세요.
https://github.com/google/sanitizers/wiki/AddressSanitizer

dynamic allocation 의 경우에는, electric fence 나 dmalloc 같은 것들도 참고해 보시면 될 것 같네요.
memory debugging 용으로 쓰는 애들이라, production code 에는 넣지 않는 게 좋습니다.

가급적이면 위와 같은 애들이 필요한 상황이 생기지 않도록..
꼼꼼하게 정확히 계산해서 코딩을 하는 습관을 들이시는 게 좋습니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

bushi의 이미지

valgrind 에 다양한 기능이 있습니다.
기본 기능이 invalid write/read 를 잡아내는 것이고, 부가 기능들 중의 하나가 memory leak 탐지하는 것일 정도로.
단점은, runtime 에 끼어들어가는 그 특성상, 프로그램의 성능이 어마어마하게 하락하기 때문에 평소와 똑같은 동작조건은 아니라는 것 하나 뿐입니다.