mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #4360 from mattaereal/doc_patches-1
Docs: Adding AFL's alternative configuration with clang.
This commit is contained in:
		
						commit
						ce4b233f8f
					
				| @ -184,7 +184,8 @@ does not fail if e.g. the code contains an error. This way, internal problems in | ||||
| can be found by fuzzing tools. | ||||
| 
 | ||||
| We mainly use `AFL <http://lcamtuf.coredump.cx/afl/>`_ for fuzzing. You need to download and | ||||
| build AFL manually. Next, build Solidity (or just the ``solfuzzer`` binary) with AFL as your compiler: | ||||
| install AFL packages from your repos (afl, afl-clang) or build them manually. | ||||
| Next, build Solidity (or just the ``solfuzzer`` binary) with AFL as your compiler: | ||||
| 
 | ||||
| :: | ||||
| 
 | ||||
| @ -194,6 +195,47 @@ build AFL manually. Next, build Solidity (or just the ``solfuzzer`` binary) with | ||||
|     cmake .. -DCMAKE_C_COMPILER=path/to/afl-gcc -DCMAKE_CXX_COMPILER=path/to/afl-g++ | ||||
|     make solfuzzer | ||||
| 
 | ||||
| At this stage you should be able to see a message similar to the following: | ||||
| 
 | ||||
| :: | ||||
|      | ||||
|     Scanning dependencies of target solfuzzer                             | ||||
|     [ 98%] Building CXX object test/tools/CMakeFiles/solfuzzer.dir/fuzzer.cpp.o          | ||||
|     afl-cc 2.52b by <lcamtuf@google.com>                                                        | ||||
|     afl-as 2.52b by <lcamtuf@google.com>                                                                    | ||||
|     [+] Instrumented 1949 locations (64-bit, non-hardened mode, ratio 100%). | ||||
|     [100%] Linking CXX executable solfuzzer        | ||||
| 
 | ||||
| If the instrumentation messages did not appear, try switching the cmake flags pointing to AFL's clang binaries: | ||||
| 
 | ||||
| :: | ||||
|     # if previously failed | ||||
|     make clean | ||||
|     cmake .. -DCMAKE_C_COMPILER=path/to/afl-clang -DCMAKE_CXX_COMPILER=path/to/afl-clang++ | ||||
|     make solfuzzer | ||||
| 
 | ||||
| Othwerise, upon execution the fuzzer will halt with an error saying binary is not instrumented: | ||||
| 
 | ||||
| :: | ||||
| 
 | ||||
|     afl-fuzz 2.52b by <lcamtuf@google.com>                                                                                                           | ||||
|     ... (truncated messages) | ||||
|     [*] Validating target binary... | ||||
| 
 | ||||
|     [-] Looks like the target binary is not instrumented! The fuzzer depends on | ||||
|         compile-time instrumentation to isolate interesting test cases while | ||||
|         mutating the input data. For more information, and for tips on how to | ||||
|         instrument binaries, please see /usr/share/doc/afl-doc/docs/README. | ||||
| 
 | ||||
|         When source code is not available, you may be able to leverage QEMU | ||||
|         mode support. Consult the README for tips on how to enable this. | ||||
|         (It is also possible to use afl-fuzz as a traditional, "dumb" fuzzer. | ||||
|         For that, you can use the -n option - but expect much worse results.) | ||||
| 
 | ||||
|     [-] PROGRAM ABORT : No instrumentation detected | ||||
|              Location : check_binary(), afl-fuzz.c:6920 | ||||
| 
 | ||||
| 
 | ||||
| Next, you need some example source files. This will make it much easer for the fuzzer | ||||
| to find errors. You can either copy some files from the syntax tests or extract test files | ||||
| from the documentation or the other tests: | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user