_ERROR Log

Code 2012. 8. 19. 21:24


2009/01/22

* strstr 함수에게 뒤통수 맞다

strstr함수는 두번째 인자가 빈 문자열이면 NULL이 아닌 첫번째 문자열을 리턴한다.

사용에 주의 :

1. strstr()의 두번째 인자는 const 형으로 미리 정의된 문자열을 쓴다.

2. 두번째 인자가 빈문자열인지 검사한다.

StrStr()함수 StrStr @import url("../../../backsdk4.css"); [shlwapi.h. Shell and comman Controls :Platform SDK]를 사용한다.


* CString 은 const 형으로 받는다.

CString 문자열을  

cpReadFile(TCHAR *sName) 이런 함수에 인자로 넣으면 컴파일 에러가 나서

#define _TSTR    LPTSTR)(LPCTSTR 

- (LPTSTR)(LPCTSTR) 이게 길어서 줄여쓸여고 쓴 꼼수

cpReadFile( (_TSR) str)

로 활용을 했는데, 음침한 에러가 났다.

받은 문자열을 함수 내부에서 수정해 버린 것이다.

주의

함수 정의 할때 는 cpReadFile(LPCTSTR sName)으로 한다.

받은 문자열은 수정할때 신중하게 한다.

함수 내부에서 CString으로 받아서 수정한후 다른 CString 으로 리턴하던지

아예 자신 없으면 인자를 CString으로 해라

오늘은 const를 제대로 쓰지 않는 습관때문에 혼난 날이다.





2008/12/27

API hooking revealed
    PROC HookImport(PCSTR pszCalleeModName, PCSTR pszFuncName, PROC pfnHook    );
    BOOL ReplaceInOneModule(PCSTR pszCalleeModName, PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller ) ;
    두개 함수로 API Hooking 성공

    - 문제
        - Error, chkesp.c 42, The values of ESP was not properly saved across a fucntion call,
        This is usually a result of calling a function declared with one calling conention with a function pointer declared with a different calling convention

    //xMessageBoxA
typedef int (WINAPI *fpMessageBoxA)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );
fpMessageBoxA g_pAddrOrgMessageBoxA;
int xMessageBoxA(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );
int xMessageBoxA(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType )
{
    _DbgStr("xMessageBoxA");
    return 1;//g_pAddrOrgMessageBoxA(hWnd,  lpText,  lpCaption,  uType );
}


- 해결

int WINAPI xMessageBoxA(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );

- 새로운 함수에도 WINAPI를 추가해 주어야 한다.




2008/12/09

온라인 게임 서버 프로그래밍 소스중 GameServer를 빌드해서 실행하면 다음과 같은 에러가 발생


Unhandled exception at 0x0044f6d7 in GameServer.exe: 0xC00000FD: Stack overflow.
cs20:
        sub     eax, _PAGESIZE_         ; decrease by PAGESIZE
        test    dword ptr [eax],eax     ; probe page.   <--error
        jmp     short cs10

* call stack
GameServer.exe!_chkstk()  Line 99    Asm
GameServer.exe!__tmainCRTStartup()  Line 583 + 0x19 bytes    C
GameServer.exe!wmainCRTStartup()  Line 403    C
_tmain
{

해결
Project Setting -> Linker -> System -> Stack Reserve size : 32000000

참조 : http://gathering.tweakers.net/forum/list_messages/1281002




반응형

'Code' 카테고리의 다른 글

WinDbg 와 VirtualPC를 이용한 커널 디버깅 방법  (0) 2012.08.21
Ajax  (0) 2012.08.19
윈도우,비주얼 스튜디오 버전, WINVER, _MSC_VER  (0) 2012.08.19
Window, Process, Module, Thread 정보  (1) 2012.08.19
Time  (0) 2012.08.19
Posted by codens


반응형