본문 바로가기

Dll Self Unloading 오랜만에 포스팅하는 것 같습니다. 요샌 뭘하는지 정신이 없군요. 요즘 뭐좀 코딩하다가 문뜩 이런생각이 들었습니다.dll이 로드되려면 프로세스에서 LoadLibrary를 사용해서 로드를 시켜주고 더 이상 사용하지 않을 땐 FreeLibrary로 해당 dll을 Unload 시켜주게 됩니다. 그러면 dll이 내부적으로 스스로 unload 할 수 있지 않을까? 라는 무모한 생각을 했었습니다. 몇 분쯤 생각하다가 아이디어가 잘 안떠올라서 구글에 찾아보니 Stack overflow에 어떤분이 답글이 있었습니다. 저랑 똑같은 생각을 한 사람이 글을 올렸더군요.하지만 답글은 안정적인 방법으로는 dll 스스로 unload 할 수 있는 방법이 없다는 답변이었습니다. 그 이유로는 FreeLibrary를 하게되면 dll에 대.. 더보기
MoveFileEx 의 MOVEFILE_DELAY_UNTIL_REBOOT MoveFileEx 함수를 사용해서 플래그를 MOVEFILE_DELAY_UNTIL_REBOOT를 주게되면 컴퓨터 리붓 시 파일 이름 변경 및 파일 삭제가 가능한 것을 알 수 있습니다. 이러한 파일 리네임 기능을 윈도우 자체적으로 제공을 해주지요.그리고 위 함수로 인해 등록을 시키면 아래와 같은 레지스트리 경로에 해당 파일 경로가 등록되게 됩니다. "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\PendingFileRenameOperations" 그러면 윈도우는 저 레지스트리 값을 언제 읽고 내부에 있는 언제 파일 리네임 처리를 언제 할까요??간단하게 콜스택만 보면 알 수 있습니다. 해당 파일을 삭제하기 위해서는 NtOpenFile의.. 더보기
Visual Studio 컴파일 속도(최적화 옵션) 오늘 뭐좀 만들어보려고 Visual Studio 2012 를 켰습니다. 암호화 루틴도 사용해야해서 AES 256을 사용하기로하고 구글링해서 관련 소스코드를 가져왔습니다. AES256 암복호화 소스가 제대로 돌아가는지 테스트 하기 위해 컴파일.. 코드는 짧습니다. 그리고 "aes.c" 의 코드는 500줄 가량됩니다. 그렇게 긴 코드도 아니죠. 하지만 컴파일에 걸린 시간은 38초!! 컴파일 시간이 늦어진다는 것은 그만큼 동일 시간에 디버깅 할 수 있는 횟수가 줄어버리는 것이기 때문에 작업 능률 또한 떨어지겠군요. 왜이렇게 느리나 프로젝트 속성에서 봐보았는데 최적화 옵션이 문제였습니다.최적화 부분을 /O2 -> /Od 로 변경.. 즉 그냥 최적화 사용 안함으로 바꿨습니다. 그리고 다시 컴파일 1초도 안걸리는군.. 더보기