我用GNU编译器尝试了如下代码,结果成功的发现,他们是一样的,从机器指令层面讲
` .code32
.byte 0x48
xorl %eax, %eax `
等同于64位代码
`.code64
xorq %rax, %rax`
利用这个特性,你可以轻松伪造出64位的代码
32bit code | 64bit code |
---|---|
.code32 .byte 0x48 xorl %eax, %eax | .code64 xorq %rax, %rax |
.code32 pushl%eax | .code64 pushq %rax |
.code32 .byte 0x48 iretl | .code64 iretq |