zoukankan      html  css  js  c++  java
  • 指针的类型信息保存在哪里?

    [问题描述]

    int* pnVar;

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

    对应的汇编代码:

    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 到高级语言,需要自如的切换思维

  • 相关阅读:
    hdoj 1872 稳定排序
    nyoj 60 谁获得了最高奖学金
    hdoj 2066 一个人的旅行
    nyoj 8 一种排序
    bzoj1798 1
    bzoj4031
    SPOJ-HIGH
    学习笔记::矩阵树定理
    学习笔记::树上莫队
    Strip
  • 原文地址:https://www.cnblogs.com/handt/p/Where_is_data_of_point_type_stored.html
Copyright © 2011-2022 走看看