const char msg[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
msg[1] = 'x'; // 컴파일 에러
char* test1 = "Hello World"; // 컴파일 에러
const char* test1 = "Hello World"; // readonly data 영역
mov dword ptr [test1],offset string "\xb7\xce\xba\xf1\xbf\xa1 \xc0\xd4\xc0\xe5\xc7\xdf\xbd\xc0\xb4\xcf\xb4\xd9." (0279B30h)
char test2[] = "Hello World";
mov eax,dword ptr [string "\xb7\xce\xba\xf1\xbf\xa1 \xc0\xd4\xc0\xe5\xc7\xdf\xbd\xc0\xb4\xcf\xb4\xd9." (0279B30h)]
mov dword ptr [test2],eax
mov ecx,dword ptr ds:[279B34h]
mov dword ptr [ebp-18h],ecx
mov edx,dword ptr ds:[279B38h]
mov dword ptr [ebp-14h],edx
// 배열을 함수 인자로 넘기면, 컴파일러가 알아서 포인터로 치환한다 (char[] -> char*)
void Test(char a[])
{
...
}
Test(test2);
lea eax,[test2]
push eax
call Test (0D8147Eh)
add esp,4
char test2[] = "Hellow World";
char test3[] = {...};
test3 = test2; // 컴파일 에러, 배열에서 배열 이름은 주소를 담는 공간이 아니라 배열 주소 그 자체를 의미함.