메모리와 스택의 작동 방식을 이해하기 위해 gcc -S
으로 놀고 있습니다. 이 연극을하는 동안 나는 분명하지 않은 몇 가지 점을 발견했다. 이유를 이해하도록 도와 주시겠습니까?어셈블러 코드를 만들 때 gcc가 왜 그렇게합니까?
언제 함수를 호출하는 대신
push
mov
에esp
사용하는라는 하나의 인수를 설정합니다.push
을 사용하지 않는 이점은 무엇입니까?스택 위치 인수와 함께 작동하는 함수는
ebp + (N + offset)
(N은 반송 주소 용으로 예약 된 크기 임)으로 가리 킵니다. 나는 더 이해할 수있는esp - offset
을 볼 것으로 예상한다.ebp
을 어디서나 사용하는 이유는 무엇입니까? 나는이 사람들이 평등하지만 어쨌든 알고 있습니까?main
의 처음에이 마법은 무엇입니까? 왜 이런 방식으로esp
을 초기화해야합니까?and esp,0xfffffff0
감사
,
이것은 세 가지 질문 일 수 있습니다. 어쨌든, 세 번째 포인트에 대한 대답은 스택 정렬입니다. – Mysticial