Moderators: phlip, Larson, Moderators General, Prelates
korona wrote:The biggest problem is that, when working with an architecture that has non-constant instruction lengths, it is hard to figure out where instructions start. You basically have to either guess (for example: in x86 assembly 0xEB is often a relative jump with 1-byte offset but it also could be an immediate operand of another instruction) or read the whole basic block from the beginning.
Derek wrote:This just gave me a hilariously bad idea for obfuscated assembly: Write the code in such a way that a mis-aligned jump causes a completely different set of instructions to execute (so the same bits are run twice, but with different alignment and so different instructions).
Derek wrote:korona wrote:The biggest problem is that, when working with an architecture that has non-constant instruction lengths, it is hard to figure out where instructions start. You basically have to either guess (for example: in x86 assembly 0xEB is often a relative jump with 1-byte offset but it also could be an immediate operand of another instruction) or read the whole basic block from the beginning.
This just gave me a hilariously bad idea for obfuscated assembly: Write the code in such a way that a mis-aligned jump causes a completely different set of instructions to execute (so the same bits are run twice, but with different alignment and so different instructions).
Carnildo wrote:Derek wrote:korona wrote:The biggest problem is that, when working with an architecture that has non-constant instruction lengths, it is hard to figure out where instructions start. You basically have to either guess (for example: in x86 assembly 0xEB is often a relative jump with 1-byte offset but it also could be an immediate operand of another instruction) or read the whole basic block from the beginning.
This just gave me a hilariously bad idea for obfuscated assembly: Write the code in such a way that a mis-aligned jump causes a completely different set of instructions to execute (so the same bits are run twice, but with different alignment and so different instructions).
I've seen it. It gave my disassembler fits.
Derek wrote:Carnildo wrote:Derek wrote:korona wrote:The biggest problem is that, when working with an architecture that has non-constant instruction lengths, it is hard to figure out where instructions start. You basically have to either guess (for example: in x86 assembly 0xEB is often a relative jump with 1-byte offset but it also could be an immediate operand of another instruction) or read the whole basic block from the beginning.
This just gave me a hilariously bad idea for obfuscated assembly: Write the code in such a way that a mis-aligned jump causes a completely different set of instructions to execute (so the same bits are run twice, but with different alignment and so different instructions).
I've seen it. It gave my disassembler fits.
I would love to see that, if you have a link.
Derek wrote:Carnildo wrote:Derek wrote:korona wrote:The biggest problem is that, when working with an architecture that has non-constant instruction lengths, it is hard to figure out where instructions start. You basically have to either guess (for example: in x86 assembly 0xEB is often a relative jump with 1-byte offset but it also could be an immediate operand of another instruction) or read the whole basic block from the beginning.
This just gave me a hilariously bad idea for obfuscated assembly: Write the code in such a way that a mis-aligned jump causes a completely different set of instructions to execute (so the same bits are run twice, but with different alignment and so different instructions).
I've seen it. It gave my disassembler fits.
I would love to see that, if you have a link.
Arariel wrote:So if someone wrote a [insert language here]-to-Turing-complete-Malboge translator (if that's possible at all), wouldn't the resultant code technically be open source, yet more difficult to read/edit than binaries?
Users browsing this forum: 180ykhn0g and 2 guests