好久没有更新博客了,最近对逆向十分着迷,信息安全的知识量是真的庞大,是时候该做一波笔记了,哈哈。
看下图,C语言数据类型分为右边四大类型,这篇博客重点讲基本类型,因为其他类型还没学呢~~
整数类型
数据类型分为 char short int long 四种
char 8BIT 1字节 -----宽度-----> byte
short 16BIT 2字节 -----宽度-----> word
int 32BIT 4字节 -----宽度-----> dword
long 32BIT 4字节 ---------------------------
在很多年前的16位计算机上,int类型是占2个字节的,到了32位计算机上,int类型变成了4字节,然而long没变,原来4字节,现在还是4字节,这是个历史遗留问题,平时我们使用前三个即可。
88: char a = 0xFF;
0040D608 C6 45 FC FF mov byte ptr [ebp-4],0FFh
89: short b = 0xFF;
0040D60C 66 C7 45 F8 FF 00 mov word ptr [ebp-8],offset main+20h (0040d610)
90: int c = 0xFF;
0040D612 C7 45 F4 FF 00 00 00 mov dword ptr [ebp-0Ch],0FFh
观察88行代码以及对应下一行汇编代码,可以发现,当数据类型定义为char类型时,将0xFF放入了一块byte大小的内存(栈)中。
同理,short和int则放入对应的word大小和dword大小的内存空间中。
如果从数据宽度的角度讲,C语音中的char就是汇编中的byte,short就是汇编中的word,int就是汇编中的dword。
再观察以下代码,注意宽度
88: char a = 0x12345678;
0040D608 C6 45 FC 78 mov byte ptr [ebp-4],78h
89: short b = 0x12345678;
0040D60C 66 C7 45 F8 78 56 mov word ptr [ebp-8],offset main+20h (0040d610)
90: int c = 0x12345678;
0040D612 C7 45 F4 78 56 34 12 mov dword ptr [ebp-0Ch],12345678h
</