If you look for it, I’ve got a sneaky feeling you’ll find that love actually is all around.
标准输入输出
1 2 3
| 标准输入 即STDIN , 在 /dev/stdin , 一般指键盘输入, shell里代号是 0 标准输出 即STDOUT, 在 /dev/stdout, 一般指终端(terminal), 就是显示器, shell里代号是 1 标准错误 即STDERR, 在 /dev/stderr, 也是指终端(terminal), 不同的是, shell里代号是 2
|
32位系统调用
32位系统调用
write
1 2 3 4 5 6 7
| 系统调用号:4 函数路径:glibc-2.27/io/write.c 函数定义:ssize_t write(int fd, const void *buf, size_t nbyte); fd:文件描述符; buf:指定的缓冲区,即指针,指向一段内存单元; nbyte:要写入文件指定的字节数; 返回值:写入文档的字节数(成功);-1(出错)
|
汇编
leave
1 2 3
| 在32位汇编下相当于: mov esp,ebp pop ebp
|
ret
1
| RET指令则是将栈顶的返回地址弹出到EIP,然后按照EIP此时指示的指令地址继续执行程序
|
shellcode
i386
1 2 3 4 5 6 7 8 9 10
| shellcode:"\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80" disasm如下: 0: 31 c9 xor ecx,ecx 2: f7 e1 mul ecx 4: 51 push ecx 5: 68 2f 2f 73 68 push 0x68732f2f a: 68 2f 62 69 6e push 0x6e69622f f: 89 e3 mov ebx,esp 11: b0 0b mov al,0xb 13: cd 80 int 0x80
|
pwntools生成
1
| shellcraft.i386.linux.sh()
|