没有合适的资源?快使用搜索试试~ 我知道了~
首页Linux基本反汇编结构与GDB入门
Linux基本反汇编结构与GDB入门
4星 · 超过85%的资源 需积分: 28 35 下载量 201 浏览量
更新于2023-03-16
评论
收藏 136KB DOC 举报
Linux基本反汇编结构与GDB入门。Linux下的汇编与Windows汇编最大的不同就是第一个操作数是原操作数,第二个是目的操作数,而Windows下却是相反。
资源详情
资源评论
资源推荐
下的汇编与 汇编最大的不同就是第一个操作数是原操作数,第二
个是目的操作数,而 下却是相反。
、基本操作指令
简单的操作数类型说明,一般有三种,
()立即数操作数,也就是常数值。立即数的书写方式是“后面跟一个整数,
比如,这个会在后面的具体分析中见到很多。
()寄存器操作数,它表示某个寄存器的内容,用符号 来表示任意寄存器
,用引用 来表示它的值,这是将寄存器集合看成一个数组 ,用寄存器表
示符作为索引。
()操作数是存储器引用,它会根据计算出来的地址(通常称为有效地址)访
问某个存储器位置。用符号 表示对存储在存储器中从地址 开始的
字节值的引用。通常可以省略下标 。
图 表示有多种不同的寻址模式,一个立即数偏移 ,一个基址寄存器 ,
一个变址或索引寄存器 和一个伸缩因子 。有效地址被计算为
,对于这中寻址方式,我们可以在数组或者结构体中进行对元素进行访
问时会用到。
操作数类型 格式 操作数值 名称
立即数
立即数寻址
寄存器
寄存器寻址
寄存器
绝对寻址
寄存器
!
间接寻址
寄存器
!
(基址偏移量)
寻址
寄存器
"!
变址寻址
寄存器
寄存器
""!
伸 缩 化 的 变 址 寻
址
寄存器
""!
伸 缩 化 的 变 址 寻
址
寄存器
""!
伸 缩 化 的 变 址 寻
址
寄存器
""!
伸 缩 化 的 变 址 寻
址
图 操作数格式
注:操作数可以是立即数值、寄存器值或是来自存储器的值,伸缩因子必须是
、、#、或者是 $。从上面的图我们就可以大致了解操作数的类型了。
在操作指令中,最频繁使用的指令是执行数据传送的指令。对于传送指令的两
个操作数不能都指向存储器位置(我的理解是一般存储器存储的都是地址,不
能够对地址和地址进行操作)。将一个值从一个存储器位置拷到另一个存储器
位置需要两条指令——第一条指令将源值加载到寄存器中,第二条将该寄存器
值写入到目的位置。下面给出源操作数和目的操作数的五种可能组合。
、%&#'"()立即数——寄存器
、%&()*"()*寄存器——寄存器
、%&(()"()+)"()存储器——寄存器
#、%&,-" ()*!立即数——存储器
'、%&()", ()*!寄存器——存储器
注意这里的指令 % 可能有不同的形式,不同平台的汇编一般是有些不一样的,
但这并不会影响我们理解汇编,只要熟悉其细节之后就能够明白的。
指令 效果 描述
%&."/ /0.
传送双字
%&."/ /0.
传送字
%&."/ /0.
传送字节
%&."/
/0符号扩展(.) 传送符号扩展的字
节
%&."/
/0零扩展(.) 传送零扩展的字节
*1&. ()*0()*2#3
()*0.
压栈
**&/ /0()*3
()*0()*#
出栈
图 :数据传送指令
结合例子来进行讲解一下指令的具体操作,在这里将会正式接触到 下的
455 开发环境和 4/6 调试器,不过都是比较简单的应用。我的 操作系统
是 789:,其它版本的差别应该不大,
如果我们要编写一个程序,我们可以用 下自带的 % 或 % 编辑器,
studyrush@studyrush-desktop:~/C$ vi exchange.c
vi 后面加我们要创建的程序文件的名字,在这里是 exchange.c
studyrush@studyrush-desktop:~/C$ gcc -o exchange exchange.c
gcc -o exchange exchange.c 或 gcc exchange –o exchange 这两者都可以对源文件
进行编译,-o exchange 表示对我们要输出的文件名称,可能表达的不够准确,
大家可以先熟悉一下 gcc 编译器,应该就会明白的了。
studyrush@studyrush-desktop:~/C$ ./exchange 点加斜线再加输出文件名就表示
运行程序,下面是运行的结果。
a = 3, b = 4
使用 GDB 可以参考附件里面的教程,这份教程写的很不错,看雪论坛本身也有,
大家可以看这个贴(1;*<==:*)>:+=181):*1*?8@---#A),现在我只是把它
放在附件里面。
studyrush@studyrush-desktop:~/C$ gdb exchange
命令 disas 就表示反汇编(disassembly),后面再加上要显示的函数名,我们就
可以看到函数对应的反汇编代码了。
(gdb) disas exchange
Dump of assembler code for function exchange:
0x080483c4 <exchange+0>: push %ebp
0x080483c5 <exchange+1>: mov %esp,%ebp
0x080483c7 <exchange+3>: sub $0x10,%esp
0x080483ca <exchange+6>: mov 0x8(%ebp),%eax
0x080483cd <exchange+9>: mov (%eax),%eax
0x080483cf <exchange+11>: mov %eax,-0x4(%ebp)
0x080483d2 <exchange+14>: mov 0x8(%ebp),%edx
0x080483d5 <exchange+17>: mov 0xc(%ebp),%eax
0x080483d8 <exchange+20>: mov %eax,(%edx)
0x080483da <exchange+22>: mov -0x4(%ebp),%eax
0x080483dd <exchange+25>: leave
0x080483de <exchange+26>: ret
End of assembler dump.
进一步来分析上面的反汇编代码,这里的代码可能与前面的讲的指令操作有一
些不同,因为这是很正常的,不同的操作系统应该有所差别,这也是汇编语言
一般与平台有关,移植性并不好。
push %ebp
mov %esp,%ebp
sub $0x10,%esp
对有过反汇编的人对上面的代码肯定不会陌生,这里就是将 ebp 进栈,保存 esp
的值,并为局部变量预留空间。要记得源操作数与目的操作数的位置,前面有
讲的。这里也一定程度对 C 语言中的指针使用进行了说明。看源代码可以知道。
mov 0x8(%ebp),%eax
mov (%eax),%eax
mov %eax,-0x4(%ebp)
mov 0x8(%ebp),%eax 取得 xp,其实是指针本身,即是地址,汇编表示即可为
mov %ebp + 8, %eax,这里就是存储器——寄存器的操作方式。
mov (%eax),%eax 这里是取得指针指向的值,即*xp,(%eax)表示取%eax 中
的地址指向的值,比如
寄存器 值 地址 值
%eax 0x100 0x100 0xFF
(%eax)的值就是 0xFF 了。
mov %eax,-0x4(%ebp) 这里是将值赋给局部变量,局部变量是在 ebp 的上面
的,表示其地址比 ebp 的地址要小。
mov 0x8(%ebp),%edx
mov 0xc(%ebp),%eax
mov %eax,(%edx)
这里与上面的分析类似,并没有出现局部变量,可以表明这里是函数参数在进
行交换。这里的操作数方式是寄存器——存储器
mov -0x4(%ebp),%eax 通过寄存器 eax 将值返回,记住一般函数的返回值都是
通过 eax 寄存器返回的。
0x080483dd <exchange+25>: leave
0x080483de <exchange+26>: ret 函数返回
分析完反汇编代码之后有没有看出来函数调用是采用哪种调用约定呢?其实就
是 C 调用方式(__cdecl)的方式。
==程序 )+1B):+,表示交换两个数。
C+&)D8:1E
C+&)D81:1E
8)+1B) 8*"8>!
F
8@*3
*@>3
)8 !3
G
8 !
F
8@#3
8@)+1B) H"!3
*I J@("@(KJ""!3
)83
G
通过上面的学习我们可以明白其实 5 语言中的指针本质上就是地址。抓住这一
点我们对指针的理解就会更加明白。当然复杂的指针操作还是要在实践之中慢
慢的掌握。
剩余18页未读,继续阅读
记录点滴
- 粉丝: 4
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论2