天天看點

C和彙編----字元串

字元串是以空字元(\0)結尾的char類型數組。

0x01 定義字元串和初始化

用雙引号括起來的内容稱為字元串字面量,也叫字元串常量,雙引号中的字元串和編譯器自動加入\0字元,都作為字元串存儲在記憶體中

#include "stdio.h"

int main()
{
	char string[]="hello deng";
	return 0;

}
           

反彙編我們可以看到,hello deng的内容已經在另一個位置,首先給string一個位址,然後将hello deng複制到以string為首位址的記憶體中

5:        char string[]="hello deng";
00401028 A1 1C 20 42 00       mov         eax,[string "hello deng" (0042201c)]
0040102D 89 45 F4             mov         dword ptr [ebp-0Ch],eax
00401030 8B 0D 20 20 42 00    mov         ecx,dword ptr [string "hello deng"+4 (00422020)]
00401036 89 4D F8             mov         dword ptr [ebp-8],ecx
00401039 66 8B 15 24 20 42 00 mov         dx,word ptr [string "hello deng"+8 (00422024)]
00401040 66 89 55 FC          mov         word ptr [ebp-4],dx
00401044 A0 26 20 42 00       mov         al,[string "hello deng"+0Ah (00422026)]
00401049 88 45 FE             mov         byte ptr [ebp-2],al
6:        return 0;
0040104C 33 C0                xor         eax,eax

           
C和彙編----字元串

從下圖可以看出,字元串在記憶體中的确以\00結尾,并且字元在記憶體存儲的是字元的ASCII值,是以在指定數組大小時,要確定數組的元素個數至少比字元串長度多1,所有未被使用的元素都被自動化初始化為\00

C和彙編----字元串

0x02 指針和字元串

字元串是以空字元(\0)結尾的char類型數組。分析和另一篇數組部落格說的一樣。