汇编并分析一段简单C代码
来源:互联网 发布:淘宝开店宝贝上传视频 编辑:程序博客网 时间:2024/06/06 15:44
陈可 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
本文会通过分析一个简单C程序的对应汇编代码来了解C程序是如何被执行的
先写一个简单的C程序:
main.c:
int g(int x){ return x+3;}int f(int x){ return g(x);}int main(void){ int a=5; return f(a)+1;}
然后反汇编该C程序
简单处理main.s
.file "main.c" .text .globl g .type g, @functiong:.LFB0: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 movl 8(%ebp), %eax addl $3, %eax popl %ebp .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc.LFE0: .size g, .-g .globl f .type f, @functionf:.LFB1: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $4, %esp movl 8(%ebp), %eax movl %eax, (%esp) call g leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc.LFE1: .size f, .-f .globl main .type main, @functionmain:.LFB2: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $20, %esp movl $5, -4(%ebp) movl -4(%ebp), %eax movl %eax, (%esp) call f addl $1, %eax leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc.LFE2: .size main, .-main .ident "GCC: (Ubuntu 4.8.2-19ubuntu1) 4.8.2" .section .note.GNU-stack,"",@progbits
该文件中以.开头的行是为了链接的,在这里只有一个目标模块,所以为了简化分析可以删去
得到:
g: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax addl $3, %eax popl %ebp retf: pushl %ebp movl %esp, %ebp subl $4, %esp movl 8(%ebp), %eax movl %eax, (%esp) call g leave retmain: pushl %ebp movl %esp, %ebp subl $20, %esp movl $5, -4(%ebp) movl -4(%ebp), %eax movl %eax, (%esp) call f addl $1, %eax leave ret
分析代码画出堆栈图:
总结:
通过对这段C代码的汇编分析可以发现C语言中的函数是如何在“线性”的汇编上实现的
0 0
- 汇编并分析一段简单C代码
- 一段汇编代码的分析
- 《Linux内核分析》(一)——反汇编一个简单的C程序并分析其汇编代码的执行
- 简单c程序汇编代码分析
- 反汇编一个简单的C程序,分析汇编代码
- 高级语言的一段汇编代码分析
- 一段大家熟悉的汇编代码分析
- 一段简单的C反汇编
- 《网络渗透技术》学习笔记(2)——一段简单的汇编代码分析 zz
- Linux汇编代码学习,反汇编简单的c及分析汇编代码工作过程
- 反汇编一个简单的C程序并分析
- 一段经典C代码分析
- Linux内核分析课程--通过反汇编一个简单的c程序,分析汇编代码并理解计算机如何工作的
- 对一个简单C 函数的汇编代码分析
- 汇编代码的简单分析
- Linux内核分析-反汇编一个简单的C程序并简单分析
- 一段简单C++代码问题分析
- 反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- Fragment调用startActivityForResult问题
- LeetCode 328. Odd Even Linked List
- 字典树(f m)
- 关于iOS GYDataCenter本地数据库解决方案的那些事儿--下卷
- Android 内部存储器/外部存储器 /保存文件等
- 汇编并分析一段简单C代码
- HBASE API高级特性
- Canal源码分析---模拟Slave同步binlog
- BigData学习4_内部攻击实验数据集浅析
- Context使用场景
- Ubuntu下不能解析域名( ping:unknown host )
- 哈夫曼压缩之压缩文件头文件的不同方式
- 算法导论 红黑树 热身 二叉树学习(一)
- 浅谈HTML与XHTML