inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

포인터 실습

함수문법과 어셈블리어 관련 궁금증...

210

한울

작성한 질문수 36

0

안녕하세요

어셈블리어랑 코드를 살피다가 궁금한 점이 들었는데

1. 구조체 player를 만들면서 멤버로서 hp,attack,defence을 int type으로 선언하였는데

    다른 monster.[멤버]들이나 ret.[멤버]들에 값을 넣을 때의 어셈블리어는 [ebp-0Ch],[ebp-8]로 4바이트 간격을 띄고 있었지만 player.[멤버]들에 값을 넣을 때의 어셈블리어는 [ebp-10h], [ebp-0Ch]로 2바이트 간격을 띄고 있었습니다..왜 이런 현상이 발생한 것인가요?

(조사식에서는 &(player.[멤버])를 하니 정상적으로 4바이트 간격이 나왔지만 디스어셈블리에서만 이럽니다...)

2. 

StatInfo CreatePlayer();라는 함수를 선언할 때 이 경우 함수의 시그니처는 output(반환)형식은 statinfo 타입이고 input(매개변수)은 없다!인 것으로 알고 있는데

스택 프레임이

[매개변수][ret][지역변수(temp(c,c,c -> 100, 10, 2), player(b,b,b -> 100, 10, 2))] | [매개변수(&temp)][ret][지역변수(ret(100, 10, 2))]

가 된다면 CreatePlayer()함수의 스택에 매개변수 &temp가 들어온다는 의미인데 문법적으로 가능한 것인가요?

3.

mov [player], 0xbbbbbbbb는 player 변수 메모리(바구니)에 해당 값을 복사한다

mov [esp-10Ch], 0xbbbbbbbb는 esp-10Ch 주소값 안에 들어있는 메모리에 해당 값을 복사한다

lea eax,[ebp-11Ch] 는 &(ebp-11Ch)가 아닌 주소값 ebp - 11Ch를 eax에 복사한다

정도로 이해해도 괜찮을까요?

원래는 lea eax, [변수]면 변수의 주솟값(&변수) 복사, mov eax, [변수]면 변수의 내부값(변수) 복사

이렇게 이해했었는데

최대한 검색을 해봤는데도

메모리창에 &ret랑 ebp-10Ch가 동일한 값을 가지는 것과

[ret]랑 [ebp-10Ch]가 동일한 의미를 가지려면 어떻게 해석해야 하는지랑

lea 어셈블리어 해석에서 자꾸 헷갈려서....

C++

답변 1

0

Rookiss

1.
0x10 = 16
0x0C = 12
고로 16-12=4

2.
네 C++ 관점과 로우레벨 관점은 달라도 무방합니다.
리턴값을 복사해서 뱉어주는 경우도 있지만,
최적화를 위해 컴파일러들이 최적화해서 바로 복사없이 원본 데이터에 꽂아주는 경우도 있습니다.

3. lea가 원래 좀 헷갈립니다. 저도 리버싱 공부할 때 맨날 문서를 다시 보고 했던 기억이 있네요.

0

한울

1. 헉...몇 번씩이나 다시 읽었는데도 10진수로 계속 해석을 해버렸네요;;

2. 

참조 변수도 포인터처럼 주소값을 들고 있는 상태라고 하셨는데

어셈블리어에서는 reference 바구니 안에 &number가 들어가게 되는 반면,

조사식에서는

reference 바구니 안에  number의 값이 들어가게 되었는데(pointer 바구니는 2개 다 &number가 들어감)

어떻게 결과는 동일하게 나오는 것인가요?

visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.

0

561

1

정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?

0

456

1

strcpy() 구현 관련 질문

0

546

1

빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?

0

477

1

클래스 타입의 포인터 질문합니다

0

561

1

입력값을 enum 값에 넣어주는거 이제 막혔나요?

0

505

1

템플릿 특수화 관련 질문

0

393

1

포인터 관련 질문합니다!

0

276

1

Unable to start assembler. Check your settings.

0

852

2

cpu선택

0

552

1

포인터 질문이 있습니다

0

336

1

20:35 에서 구조체 크기에 대한 질문입니다!

0

593

1

iterator 삭제관련

0

419

1

함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!

0

316

1

15 분 45초 대 질문

0

319

0

스택 프레임 질문합니다!

2

316

1

오른값 참조 in 게임

0

394

0

동적할당 질문이 있습니다

0

460

1

안녕하세요 메모리에 대해 질문드립니다.

0

314

1

함수객체 의 매개변수

0

370

1

복사생성자

0

441

1

main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요

0

431

1

포인터 실습 강의를 보고 궁금한게 있습니다.

0

360

1

스택 오버플로우

2

804

1