程序的机器级表示呢
民生教育 2021-08-24 13:29 字号: 大 中 小
/*********************************************\\
TEXT:C程序的机器级表示
AUTHOR:arden chao
DATE:
EMAIL: arden1019@
VERSION:1.0.0
\\*********************************************/
////////////////////////////////
// 函数的内存空间1
////////////////////////////////
前提知识点:little-endian和big-endian 、%esp\\%ebp寄存器。
我们先来对C程序的内存布局做一下了解。这里我们引用《APUE》中的一些内容阐述:
一般,C程序由下面部分组成。
+正文段:CPU执行的机器码部分。
+初始化数据段:程序中所需赋初值的变量。
+非初始化数据段bss:程序开始之前,一些不需要初始化的变量。
+栈:自动变量、函数调用时所需要保存的信息。
+堆:动态分配的内存。
----------------
高地址 | | 命令行参数、环境变量
----------------
栈(向下)
----------------
----------------
堆(向上)
----------------
未初始化数据
----------------
初始化变量
----------------
正文
低地址 |----------------
我们把实现集中在函数栈上面。
这次我们给一个健全点的程序,它拥有著名的main程序入口点及一个函数fun:
int fun(int a,int b)
{
int localvar=a;
b=10;
return 1;
}
int main()
{
int i;
i=fun(20,30);
return i;
}
顺便把汇编码写出来,尝试读明白其中的代码:
// command : gcc -S asm02.c
.file\"asm02.c\"
.text
.globl _fun
.def_fun; .scl2; .type 32; .endef
_fun:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl 8(%ebp), %eax
movl %eax, -4(%ebp)
movl $10, 12(%ebp)
movl $1, %eax
leave
ret
.def___main; .scl2; .type 32; .endef
.globl _main
.def_main; .scl2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl$4, %eax
sall $4, %eax
movl %eax, -8(%ebp)
movl -8(%ebp), %eax
call__alloca
call___main
movl $30, 4(%esp)
当上面肺脏有毒素时 movl $20, (%esp)
call_fun
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
leave
ret
白山白癜风好的医院西安治男科专科医院
杭州白癜风专业医院
-
-
[p]F1牵手知名体育推广机构 中国再加1站比赛
F1牵手知名体育推广机构 中国再加1站比赛?F1计划在中国再加...
2020-07-04 | 民生教育
-
-
利拉德妖锋神数据开拓者卡位战险胜搭配
利拉德++妖锋神数据 开拓者卡位战险胜开拓者加时险胜北京时...
2020-06-01 | 民生教育
-
-
市第三社会福利院召开2017年全院工作暨
市第三社会福利院召开2017年全院工作暨党风廉政建设会议3月...
2019-07-16 | 民生教育
-
-
优先开展涉民生案件执行22名农民工权益得
优先开展涉民生案件执行 22名农民工权益得到保护雅安/北纬讯...
2019-07-12 | 民生教育
-
-
静安区文化馆举办七夕主题活动
静安区文化馆举办七夕主题活动8月27日,乞巧七夕,传承中国...
2019-07-11 | 民生教育
-
-
八卦洲街道东江村子雨老龄爱心助餐慈善活动
八卦洲街道东江村子雨老龄爱心助餐慈善活动中心成立八卦洲...
2019-07-07 | 民生教育