吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 703|回复: 2
收起左侧

[学习记录] C语言笔记 | 变量(Variable)

[复制链接]
shinanciya 发表于 2023-9-28 21:01
变量的类型
  • 自动变量: auto



    • 默认的局部变量都是auto

  • 静态变量: static


    a
    • 默认的全局变量都是static

  • 寄存器变量: register


变量的申请
  • 当申明一个变量时, 编译器会将指定的一块内存空间与变量名进行绑定

  • 变量名只是内存空间的别名(给编译器看的)


变量的操作
  • 取出地址内的值

  • 修改值

  • 将值写入地址


int a = 10;a += 4;
push ebp ;保存ebpmov ebp,espsub esp,4 ;分配一个4字节栈空间(局部变量)(int类型)mov dword ptr ss:[ebp-4],0xA ;给变量赋值十进制数10mov eax,dword ptr ss:[ebp-4] ;取出变量的值add eax,4mov dword ptr ss:[ebp-4],eax ;写入变量的值add esp,4 ;还原栈pop ebp ;恢复ebp
指针变量
指针变量存储的是内存地址
int a = 5;int* p = &a;*p += 10;
mov dword ptr ss:[ebp-8],5 ;ebp-8是变量a的地址, 赋值5lea eax,dword ptr ss:[ebp-8] ;取出变量a的地址("ebp-8")mov dword ptr ss:[ebp-C],eax ;ebp-c是变量p的地址, 把"ebp-8"作为值写入mov eax,dword ptr ss:[ebp-C]mov ecx,dword ptr ds:[eax] ;使用eax(变量p)作为地址, 取出值add ecx,A ;加10mov dword ptr ds:[eax],ecx ;使用eax(变量p)作为地址, 写入值
其它
  • 将esp赋值给ebp, 使用ebp作为栈基并以[ebp+??]来访问函数的参数, 以[ebp-??]来访问函数的变量

  • 栈空间是有限的, 如果只分配不还原(比如无限递归), 最终将溢出

  • 由于函数的调用, 栈指针(esp)是不断变化的(每个函数都要使用栈空间(sub)), 所以为了方便调试使用了ebp

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
hrh123 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

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

Leonws 发表于 2023-9-29 13:47
还是要认真沉下心来好好学习的,指针变量真的是重点
mmdg13142 发表于 2023-9-29 20:00
Leonws 发表于 2023-9-29 13:47
还是要认真沉下心来好好学习的,指针变量真的是重点

指针太重要了,能对地址进行修改的东西嘎嘎牛逼
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 19:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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