指针的类型信息保存在哪里?

[问题描述]

int* pnVar;

char* pcVar;
这两个指针在做加法的时候,计算机怎么知道是加1个还是4个byte

 

对应的汇编代码:

1
2
3
4
5
6
7
8
pnVar++;
00413031  mov         eax,dword ptr [pnVar]
00413034  add         eax,4
00413037  mov         dword ptr [pnVar],eax
pcVar++;
0041303A  mov         eax,dword ptr [pcVar]
0041303D  add         eax,1
00413040  mov         dword ptr [pcVar],eax

 

[理解]

“类型” 的概念只存在于编译前,编译器会识别出各种数据类型,然后生成目标文件,obj里面就包含了每条语句的汇编实现,所以pnVar++或者pcVar++,在生成的PE文件.text节里面早已写死。
在运行期不需要关心所谓的“类型”。

 

[反思]

之前想不通此问题的原因:

认为汇编语言和C语言一样,变量在操作前需要知道数据类型

而没有切换到汇编的思维,在汇编眼里,或者说CPU眼里,取指(opcode)执行时,只认识bit流,opcode告诉bus一次取多少位数据,cpu就取多少位,压根不用知道所谓的类型

 

[结论]

从汇编 reversing 到高级语言,需要自如的切换思维

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值