吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3923|回复: 4
收起左侧

[其他转载] [谬]C语言局部变量底层汇编实现原理

[复制链接]
君子谬 发表于 2016-12-2 09:14
/**************************************************************/
#include<stdio.h>
int Add(int x, int y)
{
                int sum;
                sum = x + y ;
                return sum;
}
int main()
{
                int z;
                z = Add(1, 2);
                printf( "z = %d\n", z);
}
/**************************************************************/
注释:
局部变量的特点和参数一样,当函数调用完毕就不再使用,所以效仿参数,将其分配在栈上.
栈上方已经被参数等等使用,我们是有使用栈更低地址的空间,也就是继续压栈来分配局部变量
/**************************************************************/
sum = x + y;
013F16EE 8B 45 08             mov         eax,dword ptr [ebp+8]
013F16F1 03 45 0C             add         eax,dword ptr [ebp+0Ch]
013F16F4 89 45 F8             mov         dword ptr [ebp-8],eax //将结果放入ebp-8,也就是sum中
/**************************************************************/
注释:
之所以是ebp-8而不是ebp-4是因为在VC6以后为了防止溢出攻击,所以产生了该现象
不过至此也有了一个简单的结论:在使用EBP寻址的函数中,ebp+偏移量就是参数,ebp-偏移量,就是局部变量

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
wsds + 1 + 1

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

flasco 发表于 2016-12-2 09:23
受教啦!!小收获- -
头像被屏蔽
seemanglee 发表于 2016-12-2 09:46
yimo_chenai 发表于 2016-12-5 17:54
maoxuechuen 发表于 2016-12-12 23:39
看不明白啊,变量的值是在哪里能够显示出来···
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 07:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表