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 |