fluff
思路不难想,跟write4一样的思路,只是构造ROP链时,需要用到一些偏僻的汇编指令,构造起来比较麻烦。
详细过程请参考这篇博客:https://bbs.kanxue.com/thread-272054.htm
其中涉及的一些汇编指令:
XCHG
xchg
指令的功能是交换两个数据的内容,指令格式如下:
xchg reg,reg
xchg reg,mem
xchg mem,reg
示例:
1 | xhcg ax,bx ;交换16位寄存器的值 |
BSWAP
bswap
指令的功能是以字节为单位,把寄存器的内的字节次序变反。
比如:(EAX)=9668 8368H,执行指令:
BSWAP EAX ,则(EAX)=6883 6896H。
PEXT
pext
指令使用第二个源操作数(第三个操作数)中的掩码,将第一个源操作数(第二个操作数)中的连续或不连续的位转移到目的地(第一个操作数)中的连续低阶位。对于MASK中设置的每一个位,PEXT从第一个源操作数中提取相应的位,并把它们写到目的操作数的连续低位中。目的地的剩余高位被清零。
1 | pext output(edx), source(ebx), mask(eax) |