codepad.org
programming/windows 2016. 1. 4. 17:38'programming > windows' 카테고리의 다른 글
str ansi uni multi (0) | 2015.11.03 |
---|---|
VC2010/2012에 WTL 설치 (0) | 2013.10.11 |
리소스 다루기 2 (0) | 2012.05.24 |
리소스 다루기 1 (0) | 2012.05.23 |
까먹지말자 (0) | 2012.02.28 |
'programming/windows'에 해당되는 글 9건codepad.orgprogramming/windows 2016. 1. 4. 17:38'programming > windows' 카테고리의 다른 글
str ansi uni multiprogramming/windows 2015. 11. 3. 16:23strcpy -> wcscpy -> _tcscpy (문자열을 복사) strncpy -> wcsncpy -> _tcsncpy ( 사이즈 만큼 복사) strlen -> wcslen -> _tcslen (문자열 길이 확인) strcat -> wcscat -> _tcscat (두 문자열 이어 붙이기) strncat -> wcsncat -> _tcsncat (사이즈 만큼 이어 붙이기) strcmp -> wcscmp -> _tcscmp (문자열 비교) (반환 값(-1, 0, 1)) strncmp -> wcsncmp -> _tcsncmp ( 사이즈 만큼 문자열 비교) stricmp -> wcsicmp -> _tcsicmp (대소문자를 구별하지 않고 문자열을 비교) strnicmp -> wcsnicmp -> _tcsnicmp (사이즈 만큼 대소문자를 구별하지 않고 문자열을 비교) strchr -> wcschr -> _tcschr (문자 찾기) strrchr -> wcsrchr -> _tcsrchr (문자 찾기 (문자열 끝에서 부터 검색)) strstr -> wcsstr -> _tcsstr (문자열 찾기) strpbrk -> wcspbrk -> _tcspbrk (문자 찾기 (두번째 인수를 찾고자 하는 문자들의 집합(문자열)으로 구성) strtok -> wcstok -> _tcstok (문자열 자르기 (두번째 인수를 집합(문자열)으로 구성 가능)) => 해당 문자가 NULL로 치환 됨 strset -> wcsset -> _tcsset (문자 치환, 첫째 인수의 모든 문자를 두번째 인수 문자로 변경함) => "abc" -> "bbb" strnset -> wcsnset -> _tscnset (사이즈 만큼 문자 치환) strupr -> wcsupr -> _tcsupr (대문자로 치환) strlwr -> wcslwr -> _tcslwr (소문자로 치환) strrev -> wcsrev -> _tcsrev (문자열 역정렬) => "가나다라마" -> "마라다나가" [출처] 문자열 함수 (멀티바이트->유니코드->TCHAR)|작성자 콩이아부지 출처 : http://blog.naver.com/kilsu1024/110168931552 'programming > windows' 카테고리의 다른 글
VC2010/2012에 WTL 설치programming/windows 2013. 10. 11. 11:15http://minimonk.tistory.com/1996 http://stackoverflow.com/questions/13663898/specified-platform-toolset-v110-is-not-installed 'programming > windows' 카테고리의 다른 글
리소스 다루기 2programming/windows 2012. 5. 24. 09:21루트킷 같은 성격의 드라이버들은 배포시 아래와 같은 방법으로
실행 바이너리의 리소스에 드라이버를 포함시킨다. 리소스 추가 -> 가져오기( 드라이버 파일) -> 사용자 지정 리소스 탐색 (ex:Driver) 와 같이 추가를 하면 아래의 그림처럼 바이너리가 추가된다. 그 후 Build를 하면 내가 포함 시킨 드라이버 파일과 Resource.h 파일이 수정된다. 아래의 IDR_DRIVER1의 선언해준 "DRIVER"를 통해 리소스를 추출하면 된다. [Source] BOOL ExtractDriver(LPSTR Path) { HRSRC RsH; HGLOBAL RsGH; BYTE *FilePtr; ULONG FileSize; ULONG numWritten; HANDLE hFile; RsH = FindResource(NULL, MAKEINTRESOURCE(IDR_DRIVER1), "DRIVER"); if(!RsH) { printf( "FindResource Error\n" ); return FALSE; } RsGH = LoadResource(NULL, RsH); if(!RsGH) { printf( "LoadResource Error\n" ); return FALSE; } FileSize = SizeofResource(NULL, RsH); FilePtr = (unsigned char *)LockResource(RsGH); if(!FilePtr) { printf( "LockResource Error\n" ); return FALSE; } hFile = CreateFile( Path ,FILE_ALL_ACCESS,0,NULL,CREATE_ALWAYS,0, NULL); if(INVALID_HANDLE_VALUE == hFile) { return FALSE; } WriteFile(hFile, FilePtr, FileSize , &numWritten, NULL); CloseHandle(hFile); return TRUE; } BOOL CleanUp(LPSTR Path) { if(S_OK != DeleteFile(Path)) { return FALSE; } return TRUE; } int _tmain(int argc, _TCHAR* argv[]) { if( ExtractDriver( "C:\\ABCD.SYS" ) ) { //------------------------------- //드라이버 로드 //------------------------------- CleanUp( "C:\\ABCD.SYS" ); } return 0; } 'programming > windows' 카테고리의 다른 글
리소스 다루기 1programming/windows 2012. 5. 23. 09:51'programming > windows' 카테고리의 다른 글
까먹지말자programming/windows 2012. 2. 28. 16:18
1. 유니코드, 멀티바이트
2. win32, console
3. UAC 4. 임플릭트 링킹 'programming > windows' 카테고리의 다른 글
Win32 Ref.programming/windows 2011. 12. 27. 16:03http://winapi.freetechsecrets.com/ 'programming > windows' 카테고리의 다른 글
까먹까먹하는 PE rewriteprogramming/windows 2011. 9. 16. 11:07
트리
- 이미지_엔티_헤더
-- 이미지_파일_헤더
-- 이미지_옵셔널_헤더32
--- 이미지_데이터_디렉토리
---- 2번째 데이터디렉토리 버츄얼어드레스 (임포트 테이블 주소)
---- 임포트 테이블은 이미지_임포트_디스크립터
---- 이미지_임포트_디스크립터 {오리지날퍼스트텅크 - 이미지_텅크_데이터 구조체 배열}
---- 이미지_텅크_데이터 (이미지_임포트_바이_네임 구조체 포인터로 해석)
----- 이미지_임포트_바이_네임
- 이미지_섹션_헤더
이미지_엔티_헤더
{
시그너쳐 4D 5A
파일헤더 이미지_파일_헤더
옵셔널헤더 이미지_옵셔널_헤더32
}
파일헤더 이미지_파일_헤더
{
머신 : i386
넘버오브섹션 : 섹션수
타임스템프 : 생성시간
캐릭터리스틱 : exe이냐, dll이냐
}
옵셔널헤더 이미지_옵셔널_헤더32
{
어드레스오브엔트리포인트 : PE파일 실행 시 실행될 첫 번째 명령의 RVA 주소
이미지베이스 : PE 파일을 위한 로드 주소, 로드 시작 주소
사이즈오브이미지 : 메모리에 풀린 PE이미지 전체크기
사이즈오브헤더스 : 헤더와 섹션 테이블을 합친 크기
이미지_데이타_디렉토리 (구조체의 배열) : 임포트 어드레스 테이블과 같은 중요한 데이터 구조체의 RVA 값을 갖고있음
}
이미지_섹션_헤더 - 이미지_파일_헤더 구조체 멤버의 넘버오브섹션 영역에 의해 결정
{
네임 : 섹션의 이름을 가지고 있음, 최대 길이가 8바이트
버츄얼어드레스 : 섹션RVA, 메모리 로딩시 RVA 1000h를 갖고있다면 이미지베이스+1000h에 위치하게 됨
사이즈오브로우데이타 : 한 섹션 데이터의 크기
포인터투로우데이타 : 섹션의 시작을 담고 있는 파일 오프셋
캐릭터리스틱 : 섹션의 실행코드, 초기/비초기화된 데이터와 플래그를 갖고 있음
}
이미지_데이터_디렉토리 - 이미지_옵셔널_헤더32의 멤버중 하나임, 임포트 테이블 설명
{
버추얼어드레스 : 데이터 구조체의 RVA
isize : 버추얼어드레스에서 참조된 데이터 구조체의 크기
}
데이터디렉토리에는 16개의 인덱스가 있음
데이터디렉토리는 PE파일의 중요한 데이터구조체의 위치와 크기를 가지고 있음
임포트 테이블에는 각 인덱스(멤버)와 정보(인포 인사이드)가 있음
ex)
0 Exprot symbols
1 Import symbols
2 Resources
5 Base relocation
11 Bound Import
12 Import Address Table
임포트 테이블의 주소
- 2번째 데이터 디렉토리의 버츄얼어드레스
임포트 테이블은 이미지_임포트_디스크립터 구조체의 배열임
각 구조체는 PE 파일이 심볼로 import해오는 DLL에 대한 정보가 있음
(dll 5 import - 5개의 요소가 있음)
이미지_임포트_디스크립터
{
union
캐릭터리스틱
오리지널퍼스트텅크
오리지널퍼스트텅크 - 이미지_텅크_데이터 구조체 배열의 RVA
(이미지_텅크_데이터는 이미지_임포트_바이_네임 구조체 포인터로 해석)
ends
타이스탬프
포워더체인
네임
퍼스트청크
}
이미지_임포트_바이_네임
{
힌트 : Import 한 함수가 추가될때마다 1씩 증가 (베이스는 0)
네임 : 실제 임포트 함수 이름
}
PE로더가 프로그램을 실행 시킬 때 관련 DLL을 해당 프로세스 주소공간에 로드
그 후 메인 프로그램의 임포트 함수에 대한 정보를 추출
이를 이용해 메인 프로그램 함수 주소를 구하기 위해 DLL을 찾음
PE로더가 그런 함수를 구하기 위해 DLL에서 찾는 부분이 바로 익스포트 테이블
'programming > windows' 카테고리의 다른 글
LPSTR, LPCSTR, LPWSTR, LPCWSTR, LPTSTR, LPCTSTRprogramming/windows 2011. 9. 11. 20:40C = const(constant)
W = wide char
T = t_char
LPSTR = long pointer string = char *
LPCSTR = long pointer constant string = const char *
LPWSTR = long pointer wide string = w_char *
LPCWSTR = long pointer constant wide string = const w_char *
'programming > windows' 카테고리의 다른 글
|