반응형


-0- 저는 간단한 콘솔 테스트 코드를 작성하는 경우엔 주로 gVim 으로 코딩을 합니다.

GNU 계열인지라 라이센스 걱정도 필요없고~ 가볍기도 하구요.

그리고 indent 기능 및 플러그인 셋팅만 잘 해두면 상용툴 못지않게 상당히 편리한 작업을 할 수 있습니다.

개발자마다 선호하는 개발환경(소스코드 폰트, 탭간격 등...)이 있듯이...

저 역시도 저 나름대로 선호하는 환경(?)이 있고 툴을 설치하면 그런 셋팅부터 먼저 하는데요~

이번에는 gVim 의 폰트, 윈도우크기, 윈도우위치~ 를 셋팅하는 방법입니다.

if has("gui_running")
    "폰트 설정
    set guifont=나눔고딕코딩:h10
    
    "VI 시작 크기 설정
    au GUIEnter * winsize 120 50
    
    "VI 시작 위치 설정
    au GUIEnter * winpos 0 0

endif


gVim 패키지에는 윈도우창이 뜨는 GUI 작업모드도 있지만, 콘솔 작업모드도 있기에~

저는 GUI 모드에서만 적용을 하기 위해 "gui_running" 으로 조건을 걸어두었습니다.

폰트 설정에서~ 폰트이름 뒤의 "h10" 은 폰트크기이구요..

시작 크기 설정에서의~ 수치는 ( 창의 X 사이즈, 창의 Y 사이즈 ) 이고,

시작 위치 설정에서의~ 수치는 ( 모니터화면의 X 좌표, 모니터화면의 Y 좌표 ) 정도로 생각하시면 되겠네용..^^;;

사실 =0=;; 개인적인 백업차원에서의 포스팅이었습니다.. ( 쿨럭;;; )

반응형
AND

반응형


Visual Basic, Java 등은 예전부터 소스코드 자체를 유니코드로 처리했기에...

변수 및 함수 등의 이름에 한글을 사용하는 게 가능했습니다.

(제 기억에 Visual Basic 6.0 에서도 한글 코딩이 가능했습니다..ㅋㅋ)

얼마전 새로 출시된 C++ Builder 2009 버전에서 유니코드를 지원하면서...

변수, 함수 등의 한글 네이밍이 가능해졌단 걸 알고...

" 우와~~ 드디어 C/C++ 에서도 한글이 가능하구나!! 역시 C++ Builder ~!! :) "

... 라며 혼자 감탄을 했는데;;;

알고봤더니 =0=;; Visual C++ 이 더 먼저 지원을 하고 있더군요;; (oTL ;;;;)

정확히 어느 버전부터 가능해졌는지는 모릅니다만 =0=;; 2008 버전에서는 확실히 가능하더군요;;;
( 6.0 버전은 확실히 안되고... .Net 2002 or .Net 2003 아니면.. 2005 버전일텐데;; )

뒤늦게나마.. C/C++ 에서도 한글 네이밍이 가능하단걸 알고선 가볍게 장난을 쳐봤습니다..ㅋㅋ
( 사실 아이디어는 자주가는 모~ 커뮤니티에서 어느분이 올린글을 보고 ...^^;;; )


#include <iostream>

using namespace std;
//-----------------------------------------------------
#define 프로그램시작 main

#define 문자형 char
#define 정수형 int
#define 무형 void
#define 클래스 class

#define 공개형 public
#define 보호형 protected
#define 개인형 private

#define 입력 cin
#define 출력 cout
//-----------------------------------------------------

//-----------------------------------------------------
클래스 신상정보 {
개인형:
    정수형 나이;
    문자형 이름[20];

공개형:
    무형 정보입력();
    무형 정보출력();
};
//-----------------------------------------------------
무형 신상정보::정보입력()
{
    출력 << "이름을 입력하세요 : ";
    입력 >> 이름;
    출력 << "나이를 입력하세요 : ";
    입력 >> 나이;
}
//-----------------------------------------------------
무형 신상정보::정보출력()
{
    출력 << "이름 : " << 이름 << ", 나이 : " << 나이;
}
//-----------------------------------------------------
무형 프로그램시작()
{
    신상정보 현승군;
    
    현승군.정보입력();
    현승군.정보출력();
}
//-----------------------------------------------------



ㅋㅋㅋ 어떤가요...? ^^;;

전처리부분이 다소 지저분해지긴 했지만...

의도했던대로 메인코드만큼은 Full 한글로~~ ㅋㅋㅋㅋㅋㅋ;
( 엉뚱한데서 뿌듯함을 느끼는 넌 대체 뭐냐;;;;.. oTL;;; )

소스코드의 공유 및 호환성을 고려한다면... 이런 방식은 바람직하지 않지만..

개인적인 개발에 있어서는 간간히 변수나 함수 등에 한글을 사용하는 것도...

그리 나쁘지는 않을것 같다는 생각을 살포시 해봅니다..ㅋ
.
.

( 아~ 주의사항은 이 방법을 잘못 사용하면...
  코드자체가 심히~~ 지저분해질 수 있으며..;; 가독성에도 영향을 미칠 수 있다는 점입니다..;; )

반응형
AND

반응형


안티-리버싱 기법중에 TLS Callback 을 이용하는 방법이 있습니다.

( TLS Callback 에 대한 자세한 내용은 여기[Zesrever님 블로그]를  참조하시면 되겠네용... ^^ )

회사 프로젝트 때문에 TLS Callback 을 이리저리~~ 공부를 하는 중에 한가지를 알아냈는데요;;
( 이미 알고 계신 분들도 있겠지만.. 뭐..^^;; )


XP 이상에서 TLS Callback 을 사용하려면 USER32.DLL 이 꼭(?) 필요하더군요...

이런저런 유저레벨 디버거들을 방지하기 위한 코드를 TLS Callback 에서 실행시키려고...

온갖 삽질(?)을 다 해가며 결국 구현을 했는데..

이게 왠일..;;; 코드상으로는 특별히 문제가 될만한 부분이 없는데...

제가 원한대로 동작을 하지 않는거였습니다;;;;


이것땜에 한참 =0= 난감해했었는데...

알고보니 "USER32.DLL 이 로딩되지 않아서..." 라는 심히 허탈한 이유때문이더군요;;

궁금하신 분들은 아래의 샘플코드 긁어서 테스트해보시기 바랍니다.. -0- ㅎㅎㅎ; ( oTL;; )

#include <windows.h>
#include <stdio.h>

#pragma comment(linker, "/INCLUDE:__tls_used")

#pragma comment(lib, "KERNEL32.LIB")
#pragma comment(lib, "USER32.LIB")

DWORD g_dwValue = 0;

// TLS_Callback #1
void NTAPI tls_callback1(PVOID instance, DWORD reason, PVOID reserved)
{
    if (reason == DLL_PROCESS_ATTACH) {
        OutputDebugString("TLS_CALLBACK #1");

        g_dwValue += 1234;
    }
}

// TLS_Callback #2
void NTAPI tls_callback2(PVOID instance, DWORD reason, PVOID reserved)
{
    if (reason == DLL_PROCESS_ATTACH) {
        OutputDebugString("TLS_CALLBACK #2");

        g_dwValue *= 20;
    }
}

#pragma data_seg(".CRT$XLB")
PIMAGE_TLS_CALLBACK p_thread_callback[] = { tls_callback1, tls_callback2, 0 };
#pragma data_seg()

int main(void)
{
    // FindWindow(NULL, NULL);     // USER32.DLL 로드를 위해...

    printf("g_dwValue = %d\n\r", g_dwValue);

    return 0;
}

참고로 main() 의 FindWindow() 는 어디까지나 USER32.DLL 을 포함시키기 위해 들어간거랍니다;;

해당 FindWindow() 의 주석을 제거하면 tls_callback1, tls_callback2 가 제대로 호출되지만..

주석을 한 상태에서는 TLS Callback 루틴 자체를 타지 않습니다;;;

Win2000 에서는 USER32.DLL 이 있든 없든 상관없이... 정상적으로 TLS Callback 이 호출되는데 말이죠..

XP 이상에서는 꼭(?) USER32.DLL 이 로딩되어야 되는거 같네요;;..

TLS Callback 을 사용하려는 분들 참고하시라고.. 살포시 올려봤습니다... ( 쿨럭;; )

반응형
AND