首页 文章

如何扭转movl的影响

提问于
浏览
-1

因此,当调用movl(在intel x84-64机器代码中)并且具有寄存器作为目标时,它将寄存器的高阶字节设置为0.那么我如何使用movl指令使得我保留原始值登记册?在这种情况下,我们不能将rsi / rdi用于movl指令(仅限esi和edi) . 例如,如果我去

movq %rsp, %rax

然后打电话

movl %eax, %edx

有没有办法在movl之后调用movl /做一些事情,以便rdx可以包含%rsp中的原始值?

我不能做像movq%rax,%rdx这样的原因是因为我没有这些命令可供我使用 . 我正在进行ROP攻击,我只在小工具服务器场中提供了movl指令 . 我也可以访问andb,orb,cmpb和testb指令 .

1 回答

  • 1

    你不能把多个小工具粘在一起吗?您需要找到一个序列,将您想要的值放入寄存器并跳转到该寄存器 .

    任何截断指针的高32位的东西都没用; the bits are gone and you can't get them back except by copying from the original again . (或者如果你能找到一些旋转序列和/或 shld something / ror rax,32 ) .

    Writing a 32-bit register doesn't just "hide" the upper bits, it throws them away. This is not reversible . 您必须在内存或架构寄存器中保留所需数据的副本 .

相关问题