분류없음2011.08.01 18:08

http://msdn.microsoft.com/en-us/library/ms686016(VS.85).aspx

아무런 Handler를 등록하지 않으면, default handler 가 호출되고, 이 넘은 ExitProcess()를 호출함.

ExitProcess() :  http://msdn.microsoft.com/en-us/library/ms682658(v=VS.85).aspx

ExitProcess()가 호출되면 thread 들 죽이고, DLL들 detach 되고 현재 프로세스를 죽인다. 

이때 static 객체나 stack 객체의 소멸자 등을 호출해주지 않고 그냥 죽여버린다.

왜냐면, 소멸자는 CRT에서 호출해주는데, CRT가 Windows API로 구현되어 있다.

ExitProcess() 같은 Windows API 로 프로세스를 종료해버리면 소멸자가 뭔가요? 하면서 쌩까버리기 때문;;

실제로 소멸자에 breakpoint를 잡아서 call stack을 보면 exit() -> doexit()에서 asm 으로 소멸자를 호출해준다.



 
신고
Creative Commons License
Creative Commons License
Posted by 飛烏