社区
汇编语言
帖子详情
函数调用中的栈分配问题
yymiaoxin2010
2019-03-25 05:37:07
void a(int a,int b) { c=a+b; } 比如调用了这个a函数首先push b,push a 转向函数内部 push ebp mov ebp,esp sub esp,XX 之后因为要填充CC 会影响寄存器 eax ecx, sub esp,XX是编译器决定的吗,反汇编别的代码别人的就不会自己分配栈空间,求大佬解答下是不是要设置下我不想让他分配自己分配栈空间
...全文
180
2
打赏
收藏
函数调用中的栈分配问题
void a(int a,int b) { c=a+b; } 比如调用了这个a函数首先push b,push a 转向函数内部 push ebp mov ebp,esp sub esp,XX 之后因为要填充CC 会影响寄存器 eax ecx, sub esp,XX是编译器决定的吗,反汇编别的代码别人的就不会自己分配栈空间,求大佬解答下是不是要设置下我不想让他分配自己分配栈空间
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
千里送人头
2019-04-01
打赏
举报
回复
你得继续往下看代码,只看这一行看不出来的,看看esp做了哪些操作.
zara
2019-03-25
打赏
举报
回复
xx由函数局部变量、编译栈检查选项以及对齐要求确定吧。
总结汇编
函数调用
中
的
栈
分配
这篇日志总结一下
函数调用
过程
中
,每一个函数的
栈
空间
分配
,参数传递等
问题
,在一些高级语言如Java,C#等,在源程序编译后,交由虚拟机进行解释运行,运行过程
中
实时翻译成对应操作系统下的机器指令,这样CPU才能直接执行,C语言也如此,不过它是直接编译后运行,而不是执行过程
中
动态解释运行。无论是像C这种面向过程的,还是Java,C#等面向对象的编程语言,它们都一定要有函数,或者说方法,用来将一个大程序模块化分成一个一个小的功能模块。拿Java举例,JVM的方法调用,并不是CPU直接执行,Java方法...
C语言
函数调用
栈
(一)
程序的执行过程可看作连续的
函数调用
。当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接call指令)处继续执行。
函数调用
过程通常使用堆
栈
实现,每个用户态进程对应一个调用
栈
结构(call stack)。编译器使用堆
栈
传递函数参数、保存返回地址、临时保存寄存器原有值(即
函数调用
的上下文)以备恢复以及存储本地局部变量。 不同处理器和编译器的堆
栈
布局、
函数调用
方法都可能不同,但堆
栈
的基本概念是一...
[C/C++]
函数调用
的
栈
分配
当调用(call)一个函数时,主调函数将声明
中
的参数表以逆序压
栈
,然后将当前的代码执行指针(eip)压
栈
,跳转到被调函数的入口点。 进入被调函数时,函数将esp减去相应字节数获取局部变量存储空间。被调函数返回(ret)时,将esp加上相应字节数,归还
栈
空间,弹出主调函数压在
栈
中
的代码执行指针(eip),跳回主调函数。再由主调函数恢复到调用前的
栈
。
函数调用
栈
剖析+图解
栈
: 在
函数调用
时,第一个进
栈
的是主函数
中
函数调用
后的下一条指令(
函数调用
语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器
中
,参数是由右往左入
栈
的,然后是函数
中
的局部变量。注意静态变量是不入
栈
的。当本次
函数调用
结束后,局部变量先出
栈
,然后是参数,最后
栈
顶指针指向最开始存的地址,也就是主函数
中
的下一条指令,程序由该点继续运行。当发生
函数调用
的时候,
栈
空间
中
存放的数据是这样的:...
函数调用
过程
栈
变化
进程内存区域 当进程被加载到内存时,会被分成很多段 代码段:保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写,如果发生写操作则会提示segmentation fault 数据段:保存初始化的全局变量和静态变量,可读可写不可执行 BSS:未初始化的全局变量和静态变量 堆(Heap):动态
分配
内存,向地址增大的方向增长,可读可写可执行
栈
(Stack):存放局部变量,函数参数,当前状态,
函数调用
信息等,向地址减小的方向增长,可读可写可执行 环境/参数段(environment/argumentss
汇编语言
21,458
社区成员
41,603
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章