Win32 API fuzzer, to help develop Wine

reddit

Hi,

Recently I created fuzzer which test all possible(at this moment ~10 000) functions from Windows API – https://github.com/qarmin/Win32Fuzzer.

I created it, because I want to help Wine project, but testing one by one app to see if app crashes or not(I done this before) was too monotonous and time consuming.

Project is written in Rust and rust bindings to Windows API – https://github.com/microsoft/windows-rs

It should help to find regressions, not implemented functions and crashes.

It works in 2 stages:

– Generating project(cargo run inside main repository folder):
– windows-rs source is parsed, and extracted is info about available functions and its arguments.
– Excluded functions are removed e.g. which cannot compile due bugs in parsing algorithm or which have non supported arguments.
– Source files are generated
– Compiling created project(`wine cargo run in created project, require windows Rust GNU installed from https://forge.rust-lang.org/infra/other-installation-methods.html#standalone-installers)

https://preview.redd.it/ux5tnjwfixm81.png?width=915&format=png&auto=webp&s=fc69bfebdb1d6d879450e2fee664212b300a1d6a

I prepared text file about things that I found with this project – https://github.com/qarmin/Win32Fuzzer/releases/download/1.0.0/7.3.staging.results.txt e.g.:

– 916 functions which are not implemented in Wine(that means, that executing such functions will crash app with error `wine: Call from 000000017002CA78 to unimplemented function winspool.drv.CloseSpoolFileHandle, aborting\)`
– 32 functions not implemented in Windows 10 20H2(probably functions are available in later windows versions)
– 186 functions which crashes on Windows(probably also crashes on Linux and I don't think that it is worth to check them)
– 73 functions which crashes app on Linux(but not on Windows), feel free to test it and report to https://bugs.winehq.org

When executing app, info about current executed function and its arguments is written to `results.txt` file.

This is my third created fuzzer, there was also Qarminer(Godot) written in GDScript and gtk-rs-fuzzer(GTK) written also in Rust, which also found several crashes and invalid behavior.

Project can be configured by testing only small subset of classes/functions by adding `settings.txt file

Binaries to test are available here https://github.com/qarmin/Win32Fuzzer/releases/tag/1.0.0

TODO

– Report all functions which crashes on Linux at https://bugs.winehq.org
– Support more arguments, that currently are ignored

I hope, that this project will help to increase number of apps/games that properly works on Wine.

submitted by /u/krutkrutrar
[link] [comments]