* 해당 글은 게임 프로그래머 입문 올인원 강의를 보고 정리한 글입니다.
* 배열
고정맵을 만들때 유용하게 사용
2D 로그라이크만들 때 유용하게 사용
ㄴ 1차원 배열과 2차원 배열은 메모리 구조상 같음
* 포인터
주소값을 담는 변수
ㄴ 32비트 - 4바이트
ㄴ 64비트 - 8바이트
* 포인터의 타입
가리키고 있는 값의 자료형이다
(예) int* ptr = &a; → a는 int형이다
#include <istream>
using namespace std;
int AddHp(int hp, int value)
{
00B51780 push ebp
00B51781 mov ebp,esp
00B51783 sub esp,0C0h
00B51789 push ebx
00B5178A push esi
00B5178B push edi
00B5178C mov edi,ebp
00B5178E xor ecx,ecx
00B51790 mov eax,0CCCCCCCCh
00B51795 rep stos dword ptr es:[edi]
00B51797 mov ecx,offset _3A3183C1_Main@cpp (0B5C066h)
00B5179C call @__CheckForDebuggerJustMyCode@4 (0B51325h)
00B517A1 nop
hp += value;
00B517A2 mov eax,dword ptr [hp]
00B517A5 add eax,dword ptr [value]
00B517A8 mov dword ptr [hp],eax
return hp;
00B517AB mov eax,dword ptr [hp]
}
00B517AE pop edi
00B517AF pop esi
00B517B0 pop ebx
00B517B1 add esp,0C0h
00B517B7 cmp ebp,esp
00B517B9 call __RTC_CheckEsp (0B51244h)
00B517BE mov esp,ebp
00B517C0 pop ebp
00B517C1 ret
//////////////////////////////////////////////////////////////////////////////
int main()
{
00B51890 push ebp
00B51891 mov ebp,esp
00B51893 sub esp,0CCh
00B51899 push ebx
00B5189A push esi
00B5189B push edi
00B5189C lea edi,[ebp-0Ch]
00B5189F mov ecx,3
00B518A4 mov eax,0CCCCCCCCh
00B518A9 rep stos dword ptr es:[edi]
00B518AB mov ecx,offset _3A3183C1_Main@cpp (0B5C066h)
00B518B0 call @__CheckForDebuggerJustMyCode@4 (0B51325h)
00B518B5 nop
int hp = 100;
00B518B6 mov dword ptr [hp],64h
hp = AddHp(hp, 10);
00B518BD push 0Ah
00B518BF mov eax,dword ptr [hp]
00B518C2 push eax
00B518C3 call AddHp (0B513C0h)
00B518C8 add esp,8
00B518CB mov dword ptr [hp],eax
return 0;
00B518CE xor eax,eax
}
00B518D0 pop edi
00B518D1 pop esi
00B518D2 pop ebx
00B518D3 add esp,0CCh
00B518D9 cmp ebp,esp
00B518DB call __RTC_CheckEsp (0B51244h)
00B518E0 mov esp,ebp
00B518E2 pop ebp
00B518E3 ret
#include <istream>
using namespace std;
void AddHp(int* hp, int value)
{
00721780 push ebp
00721781 mov ebp,esp
00721783 sub esp,0C0h
00721789 push ebx
0072178A push esi
0072178B push edi
0072178C mov edi,ebp
0072178E xor ecx,ecx
00721790 mov eax,0CCCCCCCCh
00721795 rep stos dword ptr es:[edi]
00721797 mov ecx,offset _3A3183C1_Main@cpp (072C066h)
0072179C call @__CheckForDebuggerJustMyCode@4 (0721325h)
007217A1 nop
*hp += value;
007217A2 mov eax,dword ptr [hp]
007217A5 mov ecx,dword ptr [eax]
007217A7 add ecx,dword ptr [value]
007217AA mov edx,dword ptr [hp]
007217AD mov dword ptr [edx],ecx
}
007217AF pop edi
007217B0 pop esi
007217B1 pop ebx
007217B2 add esp,0C0h
007217B8 cmp ebp,esp
007217BA call __RTC_CheckEsp (0721244h)
007217BF mov esp,ebp
007217C1 pop ebp
007217C2 ret
////////////////////////////////////////////////////////////////////////////////////
int main()
{
00721F20 push ebp
00721F21 mov ebp,esp
00721F23 sub esp,0D0h
00721F29 push ebx
00721F2A push esi
00721F2B push edi
00721F2C lea edi,[ebp-10h]
00721F2F mov ecx,4
00721F34 mov eax,0CCCCCCCCh
00721F39 rep stos dword ptr es:[edi]
00721F3B mov eax,dword ptr [__security_cookie (072A040h)]
00721F40 xor eax,ebp
00721F42 mov dword ptr [ebp-4],eax
00721F45 mov ecx,offset _3A3183C1_Main@cpp (072C066h)
00721F4A call @__CheckForDebuggerJustMyCode@4 (0721325h)
00721F4F nop
int hp = 100;
00721F50 mov dword ptr [hp],64h
AddHp(&hp, 10);
00721F57 push 0Ah
00721F59 lea eax,[hp]
00721F5C push eax
00721F5D call AddHp (07213C5h)
00721F62 add esp,8
return 0;
00721F65 xor eax,eax
}
00721F67 push edx
00721F68 mov ecx,ebp
00721F6A push eax
00721F6B lea edx,ds:[721F98h]
00721F71 call @_RTC_CheckStackVars@8 (07211E0h)
00721F76 pop eax
00721F77 pop edx
00721F78 pop edi
00721F79 pop esi
00721F7A pop ebx
00721F7B mov ecx,dword ptr [ebp-4]
00721F7E xor ecx,ebp
00721F80 call @__security_check_cookie@4 (072114Ah)
00721F85 add esp,0D0h
00721F8B cmp ebp,esp
00721F8D call __RTC_CheckEsp (0721244h)
00721F92 mov esp,ebp
00721F94 pop ebp
00721F95 ret
* hp 포인터, value 값
007217A2 mov eax,dword ptr [hp] : eax에 main의 hp의 주소값 저장(0x00cffac0)
007217A5 mov ecx,dword ptr [eax] : ecx에 eax 주소 안의 값(100) 저장
007217A7 add ecx,dword ptr [value] : ecx에 value의 값(10) 더해서 저장(총 110)
007217AA mov edx,dword ptr [hp] : edx에 main의 hp의 주소값 저장(0x00cffac0)
007217AD mov dword ptr [edx],ecx : main의 hp에 ecx의 값(110) 저장
* 이중 포인터
주소 값의 주소 값을 담는 변수
가리키고 있는 값의 주소 값의 주소 값을 저장
* 포인터 연산
32비트 - 4바이트 간격으로 연산됨
64비트 - 8바이트 간격으로 연산됨
ㄴ 주소 연산자 : &
ㄴ 산술 연산자 : +, -
ㄴ 간접 연산자 : *
ㄴ 간접 멤버 연산자 : ->
'게임프로그래밍 > 게임 프로그래머 입문 올인원' 카테고리의 다른 글
[게임 프로그래머 입문 올인원] 파일분할, 블루프린트 실습 - 2주차 (0) | 2025.01.14 |
---|---|
[게임 프로그래머 입문 올인원] 함수 기초, 스택 메모리와 스택 프레임, 디버깅 기초 (0) | 2025.01.07 |
[게임 프로그래머 입문 올인원] 블루프린트 실습 - 1주차 (0) | 2024.12.23 |
[게임 프로그래머 입문 올인원] 분기문, 반복문 (0) | 2024.12.18 |
[게임 프로그래머 입문 올인원] 산술 연산, 비교 연산, 논리 연산 (0) | 2024.12.16 |