我正在研究一些反反汇编技术,偶然发现了下面的代码片段:
push 0x33
call $+5
add [esp+0x10+var_10], 5
retf
; next instruction here
字符串
所以简单地说,这会立即跳转到RETF
后面的指令,但会扰乱32位反汇编程序。
现在,我被告知RETF
返回到64位段,因此在32位调试器上调试它会产生错误的反汇编。当在64位调试器上运行这个片段时(在我的例子中是windbg),它会产生正确的结果。
我的问题是:push 0x33
有什么特别的吗?0x33是某种特殊的值吗?
1条答案
按热度按时间ozxc1zmp1#
retf
本身并不意味着“返回到64位段”。它意味着“返回到指定的段和地址”,而不是接近ret
意味着“返回到指定的地址而不改变段”。0x33
是要返回的段,这恰好是用于64位代码的段。(0x23
是32位段。)