我用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 |