2008-08-15 5 views

답변

25

.exe 파일 (또는 다른 플랫폼에 해당)의 '진입 점을 포함 '주소. 첫 번째 근사값으로 OS는 .EXE 파일의 관련 섹션을 RAM으로로드 한 다음 진입 점으로 이동합니다.

다른 사람들이 말했듯이이 엔트리 포인트는 'main'이 아니지만 대신 런타임 라이브러리의 일부가 될 것입니다. 정적 객체 초기화, argc/argv 매개 변수 설정, stdin 설정/stdout/stderr, 등등. 모든 일이 끝나면 main() 함수를 호출합니다. 메인이 종료되면 런타임은 반환 코드를 환경으로 돌려 보내는 유사한 프로세스를 거치고 정적 소멸자 호출, _atexit 루틴 호출 등을 수행합니다.

MS 도구 (공짜 물건이 아닐 수도 있음)가있는 경우 모든 런타임 소스가 있어야하며, main() 메소드의 닫는 중괄호에 중단 점을 넣고 런타임으로 단일 단계를 백업하는 것이 가장 쉬운 방법입니다.

8

main()은 C 라이브러리의 일부이며 시스템 기능이 아닙니다. OS X 나 Linux는 모르지만 보통 Windows는 WinMainCRTStartup()으로 프로그램을 시작합니다. 이 기호는 프로세스를 초기화하고 명령 줄 인수와 환경을 추출하고 (argc, argv, end) main()을 호출합니다. atexit()과 같이 main() 다음에 실행해야하는 코드를 호출 할 책임이 있습니다.

Visual Studio 파일을 보면 기본 구현 인 WinMainCRTStartup을 찾을 수 있습니다.

시작할 때 호출 할 함수를 정의 할 수도 있습니다. 링커 옵션에서 "진입 점"을 변경하여 호출 할 수 있습니다. 이것은 종종 인수를 취하지 않고 void를 반환하는 함수입니다.

당신은 다음 링크에서 좀 걸릴 수 있습니다
1

Expert C++/CLI (279 페이지를 둘러보십시오)에는 고유, 혼합 및 순수 CLR 어셈블리에 대한 다양한 부트 스트랩 시나리오에 대한 세부 정보가 있습니다.

1

OS에 따라 다릅니다. OS X에는 EIP (명령 포인터) 레지스터의 시작 주소를 포함하는 프레임이 마하 헤더에 있습니다.

 
cristi:test diciu$ nm ./a.out 
0000200c D _NXArgc 
00002008 D _NXArgv 
00002000 D ___progname 
00001fe0 t __dyld_func_lookup 
00001000 A __mh_execute_header 
[..] 
00001f8c T start 

맥 OS에서 :

 
cristi:test diciu$ otool -l ./a.out | grep -A 10 LC_UNIXTHREAD 
     cmd LC_UNIXTHREAD 
    cmdsize 80 
    flavor i386_THREAD_STATE 
     count i386_THREAD_STATE_COUNT 
[..] 
     ss 0x00000000 eflags 0x00000000 eip 0x00001f8c cs 0x00000000 
[..] 

주소는 바이너리에서 "시작"함수의 주소 : 바이너리가로드되면

, OS가이 주소에서 실행을 실행 X, "주"함수보다 먼저 호출되는 "시작"함수입니다.

5

  • 콘솔 : indows는 진입 점 함수는 간다 void __cdecl mainCRTStartup(void) {}
  • GUI : void __stdcall WinMainCRTStartup(void) {}
  • DLL : BOOL __stdcall _DllMainCRTStartup(HINSTANCE hinstDLL,DWORD fdwReason,void* lpReserved) {}

일반 주 /의 WinMain/DllMain을 통해이를 사용하는 유일한 이유 만약 당신이 자신의 런타임 라이브러리 (작은 파일 크기 또는 사용자 정의 기능을 원한다면)를 사용하고 싶다면

사용자 정의 런타임 구현 이온 및 기타 트릭을 참조 작은 PE 파일을 가져 오려면 :

0

는 Windows 및 Win32 API에 관련된 책에 관심이 있다면 시도해보십시오

"Mi 용 프로그래밍 응용 프로그램 제프리 리히터 (Jeffrey Richter)의 "crosoft Windows".