zoukankan      html  css  js  c++  java
  • 重学C第六节:变量

    变量是一段有名字的连续存储空间。在源代码中通过定义变量来申请并命名这样的存储空间,并通过变量的名字来使用这段存储空间。 变量是程序中数据的临时存放场所。在代码中可以只使用一个变量,也可以使用多个变量,变量中可以存放单词、数值、日期以及属性。

     

    标识符:用来标识对象名字(包括变量、函数、数组、类型等)的有效字符序列。

    (1)关键字,如int、for、if等。

    (2)系统预定义标识符,如sin、main、printf等。

    (3)用户标识符,如变量名、函数名、数组名等。

     

     1 #include <stdio.h>
     2 
     3 void main()
     4 {
     5     //不同的整型
     6     int a=10;
     7     short int b=20;
     8     long c=30;
     9     unsigned int d=40;
    10     printf("%d",a+b+c+d);
    11 }

    下面是IDA部分汇编代码:

     1 mov     [ebp+var_4], 0Ah               ;mov     [ebp+var_4], 10
     2 mov     [ebp+var_8], 14h               ;mov     [ebp+var_8], 20
     3 mov     [ebp+var_C], 1Eh               ;mov     [ebp+var_C], 30
     4 mov     [ebp+var_10], 28h              ;mov     [ebp+var_10], 40
     5 movsx   eax, [ebp+var_8]
     6 mov     ecx, [ebp+var_4]
     7 add     ecx, eax
     8 add     ecx, [ebp+var_C]
     9 add     ecx, [ebp+var_10]
    10 push    ecx
    11 push    offset Format   ; "%d"
    12 call    _printf

    下面是对应的IDA  F5代码:

     1 int __cdecl main()
     2 {
     3   char v1; // [sp+Ch] [bp-50h]@1
     4   int v2; // [sp+4Ch] [bp-10h]@1
     5   int v3; // [sp+50h] [bp-Ch]@1
     6   __int16 v4; // [sp+54h] [bp-8h]@1
     7   int v5; // [sp+58h] [bp-4h]@1
     8 
     9   memset(&v1, -858993460, 0x50u);
    10   v5 = 10;
    11   v4 = 20;
    12   v3 = 30;
    13   v2 = 40;
    14   printf("%d", 100);
    15   return _chkesp();
    16 }

    修改一下:

     1 int __cdecl main()
     2 {
     3   char v1; 
     4   int d;
     5   int c; 
     6   __int16 b;
     7   int a; 
     8 
     9   memset(&v1, -858993460, 0x50u);
    10   a = 10;
    11   b = 20;
    12   c = 30;
    13   d = 40;
    14   printf("%d", 100);
    15   return _chkesp();
    16 }

    发现貌似只有short int 发生了变化。

     ===============================================================================================

    下面来看看Release版的情况

    1 ; int __cdecl main(int argc, const char **argv, const char **envp)
    2 _main proc near
    3 push    100
    4 push    offset unk_407030
    5 call    sub_401010
    6 add     esp, 8
    7 retn
    8 _main endp

    发现,变量的定义都省了,直接只有结果。

     

  • 相关阅读:
    MapReduce原理
    《软件需求十步走》阅读笔记3
    《软件需求十步走》阅读笔记2
    《软件需求十步走》阅读笔记1
    2017秋季阅读计划
    怎么做需求分析
    兴趣小组第一次
    第十天
    第九天
    对UC的分析(个人观点,多多包涵)
  • 原文地址:https://www.cnblogs.com/tk091/p/2483520.html
Copyright © 2011-2022 走看看