I don't know if decompilers are able to do something about it, but there's a "neat" technique where your machine code can be interpreted as two different sequences of instructions depending where you start instruction decoding. For a simple but artificial example of what I mean:
The following sequence of bytes:
b8 50 83 ec 10
Decodes as: mov $0x10ec8350, %eax
if you start at the first byte, and, if you start at the second byte, as: push %eax
sub $0x10, %esp
Here I essentially hid an instruction in the mov'ed data, because that's the easiest way to create something like that, but I've seen mind blowing examples of this technique. I unfortunately don't remember where.