2014-12-24 3 views
0

사용자 정의 함수에 매개 변수를 전달하는 방법과 그러한 함수 내에 지역 변수를 작성하는 방법을 알고 있습니다. 하지만 내가 원하는 것은 main 함수에 대한 지역 변수를 만드는 것이다.main 함수 내부에 지역 변수를 만드는 방법은 무엇입니까?

그래서 main 함수는 프로그램이 시작될 때 실행되는 첫 번째 함수이지만 main이 실행을 시작할 때 esp의 초기 값은 무엇입니까? 즉, 메인이 실행을 시작할 때 스택 맨 위에있는 것은 명령 행 인수입니까?

main에서 로컬 변수를 만들고 싶다면 esp 값을 ebp에 저장 한 다음 esp를 사용자 정의 함수 내부에서 필요한만큼 필요한만큼 증가시켜야합니까?

답변

2

그래서 main 함수는 프로그램이 시작될 때 실행되는 첫 번째 함수이지만 main이 실행될 때 esp의 초기 값은 무엇입니까? 즉, 메인이 실행을 시작할 때 스택 맨 위에있는 것은 명령 행 인수입니까?

main

정상적인 함수 호출되므로 ( cdecl 호출 규칙으로) 최상위 것들 (선택적으로), 위에서 아래로, 환경 포인터 인수 문자열 포인터 배열 다음 포인터이다 , argc, 그 다음 반송 주소는 main입니다.

main에 로컬 변수를 만들려면 esp 값을 ebp에 저장 한 다음 esp를 사용자 정의 함수 내부에서 필요한만큼 필요한만큼 증가시켜야합니까?

main 사용자 함수이다. 대략 다음과 같은 코드에서 (운영 체제에 따라 다를 수 있습니다 이름) crt0.o에서 호출 :

void 
_start(void) 
{ 
    /* initialisation skipped */ 
    int rv = main(newargc, newargv, environ); 
    do_global_dtors(); 
    exit(rv); 
    /* NOTREACHED */ 
} 

그래서, TL; DR : 예.

는 (심지어 _start가 유효한 스택 포인터를 가지고 있습니다,하지만 일반적으로 더 반송 주소, 그래서 결국 exit 콜을 호출해야합니다.) 심지어 실제 진입 점에 대해, 스택 포인터는 그래서 유효

+0

주 지역 주민을 정확하게 할당 할 수 있습니다. – Jester