There are a number of options for assemblers to be able to patch binaries. You could use keystone, llvm, build your own, or use any number of other public assemblers. But what if you want to be able to perfectly round-trip and match an existing disassembler? It turns out this is a surprisingly good problem for a genetic algorithm with a fitness function that carefully measures "distance" to a disassembler's output. Since speed is important, pre-fit offspring are precomputed for every mnemonic to jump start convergence. Andrew prototyped a PowerPC assembler and the results were so promising it's now shipping as the default for that platform in Binary Ninja. So what pitfalls are there? Which architectures will and won't work with such an approach? And what are other advantages of applying this unique technique?