One of the major hurdles of x86 disassembly is separating code from data. All available open-source disassembly library only perform a straight line disassembly (starts from the top and skips errors by 1 byte), compared with OllyDBG which apparently uses a control flow disassembly (using opcodes like CALL and JMP) or IDA using heuristics and emulation. However these two aren't open-source.
My question is, is there any open-source library or project that uses a better technique than simple straight line disassembly (control flow or heuristics based) ?
I stumbled upon a paper using a machine learning approach ? is there an open-source implementation of this approach ?