2012의 게시물 표시

Procmon 일부 기능

이미지
Procmon의 몇 가지 기능에 대해서 정리해봅니다 1. Configure Symbols Option에 있는 것인데 Dbghelp.dll path를 선택해주면 Event Properties에서 Stack 탭의 Location에 함수 이름이 나오기 때문에 어떤 식으로 동작하는지 확인을 할 수 있습니다 위 그림처럼 WDK의 설치 경로에 있는 것으로 하였는데 기본 경로는 system32입니다 바꾼 이유는 version이 6.0 이상이어야 하는데 최초 설치시 버전이 5.x 라서 함수 이름을 확인할 수가 없습니다 그래서 msdn에서 WDK를 설치하고 그 경로에 있는 DbgHelp.dll을 사용하였습니다 위 그림처럼 Location에서 함수 이름을 확인할 수 있습니다 2. Filter의 Enable Advanced Output 입니다 활성화 하면Operation에 IRP_MJ 또는 FASTIO가 추가되고 Detail Column에서도 결과가 추가됩니다 3. 글꼴은 대부분 아는 부분입니다 맑은 고딕, 굵게, 10 으로 설정해주니 개인적으로 눈이 편합니다

extern 변수 활용

변수의 선언 앞에 extern이 있으면 다른 cpp 또는 h 파일에 변수를 이용하는 것이다 main.cpp #include <stdio.h> #include "extern.h" extern int index; void main() { printf("extern 출력값 테스트 : %d\n", index); } extern.h int index = 10; 결과값을 확인하면 extern 출력값 테스트 : 10

Visual Studio 2010 디버깅 중 값 확인

Visual Studio 2010에서 브레이크 포인트를 설정 후 디버깅을 시작하면 조사식 창에 $err,hr 라고 기록하면 GetLastError() 처럼 가장 최근에 발생한 결과 값을 확인 할 수 있다

C++ : Class로 만든 DLL Export 및 Import

프로젝트 만들 때 솔루션 디렉토리를 생성하고 Dll 프로젝트와 Test Dll 프로젝트를 생성한다 Test Dll 프로젝트는 MFC 응용 프로그램에서 다이얼로그 기반만 설정하고 마침한다 Dll 프로젝트는 MFC 확장 DLL만 설정하고 마침한다 Dll 프로젝트에서 Dll과 App에서 사용할 공용 헤더를 추가한다 Dll.h class A { public: virtual int AddInteger(int A, int B) = 0; virtual void destroy() = 0; }; Dll.cpp #include "stdafx.h" #include "Dll.h" #include <iostream> #ifdef _DEBUG #define new DEBUG_NEW #endif using namespace std; class B : public A { public: B() { cerr << "B constructor\n"; } ~B() { cerr << "B destructor\n"; } int AddInteger(int C, int D) { return C+D; } void destroy() { delete this; } }; extern "C" __declspec ( dllexport ) A* create_b () { return new B; } Test_App의 Dlg.cpp 에서 Dll.h 파일을 include 하고 테스트용으로 만든 버튼에 HINSTANCE hDll = NULL; hDll = LoadLibrary(L"Dll.dll"); if(hDll == NULL) { OutputDebugString(L"dll load fail...

DLL (dynamic link library) 에 대한 설명

묵시적인 로드타임 링킹(implicit load-time linking) .lib 파일에서 임포트한 심벌이 무엇인지에 대한 임포트 테이블 리스트를 가지고 있다 그래서 프로그램 빌드시 .lib 파일이 필요하다 임포트할 함수의 원형을 정의하는 헤더 파일은 필수 사항이다 명시적인 로드타임 링킹(explicit load-time linking) .lib 파일을 사용하지 않으며 LoadLibrary로 DLL을 로드하고 함수를 사용하기 위해 GetProcAddress를 사용한다 임포트할 함수의 원형을 정의하는 헤더 파일은 선택 사항이다

DumpBin 사용법

dumpbin에 대한 간단한 설명 주로 dll의 export 함수를 확인하기 위함 command에서 사용하므로 환경변수에서 Path 등록을 해주면 어느 곳에서 사용할 수 있다 C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE - dll 오류를 해결하기 위함 C:\Program Files\Microsoft Visual Studio 10.0\VC\bin - 어느 경로에서도 DumpBin 실행 가능하도록 위함 위의 두 경로를 등록. 그리고 추가 전에 세미콜론(;) 입력 - 세미콜론을 입력해야 추가로 경로를 지정할 수 있음 사용 명령어 예 - dumpbin /exports Test.dll

정규표현식(Regular expression)

정규표현식이란? 문자열을 추상적으로 표현하는 방법 복잡한 패턴의 문자열에서 원하는 정보를 얻어낼 수 있는 강력한 도구 Perl의 정규표현식 정규표현식이 내장되어 지원이 완벽하다 임의의 한 문자 ( . ) 행 바꿈 문자를 제외한 어떤 문자에도 대응이 가능하다 예) A.ple = Apple(O), Alple(O), Aplle(X) 둘 중 하나 선택 ( | ) | 기호를 기준으로 앞뒤의 값들 중의 하나 선택 예) gr(a|e)y  = gray 또는 grey 로 둘 중 하나에 매치된다 괄호가 없을 경우 gra|ey 는 gra 또는 ey 로 인식 예) (First|1st) => (Fir|1)st 앞의 문자를 0회 또는 1회 반복 ( ? ) ?문자는 앞의 문자가 있거나 없는 경우를 찾을 때 사용 예) apples? apple(O), apples(O) 복수와 단수를 구분하는 경우 많이 사용 앞의 문자를 0회 이상 반복 ( * ) *문자가 입력된 이전의 문자가 출력이 되지 않거나 여러번 출력이 되는 것을 지정한다 예) apple* = appl(O), apple(O), appleeeeeee(O) 앞의 문자를 1회 이상 반복 ( + ) +문자가 입력된 이전의 문자가 1번 이상 입력이 되는 것을 지정 예) apple+ = apple(X), apple(O), appleeeeeeeeeee(O) 정규표현식 그룹 ( () ) ()는 정규식 내에서 패턴을 그룹화 할 때 사용 예) (apple)* = apple(O), appleapple(O), appleappleapple(O) n회 반복 ( {n} ) 바로 앞의 문자를 정확히 n번 반복한다 예) A.{3}e  = Apple(O), Abcde(O), AAAAA(X),AAAAe(O) n회 이상 반복 ( {n,} ) 바로 앞의 문자를 n회 이...