assembly x86 -通过RETF从32位切换到64位

nnt7mjpx  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(116)

我正在研究一些反反汇编技术,偶然发现了下面的代码片段:

push 0x33
call $+5
add  [esp+0x10+var_10], 5
retf
; next instruction here

字符串
所以简单地说,这会立即跳转到RETF后面的指令,但会扰乱32位反汇编程序。
现在,我被告知RETF返回到64位段,因此在32位调试器上调试它会产生错误的反汇编。当在64位调试器上运行这个片段时(在我的例子中是windbg),它会产生正确的结果。
我的问题是:push 0x33有什么特别的吗?0x33是某种特殊的值吗?

ozxc1zmp

ozxc1zmp1#

retf本身并不意味着“返回到64位段”。它意味着“返回到指定的段和地址”,而不是接近ret意味着“返回到指定的地址而不改变段”。0x33是要返回的段,这恰好是用于64位代码的段。(0x23是32位段。)

相关问题