linux 下反汇编为啥看不懂?

jack_ooneil 2017-04-30 11:39:04
为了能看懂反汇编,特意跑去学习了王爽的汇编语言,书的实验基本都能完成,
结果学完了还看不懂
比如:
0000000000400526 <main>:
400526: 55 push %rbp
400527: 48 89 e5 mov %rsp,%rbp
40052a: 48 83 ec 10 sub $0x10,%rsp
40052e: 48 c7 45 f8 00 00 00 movq $0x0,-0x8(%rbp)
400535: 00
400536: 48 8b 45 f8 mov -0x8(%rbp),%rax
40053a: 48 89 c7 mov %rax,%rdi
40053d: e8 07 00 00 00 callq 400549 <sub1>
400542: b8 00 00 00 00 mov $0x0,%eax
400547: c9 leaveq
400548: c3 retq
1. 指令 callq, leaveq retq 这个后面加个q表示什么意思?
2. sub $0x10,%rsp 这里0x10是怎么来的?
3. movq $0x0,-0x8(%rbp) -0x8 这里表示什么?
4. rbp, rax, 等寄存器是在64位系统下面的吗?

我知道这是AT&T汇编, 与masm 的有些区别,不过关于AT&T汇编的书籍感觉特别少,现有的书籍感觉都有比较好的书推荐吗?
我的目的只是能阅读反汇编代码就可以, 我下一步该如何做?

...全文
553 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2017-05-02
  • 打赏
  • 举报
回复
找相关资料详读一下。学东西要举一反三。
of123 2017-05-02
  • 打赏
  • 举报
回复
你代码的前几行是进入函数时的压栈操作。 在函数退出时,为啥没有看到恢复RBP和RSP指令呢? 答案是用了leaveq指令。leaveq和retq中的q是指64位操作数。 leaveq相当于: movq %rbp, %rsp popq %rbp leaveq跟函数进入时的如下操作是对应的: push %rbp mov %rsp,%rbp 有些指令集也把上述的两条指令叫做enterq。 retq相当于: popq %rip
of123 2017-05-02
  • 打赏
  • 举报
回复
去看看这个连接。 http://blog.csdn.net/u014160900/article/details/44900303

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧