본문 바로가기

실행파일 인증서 서명과 검증 가끔씩 파일 무결정을 지원해야한다. 일반적인 무결성 지원은 파일에 대한 해시 값을 만들어서 저장해두고 나중에 이 값과 비교하는 방식이다. 이 경우 보안상 이슈가 있다. 즉 원래 변경된 파일에 대한 해시값을 같이 만들어 놓았다면, 변경된 파일을 해시값과 비교해도 같기에 의미가 없어진다. 이럴때 사용하는 방법 중에 하나가 전자서명이다. 자세한 알고리즘과 작동 방식에 대해서는 다른 곳에서 찾으면 많이 나오기 때문에 여기서는 다루지 않는다. 혹시 내가 시간이 아주 많이(?) 남는다면 나중에 정리할 수도 있을지도 모른다. 추가로 여기서 다루는 내용은 오로지 Windows에서만 가능하다. 다른 플랫폼이 필요하시다면 죄송하지만, 다른 곳을 찾기 바란다. 작성: http://ospace.tistory.com/,2011.. 더보기
VC에서 pseudo 디버깅 VS에서 유용한 디버깅 팁들이 많다. 그중에 pseudo-register을 사용하는 방법이 있다. 작성: http://ospace.tistory.com/(ospace114@empal.com) 2009.12.23 pseudo-register 먼저 pesudo-register가 무엇일까? pesudo-register는 watch 윈도우에서 보이는 실제 변수가 아닌 가짜변수이다. 이를 통해서 기타 여러가지 디버깅 정보를 얻을 수 있다. 해당 pesudo-register는 VisualStudio 버전에 따라서 지원이 안될 수 있으니 주의! @ERR, hr 이는 최종 win32 에러 값을 출력한다. 해당 에러 메시지 숫자가 아니라 사람이 읽을 수 있는 결과를 표시해준다는 점에서 훌륭하다. hr은 윈도우의 HRES.. 더보기
프로그램의 메모리 사용량 측정하기 프로그램 자신의 사용하고 있는 메모리 사용량을 측정하기 위한 것입니다. 다른 프로세스에 적용되지는 않습니다. 이곳에서 사용되는 방법은 VirtualQuery() 함수를 사용한 방법입니다. 생각보다 코드는 단순합니다. 작성일: 2009.10.07 (http://ospace.tistory.com/), ospace114@empal.com 메모리 사용량 측정하기 GetPrivateBytes() 함수가 메모리 사용량을 측정하는 함수이다. 이 함수는 순수하게 물리 메모리에 적재된 Private 영역만 추출하게 된다. 가상 메모리 시작은 0부터 시작해서 0x8000000까지 조회한다. 이 영역은 메모리 영역에서 프로세스 영역으로 사용자가 사용할 수 있는 Private 영역에 해당한다. 이는 Windows 98과 ME.. 더보기
DOS창에서 일부 출력 문자열 색상 변경하기 DOS창에서 색상을 변경하기는 사실 쉽다. 가장 쉽게 구할 수 있는 것이 "color"라는 도스 명령어를 이용하면 된다. 이는 화면 전체 색상을 손쉽게 변경한다. 아마 대부분 이를 이용할 것이다. 그러나 내가 원하는 것은 출력 결과에서 일부 결과를 색상을 변경해서 출력하고 싶었다. 아무리 찾아봐도 찾기 힘들었다. 포기하다가~ 오늘 다시 구글샘에게 물어보니 다행이 원하는 결과를 줬다. 구글샘 사랑해요~ 작성일: 2009.09.21 (http://ospace.tistory.com/), ospace114@empal.com 실제 해보기 두가지 방식이 있다. 도스 명령어을 사용하는 방법과 코드 내에 내장하는 방식이 있다. 전자는 ctext라는 프로그램을 이용한 것이고, 후자는 SetConsoleTextAttrib.. 더보기
VC에서 윈도우 에러메시지 윈도우에서 에러 코드는 얻는 함수는 GetLastError()이다. 이함수를 사용하여 얻는 값는 숫자로 되어 있다. 숫자로만은 어떤 에러인지 알수 없다. 물론 구글링하면 되겠지만, 번거롭다. 또는 에러 코드마다 에러메시지 생성을 해주어야 하는 귀찮은 일이 생긴다. 이를 간단하게 해결할 수 있는 방법이 에러 코드를 이용해서 자동으로 에러 메시지를 생성하는 것이다. 이를 위한 win32 api가 FormatMessage()가 있다. CString ErrorString(DWORD err) { std::ostringstrm ostm; LPTSTR s; if(::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,.. 더보기
매크로를 조건에 따라 실행하기 이걸 사용하는 대부분는 디버그 모드에서는 해당 메크로를 사용하고 릴리즈 모드에서는 사용하지 않을려고 하려는 경우이다. 이는 MFC의 TRACE 매크로를 참고하였다. 생각보다는 단순하다. 그러나 알기 전까지는 생각해내기가 쉽지않다. 작성일: 2009.08.14 (http://ospace.tistory.com/), ospace114@empal.com 코드 실제 코드를 보자. ASSERT 매크로를 사용한다고 가정하자. 그래서 디버그 모드일 경우에만 ASSERT 기능을 수행하고, 그렇지 않으면 ASSERT 매크로가 작동하지 않도록 한다. #ifdef _DEBUG #define ASSERT(s) assert(s) #else #define ASSERT(s) ((void)0) #endif 위 코드에서 ((void)0.. 더보기
리다이렉션이용한 디버깅 메시지 출력 단순히 문자열 하나만 출력하는 디버깅 메시지는 단순한다. 그렇지만 디버깅을 하다보면, 변수의 값이나 포인터 등을 여러 형식의 포멧에 맞춰 출력하게된다. MFC를 사용한다면 CString에서 Format()를 사용하면되고, 일반 c라면 sprintf()등을 사용하면된다. 또는 MFC에서 TRACE 매크로를 사용해도된다. c++에서 MFC의 CString은 별로 사용하고 싶지않거나 사용할 수 없는 경우라면 어떻게 될까? sprintf()를 이용할까? 그러기에는 c++답지 않고 세련되지도 않고... 그래서 c++에서 cout등에 사용하는 리다이렉트(" 더보기
Vista 호환 프로그램 데이터 저장위치 다루기 최근 Vista용 프로그램을 코딩을 했었다. 이때 설치된 폴더에서 설정파일 읽어오고 해당 폴더에 데이터를 기록하였다. 시간이 바빠서 대충 때빵한 코드였다. Vista 지원에 대해 예전부터 관심을 가지고 대충 감만 잡고 있었던 중에 이번에 제대로 수정하고자 이것 저것 자료를 찾고 정리를 해보았다. XP은 사용자 권한이 자동으로 관리자 권한을 갖게되어 프로그램이 아무 곳에나 데이터를 기록할 수 있었다. 그러나 Vista에서는 그렇게 할 수 없다. 이는 파일뿐만 아니라 레지스트리에도 해당된다. Vista에서 데이터 저장에 대한 내용은 XP에서도 이미 존재했고, 그 이전 버전에도 있었다. 그러나 개발자들은 이를 무시하고 (아니 있는지도 모르는) 개발하고 Vista로 오면서 당연히 문제가 되었고, Vista에서는.. 더보기

반응형