23분 23초에 main함수내에서 크래시가 나는 부분에서 질문있습니다
262
작성한 질문수 16
제가 이해한바로는
push 1
push 2
call MAX 를 하고
MAX 함수에서 pop rbp를 하기 전까지를 다음과 같다고 생각했습니다

여기서 pop이 막히는데요
22분 29초에 설명을 보면 pop을 하게 되면 이전 rbp로 돌아간다고 하셨는데 rsp는 RET을 가르키게 되고 rbp는 이전 bp값을 가르키는 걸로 말씀하셨더라구요 이게 그냥 pop이라는 instruction이 그렇게 하는걸로 이해하면 될까요?
그렇다면 pop은 무조건 rbp는 이전 bp값으로 돌아가고 rsp는 RET로 돌아가게 하는 것인가요?
답변 1
1
그건 아니고요.
pop XXX은 말 그대로 현재 esp가 가리키는 위치에 있는 데이터를
XXX에다 넣은 후, esp를 위로 올리는 (32비트:4 or 64비트:8) 역할을 합니다.
그런데 딱 마침 pop ebp를 하는 순간에
esp가 가리키는 위치에 있는 데이터가 [이전 ebp]이기 때문에,
ebp 레지스터에 [이전 ebp 값]이 들어가는 것이죠.
참고로 32비트 고전 환경에서는 push 1 push 2를 실행하지만
64비트 환경에서는 대부분 인자가 몇 없으면 그냥 rax 같은 레지스터에 넘기는 경우가 많습니다.
(but 인자가 많아지면 다시 push를 이용해 스택을 이용해야 합니다)
visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.
0
561
1
정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?
0
456
1
strcpy() 구현 관련 질문
0
542
1
빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?
0
477
1
클래스 타입의 포인터 질문합니다
0
560
1
입력값을 enum 값에 넣어주는거 이제 막혔나요?
0
504
1
템플릿 특수화 관련 질문
0
392
1
포인터 관련 질문합니다!
0
275
1
Unable to start assembler. Check your settings.
0
851
2
cpu선택
0
552
1
포인터 질문이 있습니다
0
334
1
20:35 에서 구조체 크기에 대한 질문입니다!
0
592
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





