mirror of
https://github.com/AFLplusplus/AFLplusplus.git
synced 2025-06-12 10:08:07 +00:00
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
<img align="right" src="https://raw.githubusercontent.com/AFLplusplus/Website/main/static/aflpp_bg.svg" alt="AFL++ logo" width="250" heigh="250">
|
<img align="right" src="https://raw.githubusercontent.com/AFLplusplus/Website/main/static/aflpp_bg.svg" alt="AFL++ logo" width="250" heigh="250">
|
||||||
|
|
||||||
Release version: [4.06c](https://github.com/AFLplusplus/AFLplusplus/releases)
|
Release version: [4.07c](https://github.com/AFLplusplus/AFLplusplus/releases)
|
||||||
|
|
||||||
GitHub version: 4.07a
|
GitHub version: 4.07c
|
||||||
|
|
||||||
Repository:
|
Repository:
|
||||||
[https://github.com/AFLplusplus/AFLplusplus](https://github.com/AFLplusplus/AFLplusplus)
|
[https://github.com/AFLplusplus/AFLplusplus](https://github.com/AFLplusplus/AFLplusplus)
|
||||||
|
2
TODO.md
2
TODO.md
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
## Should
|
## Should
|
||||||
|
|
||||||
|
- afl-crash-analysis
|
||||||
|
- show in the UI when fuzzing is "done"
|
||||||
- test cmplog for less than 16bit
|
- test cmplog for less than 16bit
|
||||||
- support persistent and deferred fork server in afl-showmap?
|
- support persistent and deferred fork server in afl-showmap?
|
||||||
- better autodetection of shifting runtime timeout values
|
- better autodetection of shifting runtime timeout values
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
This is the list of all noteworthy changes made in every public
|
This is the list of all noteworthy changes made in every public
|
||||||
release of the tool. See README.md for the general instruction manual.
|
release of the tool. See README.md for the general instruction manual.
|
||||||
|
|
||||||
### Version ++4.07a (dev)
|
### Version ++4.07c (release)
|
||||||
- afl-fuzz:
|
- afl-fuzz:
|
||||||
- reverse reading the seeds only on restarts (increases performance)
|
- reverse reading the seeds only on restarts (increases performance)
|
||||||
- new env `AFL_POST_PROCESS_KEEP_ORIGINAL` to keep the orignal
|
- new env `AFL_POST_PROCESS_KEEP_ORIGINAL` to keep the orignal
|
||||||
@ -18,6 +18,7 @@
|
|||||||
- rewrote our PCGUARD pass to be compatible with LLVM 15+ shenanigans,
|
- rewrote our PCGUARD pass to be compatible with LLVM 15+ shenanigans,
|
||||||
requires LLVM 13+ now instead of 10.0.1+
|
requires LLVM 13+ now instead of 10.0.1+
|
||||||
- fallback to native LLVM PCGUARD if our PCGUARD is unavailable
|
- fallback to native LLVM PCGUARD if our PCGUARD is unavailable
|
||||||
|
- fixed a crash in GCC CMPLOG
|
||||||
- afl-showmap:
|
- afl-showmap:
|
||||||
- added custom mutator post_process and send support
|
- added custom mutator post_process and send support
|
||||||
- add `-I filelist` option, an alternative to `-i in_dir`
|
- add `-I filelist` option, an alternative to `-i in_dir`
|
||||||
|
51
docs/FAQ.md
51
docs/FAQ.md
@ -279,3 +279,54 @@ If you find an interesting or important question missing, submit it via
|
|||||||
|
|
||||||
Solution: just do an `export AFL_MAP_SIZE=(the value in the warning)`.
|
Solution: just do an `export AFL_MAP_SIZE=(the value in the warning)`.
|
||||||
</p></details>
|
</p></details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary id="linker-errors">Linker errors.</summary><p>
|
||||||
|
|
||||||
|
If you compile C++ harnesses and see `undefined reference` errors for
|
||||||
|
variables named `__afl_...`, e.g.:
|
||||||
|
|
||||||
|
```
|
||||||
|
/usr/bin/ld: /tmp/test-d3085f.o: in function `foo::test()':
|
||||||
|
test.cpp:(.text._ZN3fooL4testEv[_ZN3fooL4testEv]+0x35): undefined reference to `foo::__afl_connected'
|
||||||
|
clang: error: linker command failed with exit code 1 (use -v to see invocation)
|
||||||
|
```
|
||||||
|
|
||||||
|
Then you use AFL++ macros like `__AFL_LOOP` within a namespace and this
|
||||||
|
will not work.
|
||||||
|
|
||||||
|
Solution: Move that harness portion to the global namespace, e.g. before:
|
||||||
|
```
|
||||||
|
#include <cstdio>
|
||||||
|
namespace foo {
|
||||||
|
static void test() {
|
||||||
|
while(__AFL_LOOP(1000)) {
|
||||||
|
foo::function();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
foo::test();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
after:
|
||||||
|
```
|
||||||
|
#include <cstdio>
|
||||||
|
static void mytest() {
|
||||||
|
while(__AFL_LOOP(1000)) {
|
||||||
|
foo::function();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
namespace foo {
|
||||||
|
static void test() {
|
||||||
|
mytest();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
foo::test();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
</p></details>
|
||||||
|
@ -145,12 +145,15 @@ def deinit(): # optional for Python
|
|||||||
|
|
||||||
- `fuzz` (optional):
|
- `fuzz` (optional):
|
||||||
|
|
||||||
This method performs custom mutations on a given input. It also accepts an
|
This method performs your custom mutations on a given input.
|
||||||
additional test case. Note that this function is optional - but it makes
|
The add_buf is the contents of another queue item that can be used for
|
||||||
sense to use it. You would only skip this if `post_process` is used to fix
|
splicing - or anything else - and can also be ignored. If you are not
|
||||||
checksums etc. so if you are using it, e.g., as a post processing library.
|
using this additional data then define `splice_optout` (see above).
|
||||||
Note that a length > 0 *must* be returned!
|
This function is optional.
|
||||||
The returned output buffer is under **your** memory management!
|
Returing a length of 0 is valid and is interpreted as skipping this
|
||||||
|
one mutation result.
|
||||||
|
For non-Python: the returned output buffer is under **your** memory
|
||||||
|
management!
|
||||||
|
|
||||||
- `describe` (optional):
|
- `describe` (optional):
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
/* Version string: */
|
/* Version string: */
|
||||||
|
|
||||||
// c = release, a = volatile github dev, e = experimental branch
|
// c = release, a = volatile github dev, e = experimental branch
|
||||||
#define VERSION "++4.07a"
|
#define VERSION "++4.07c"
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
* *
|
* *
|
||||||
|
@ -157,6 +157,9 @@ struct afl_cmptrs_pass : afl_base_pass {
|
|||||||
/* We expect it to be a record type. */
|
/* We expect it to be a record type. */
|
||||||
if (TREE_CODE(t) != RECORD_TYPE) return false;
|
if (TREE_CODE(t) != RECORD_TYPE) return false;
|
||||||
|
|
||||||
|
/* The type has an identifier. */
|
||||||
|
if (!TYPE_IDENTIFIER(t)) return false;
|
||||||
|
|
||||||
/* The type of the template is basic_string. */
|
/* The type of the template is basic_string. */
|
||||||
if (strcmp(IDENTIFIER_POINTER(TYPE_IDENTIFIER(t)), "basic_string") != 0)
|
if (strcmp(IDENTIFIER_POINTER(TYPE_IDENTIFIER(t)), "basic_string") != 0)
|
||||||
return false;
|
return false;
|
||||||
@ -201,7 +204,7 @@ struct afl_cmptrs_pass : afl_base_pass {
|
|||||||
/* Now go back to the first data member. Its type should be a
|
/* Now go back to the first data member. Its type should be a
|
||||||
record type named _Alloc_hider. */
|
record type named _Alloc_hider. */
|
||||||
c = TREE_TYPE(c);
|
c = TREE_TYPE(c);
|
||||||
if (!c || TREE_CODE(c) != RECORD_TYPE ||
|
if (!c || TREE_CODE(c) != RECORD_TYPE || !TYPE_IDENTIFIER(t) ||
|
||||||
strcmp(IDENTIFIER_POINTER(TYPE_IDENTIFIER(c)), "_Alloc_hider") != 0)
|
strcmp(IDENTIFIER_POINTER(TYPE_IDENTIFIER(c)), "_Alloc_hider") != 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user