Many professional reverse engineers spend their days looking at 32-bit code compiled for Windows, and familiarity breeds proficiency. What are the high-level differences between reverse engineering 64-bit Windows programs versus 32-bit ones?
I am talking about things that will be staring me in the face all the time, as opposed to, say, slightly differing behavior of APIs. For instance,
- Do 64-bit compilers employ particular optimizations that are infrequently seen in a 32-bit context?
- Will I see instructions in 64-bit programs that are different from, or non-existent in, the 32-bit instruction set?
- Is there anything in particular that I need to know about the tool support on
x64
versusx86
?