如何扭转movl

时间:2018-05-16 06:34:47

标签: assembly x86-64 cpu-registers exploit

因此,当调用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 个答案:

答案 0 :(得分:1)

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

任何截断指针的高32位的东西都没用; 比特消失了,除非再次从原版中复制,否则你无法取回它们。 (或者如果你能找到一些旋转序列和/或shld something / ror rax,32)。

写一个32位寄存器并不只是"隐藏"高位,它扔掉了。这是不可逆的。您必须在内存或架构寄存器中保留所需数据的副本。