| 14 | |
| 15 | |
| 16 | extern "C" int LLVMFuzzerReturnOneInput(const uint8_t *Data, size_t Size, char * AssemblyText) { |
| 17 | LLVMDisasmContextRef Ctx; |
| 18 | std::vector<uint8_t> DataCopy(Data, Data + Size); |
| 19 | uint8_t *p = DataCopy.data(); |
| 20 | int r = 1; |
| 21 | |
| 22 | switch(Data[0]) { |
| 23 | case 0: |
| 24 | Ctx = LLVMCreateDisasmCPUFeatures("i386", "", "", nullptr, 0, nullptr, nullptr); |
| 25 | if (LLVMSetDisasmOptions(Ctx, LLVMDisassembler_Option_AsmPrinterVariant) == 0) { |
| 26 | abort(); |
| 27 | } |
| 28 | break; |
| 29 | //TODO other cases |
| 30 | default: |
| 31 | return 1; |
| 32 | } |
| 33 | assert(Ctx); |
| 34 | |
| 35 | if (LLVMDisasmInstruction(Ctx, p+1, Size-1, 0, AssemblyText, 80) > 0) { |
| 36 | r = 0; |
| 37 | } |
| 38 | LLVMDisasmDispose(Ctx); |
| 39 | |
| 40 | return r; |
| 41 | } |
no outgoing calls
no test coverage detected
searching dependent graphs…