You are viewing a single comment's thread.

view the rest of the comments →

[–] 26557659? ago 

Compiled code gets converted into machine language, essentially just a bunch of numbers. The following instruction x86 instruction:

MOV eax, 1

Raw can look like this:

00 15 00 00 00 04 00 00 00 01

These numbers are just random, unless you assign meaning. 00 15 could be the x86 opcode for 'MOV' and then the CPU knows that MOV takes 2 operands, a destination and src and reads a certain number of bits ahead for each operand. This is how compiled code works, it reads a number, this gets converted to a CPU operation, and then each CPU operation has a number of operands that the computer has to read.

This is why you have to compile for each target machine x86 vs ARM vs SPARC or 32 vs 64 bit. And to reverse engineer any compiled program, you need a decompiler because it gives you context to the bits.