Challenge6_fluff

fluff

思路不难想,跟write4一样的思路,只是构造ROP链时,需要用到一些偏僻的汇编指令,构造起来比较麻烦。

详细过程请参考这篇博客:https://bbs.kanxue.com/thread-272054.htm

其中涉及的一些汇编指令:

XCHG

xchg指令的功能是交换两个数据的内容,指令格式如下:

  1. xchg reg,reg
  2. xchg reg,mem
  3. xchg mem,reg

示例:

1
2
3
4
xhcg ax,bx  ;交换16位寄存器的值
xchg ah,al ;交换8位寄存器的内容
xchg var1,bx;交换16位内存操作数和BX寄存器的内容
xchg eax,ebx;交换32位寄存器内容

BSWAP

bswap指令的功能是以字节为单位,把寄存器的内的字节次序变反。

比如:(EAX)=9668 8368H,执行指令:

BSWAP EAX ,则(EAX)=6883 6896H。

PEXT

pext指令使用第二个源操作数(第三个操作数)中的掩码,将第一个源操作数(第二个操作数)中的连续或不连续的位转移到目的地(第一个操作数)中的连续低阶位。对于MASK中设置的每一个位,PEXT从第一个源操作数中提取相应的位,并把它们写到目的操作数的连续低位中。目的地的剩余高位被清零。

1
2
3
4
5
6
pext output(edx), source(ebx), mask(eax)
output = pext(source, mask)
ebx = 0xFFFFFFFF
eax = b1111 0100
->
edx = 0x1F

image-20230306095254592