Я сейчас пишу парсер PDF в Coq вместе с кем-то еще. Хотя в данном случае цель состоит в том, чтобы создать безопасный кусок кода, выполнение чего-то подобного может определенно помочь в поиске фатальных ошибок логики.
После того, как вы ознакомитесь с инструментом, большинство доказательств станет легким. Более сложные доказательства приводят к интересным тестам, которые иногда могут вызывать ошибки в реальных существующих программах. (А для поиска ошибок вы можете просто принять теоремы в качестве аксиом, если вы уверены, что ошибок нет, серьезных доказательств не требуется.)
Около месяца назад мы столкнулись с проблемой разбора PDF-файлов с несколькими / более старыми таблицами XREF. Мы не смогли доказать, что разбор прекращается. Размышляя об этом, я создал PDF-файл с зацикленными / предыдущими указателями в трейлере (кто бы мог подумать об этом ?:-P), что, естественно, заставило некоторых зрителей зацикливаться вечно. (В частности, почти любой попплер-зритель на Ubuntu. Заставил меня смеяться и проклинать Gnome / evince-thumbnailer за то, что он съел весь мой процессор. Думаю, они исправили это сейчас, хотя.)
Использование Coq для поиска ошибок низкого уровня будет трудным. Для того, чтобы что-то доказать, вам нужна модель поведения программы. Для проблем со стеком / кучей вам, вероятно, придется смоделировать выполнение на уровне процессора или, по крайней мере, на уровне C. Хотя технически это возможно, я бы сказал, что это не стоит усилий.
Использование SPLint для C или написание собственного средства проверки на выбранном вами языке должно быть более эффективным.