If it's easy, then you could just run the program as normal with a few test cases. If you're a web browser for example, use it to browse some web pages. If you're a BitTorrent client, use it to download some Linux ISOs.
If the interpreter limits the external resources available[1], then you'd have to rephrase the guts of your C program as a pure computation. Then if you had a program for rendering HTML files into BMP files, I would collect a couple examples and run it with them as input.
If necessary, you could embed the test data into a .c file that exercises the rendering code and remove any dependency on user input.
"Just run the program" doesn't constitute a correctness proof. And if you have access to kernel functions at all, I'm sure there's a way to rewrite your own code at runtime while not invoking undefined behavior. It looks like CompCert C's formally verified C Interpreter[1] only allows print, free, and malloc as external resources.
[1] http://compcert.inria.fr/man/manual004.html
But if the test cases you run it on are not comprehensive enough, the behavior of your program might be undefined when run on user input, but not be undefined when run on your test cases.
If the interpreter limits the external resources available[1], then you'd have to rephrase the guts of your C program as a pure computation. Then if you had a program for rendering HTML files into BMP files, I would collect a couple examples and run it with them as input.
If necessary, you could embed the test data into a .c file that exercises the rendering code and remove any dependency on user input.
"Just run the program" doesn't constitute a correctness proof. And if you have access to kernel functions at all, I'm sure there's a way to rewrite your own code at runtime while not invoking undefined behavior. It looks like CompCert C's formally verified C Interpreter[1] only allows print, free, and malloc as external resources. [1] http://compcert.inria.fr/man/manual004.html