신나지않니

FrontPage|FindPage|TitleIndex|RecentChanges| UserPreferences P RSS
신나지않니의 로고송(요술공주 샐리 패러디)

 요술코더 신나지않니가 찾아왔어요. 디버그하며 삽질하고 찾아왔어요
 신나지않니~♪ 신나지않니~♪
 신비한 삽질코딩으로 우리들에게 밤샘과 버그를 가져다 주지요
 신나지않니~♪ 신나지않니~♪
 요술코더 신나지않니♪
 

  • 여기 위키는? Win32관련 프로그래밍과 소프트웨어 역공학에 대해 다루고 있습니다. 저의 개인적인 얘기들도 있습니다 :)
  • 오늘의 추천페이지 : 재미있는꽃과꽃이름
  • WikiSandBox : 글 수정 연습은 이곳에서 하세요.

처음으로 저만의 위키홈페이지를 만들었습니다. 아직은 사용법을 익혀가는 중이라 자료가 없을테지만 이곳 환경에 적응이 되면 바로 업데이트 하겠습니다. 그런데 이 시스템이 굉장히 복잡하게 느껴지네요. 그래도 느낌 하나만은 끝내줍니다. 정말 멋진 공간이란 생각을 떨쳐버릴 수가 없군요. 올릴거 없어서 요즘 좋아하는 노래 올려봅니다.

모판

PE포멧

PE포멧이란 유닉스사용되는 COFF파일 포멧을 Windows 에서 확장시킨 개념이다. PE포멧은 Import 또는 Export 해오는 자원의 주소와 이름, 파일크기, 메모리에 올라갈 주소, 파일 오프셋등의 정보를 담고있는데 이는 모두 구조체로서 관리하며 이 구조는 도스시절의 MZ헤더부터 시작해 PE헤더, 섹션테이블, Import테이블, Export테이블 등으로 나뉘어져 있다.

PE 구조

MZ Header
DOS stub
PE header
Section Table
Section 1
Section 2
Section 3
Section ..
Section n

위의 구조에서 MZ Header 와 DOS stub 부분은 그리 중요하지 않다. 우리가 알아야 할 부분은 PE 헤더부터 이다. MZ Header는 두가지 용도로 사용되는데 하나는 올바른 DOS헤더 파일인지 검사하는 용도와 PE헤더의 오프셋값을 알아내는 용도로 사용된다. 대게 MZ Header로부터 0x80 떨어진 부분에 PE헤더가 있는데 굳이 이렇게 계산하지 않아도 IMAGE_DOS_HEADER 구조체의 e_lfanew 멤버가 PE 헤더의 오프셋값을 가지고 있다.

Win32 API 기본골격

#include <windows.h>

#define dszClaaName            "TestClass"
#define dszTitleName           "Test Win32 Application Program"

HINSTANCE g_hInst;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrvInst, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hWnd;
    MSG Msg;
    WNDCLASS wc;

    g_hInst = hInst;

    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hInstance = hInst;
    wc.lpfnWndProc = WndProc;
    wc.lpszClassName = dszClassName;
    wc.lpszMenuName = NULL;
    wc.style = CS_HREDRAW | CS_VREDRAW;
    RegisterClass(&wc);

    //
    // 윈도우를 생성

    hWnd = CreateWindow(dszClassName, dszTitleName, WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
            NULL, (HMENU)NULL, hInst, NULL);
    ShowWindow(hWnd, nCmdShow);

    //
    // 윈도우 메시지 루프

    while(GetMessage(&Msg, NULL, 0, 0))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }

    Msg.wParam;
}



LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;

    switch(iMsg)
    {
    case WM_CREATE:
        return 0;

    case WM_PAINT:
        BeginPaint(hWnd, &ps);

        // 화면에 무언가를 그리는 루틴을 이곳에 추가한다

        EndPaint(hWnd, &ps);
        return 0;

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }

    return DefWindowProc(hWnd, iMsg, wParam, lParam);
}

see also Win32API

Dear 신나지않니

신나지않니/***분류등의 페이지등은 님의 개인위키를 따로 만드셔서 옮기는 게 나을 듯 합니다. 노스모크모인모인/설치, 노스모크모인모인을Cafe24에설치하기, 노스모크모인모인을New21에설치하기를 참조하세요. --Astro

see also MoniWiki --세벌

저도 동의합니다. 개인적인 목적으로 따로 분류 페이지를 만드는 건 결코 좋은 생각 같지 않네요. --Nairrti

이해가 되질 않습니다. 개인적인 목적으로 분류페이지를 생성할 수 있다는 글을 읽고 페이지를 생성한건데 많은 분들께서 왜 이렇게 싫어하시는 건지 모르겠습니다. 자신의 글도 올릴수 있고 내가 올린글을 다른사람이 수정해 줄 수 있는 시스템이라 생각했는데 꼭 그런건 아닌가요? 그럼 시스템적으로 왜 이를 제제하지 않는 건가요? 그럼 야후에서는 왜 이런 서비스를 오픈한거죠? 돈주고 계정얻어서 개인 위키 만들어야죠. 물론 여러사람이 공통적인 문서를 공유하는건 멋진 일이긴 합니다만 공유하는 것밖에 할 수 없다면 위키는 그렇게 멋진 시스템이란 생각은 들지 않는군요. 정말 제가 한 행동이 결코좋은생각이 아니라면 어디가 잘못된건지 말씀해 주세요. 지우겠습니다. --신나지않니
"처음으로 저만의 위키홈페이지를 만들었습니다."라고 하셨는데 노스모크는 위키를 사용한 공동체입니다. ThisIsNotYourNotepad우리와남을위해같은 페이지를 한번 참조해주셨으면 합니다. --nyxity
위키는 BBS 시스템과는 달라서 '내가 쓴 글' '네가 쓴 글'이라는 게 없다고 생각합니다. 모두가 글을 쓰고 자기 생각을 첨가하고 공통의 주제에 대해서 '완성해 나가는' 개념이 아닐까요. (물론 Nairrti도 몇 개의 위키에서 활동을 하기는 하지만 정확하게 어떤 것이다라는 개념이 있는 건 아닙니다만) 그런 면에서 개인적인 목적으로 페이지를 만드는 건 좋은 생각이 아니라고 생각합니다.

"자신의 글도 올릴수 있고 내가 올린글을 다른사람이 수정해 줄 수 있는 시스템"이라는 것은 맞지만, 무턱대로 그래도 되는 것은 아닙니다. 모든 위키 커뮤니티에는 각각의 관습이 있고 주로 다루는 내용이 있고, 참여자는 관습을 인지하고 존중할 의무가 있습니다. 이번에 만든 페이지가 본인 외의 사람에게 도움이 될 수 있겠지만, 그렇게 전문적인 프로그래밍의 내용은 해당 프로그래밍 분야의 스터디 위키 같은 곳에 더 어울리지 노스모크에서는 본인에게만 필요한 페이지가 될 가능성이 큽니다. 또한 기존의 분류에 새 분류를 더하는 것은 충분한 필요가 있을 때 하는 것이고, 만든 분류 자체가 노스모크의 스타일을 염두에 두지 않았습니다. 새로 온 열혈 편집자분들이 처음부터 페이지를 많이 만들고 분류체계에 손을 대고 하는 경우가 많은데, 조금 여유를 가지고 이곳의 스타일, 정체성, 화법 등을 느껴보시기 바랍니다. --희상


개인위키를 만들기는 어렵고, 노스모크에 쓰고 싶은 말은 많다면, 여러 개의 페이지를 만드는 대신 모판패턴을 쓰는 방법도 있습니다. 신나지않니 님 뿐 아니라 노스모크의 다른 누군가에게도 도움이 되는 내용이라면 누군가가 ExtractPage 하겠지요 :)

신나지않니 님이 만들어 놓은 몇 개의 페이지를 신나지않니 님의 모판에 옮깁니다. 노스모크의 풍습따르기를 이해하려면 시간이 좀 걸립니다. 사실 저도 아직 노스모크를 잘 모르겠어요 :) --세벌

불쾌하셨다면 사과드립니다. 하지만 위키위키는 뭐든 써도 되는 곳이 아닙니다. 야후 위키서비스는 그럴지 몰라도요. 사실 그곳보다 이곳이 훨씬 오래됐죠. 이곳은 컴퓨터에 대한 전문적 지식을 다루는 위키는 아닙니다. 한국의위키위키를 클릭해 보세요. 각 분야별 위키가 망라돼 있으니 님이 필요로하는 곳을 쉽게 찾으실 수 있을 겁니다. --Astro

많은 분들의 충고 감사드립니다. 아직 위키인에 대한 인식이 부족한 저에게 이렇게 여러분들께서 여러가지 조언을 해주셔서 이제야 조금은 이곳 분위기를 알듯 합니다. 아무래도 제 원래 사용목적을 위해선 여건이 될때 개인위키를 만들어야 겠다는 생각이 드네요 :) 지금은 이대로 만족하고 여러 사람들과의 공유를 위한 목적으로 사용하겠습니다. --신나지않니



"; if (isset($options[timer])) print $menu.$banner."
".$options[timer]->Write()."
"; else print $menu.$banner."
".$timer; ?> # # ?>