由一个简单的程序学习常见汇编指令

时间:2022-07-23
本文章向大家介绍由一个简单的程序学习常见汇编指令,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

本篇原创作者: Rj45

前言

一直以来,内心有股焦急焦虑,急冲冲的学习,急冲冲的比赛,没有时间和心思回过头来静心总结。突然之间想安静下来回顾和记录一下pwn的知识点 其实是写web有点累了,想切换一下脑壳,看心情更新吧

程序

编译

gcc stack.c -o stack -m32

反汇编分析

objdump -d stack -M intel
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、常见汇编指令