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

  • 相关阅读:
    mongodb的索引
    mongodb的简单操作
    mongodb的安装
    redis简单消息队列
    支持utf8的str_split函数
    php curl 传递数据
    linux 安装 ftp
    php des 对称加解密类
    13. Roman to Integer
    12. Integer to Roman
  • 原文地址:https://www.cnblogs.com/handt/p/Where_is_data_of_point_type_stored.html
Copyright © 2011-2022 走看看