Skip to content

Instantly share code, notes, and snippets.

@eaglgenes101
Created January 10, 2018 20:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eaglgenes101/628ce64665389cbb2f969c46bd99aa57 to your computer and use it in GitHub Desktop.
Save eaglgenes101/628ce64665389cbb2f969c46bd99aa57 to your computer and use it in GitHub Desktop.
#!/usr/bin/env julia
import LibArchive
# Load the moby dick source into one buffer
moby = read("mobydick")
# Generate random fuzz mutation
mutate(genome) = (genome .+ sprand(UInt8, size(genome)[1], .000001)) .% 256
patch(original, genome) = (original .+ genome) .% 256
crossover(gen1, gen2) = map(a->rand(0:1)==0?gen1[a]:gen2[a], 1:size(gen1))
function fitness(genome)
mempt = Vector{UInt8}()
memptwriter = LibArchive.Writer(mempt)
LibArchive.add_filter(memptwriter, LibArchive.FilterType.COMPRESS)
LibArchive.add_filter(memptwriter, "lzma")
entry = LibArchive.Entry(memptwriter)
LibArchive.set_pathname(entry, "a")
LibArchive.set_size(entry, size(moby)[1])
LibArchive.set_perm(entry, 0o644)
LibArchive.set_filetype(entry, LibArchive.FileType.REG)
LibArchive.write_header(memptwriter, entry)
write(memptwriter, patch(moby, genome))
LibArchive.finish_entry(memptwriter)
compsize = size(mempt)
diff = nnz(genome)
return diff - 2*compressed
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment