本篇原创作者: Rj45
前言
一直以来,内心有股焦急焦虑,急冲冲的学习,急冲冲的比赛,没有时间和心思回过头来静心总结。突然之间想安静下来回顾和记录一下pwn的知识点 其实是写web有点累了,想切换一下脑壳,看心情更新吧
程序
编译
代码语言:javascript复制gcc stack.c -o stack -m32
反汇编分析
代码语言:javascript复制objdump -d stack -M intel
代码语言:javascript复制080483db <fun>:
80483db: 55 push ebp//将ebp压入栈
80483dc: 89 e5 mov ebp,esp//将esp压入栈
80483de: 83 ec 10 sub esp,0x10//在栈上分配0x10个字节的空间
80483e1: c7 45 f8 01 00 00 00 mov DWORD PTR [ebp-0x8],0x1//将0x1存储在[ebp-0x8],dword是双字即四个字节,ptr是指针,这里指[ebp-0x8]地址是一个双字型地址
80483e8: 8b 45 08 mov eax,DWORD PTR [ebp 0x8]//将[esp 0x8]的数据复制到eax
80483eb: 89 45 fc mov DWORD PTR [ebp-0x4],eax//将eax内的数据复制到[ebp-0x4]
80483ee: 8b 55 08 mov edx,DWORD PTR [ebp 0x8]//将[ebp 0x8]内的数据复制到edx
80483f1: 8b 45 0c mov eax,DWORD PTR [ebp 0xc]//将[ebp 0xc]内的数据复制到eax
80483f4: 01 d0 add eax,edx//将edx内的数据与eax内的数据相加,复制到eax
80483f6: c9 leave //等价于mov ebp,esp;pop ebp
80483f7: c3 ret //等价于pop ip;用栈中的数据,修改IP的内容,实现近转移
080483f8 <main>:
80483f8: 55 push ebp
80483f9: 89 e5 mov ebp,esp
80483fb: 6a 14 push 0x14//将0x14=20压入栈
80483fd: 6a 0a push 0xa////将0xa=10压入栈
80483ff: e8 d7 ff ff ff call 80483db <fun>//调用fun函数
8048404: 83 c4 08 add esp,0x8//esp 8,进行栈帧还原
8048407: b8 00 00 00 00 mov eax,0x0//清空eax内的数据
804840c: c9 leave
804840d: c3 ret
804840e: 66 90 xchg ax,ax//交换ax;等价于nop
常见汇编指令
1、寄存器
2、常见汇编指令