What is Reverse Engineering? 재가 생각하는 Reverse Engineering 이란 자신 또는 사람들이 원하는 것들을 얻기 위하여 프로그램을 분석하여, 원하는 결과를 얻어 가는 과정이라고 생각합니다. 우리는 컴퓨터를 하면서 알게 모르게 RE를 통해 얻게 된 것들을 많이 보게 됩니다. 가장 흔한 것이 키 제네레이터, 노시디 패치 같은 것들입니다. 많은 사람들이 RE를 통해 만들어진 것들을 사용해봤지만, 만들 줄은 모릅니다. 그렇다면, Reverse Engineering은 도대체 어떻게 하는 것일까요? 컴퓨터의 CPU에는 명령어 세트가 저장되어 있습니다. 이 명령어 세트를 기계어 라고 부릅니다. 모든 프로그램은 전부 기계어로 되어 있습니다. 하지만 이 기계어는 0과1의 단순한 규칙 조..
첫째, 성능 문제, 지적하신 분들의 공통된 주장이 바로 bool은 BOOL에 비해 윈도우와 같은 32bit 환경에서 느리기 때문에 사용하지 않는다는 것입니다. bool이 BOOL보다 느리다죠. 맞습니다. 레지스터나 I/O 처리 등이 32bit 즉, 4bytes데이터에 최적화 되어 있기 때문에 char, unsigned char등과 같이 1byte 자료형은 4bytes size의 자료형에 비해 내부적으로 추가적인 처리가 필요합니다. 그런데 bool은 대개의 컴파일러에서 1byte로 처리를 하며 VC++에서도 int는 4bytes, bool은 1byte의 size를 가집니다. 따라서 bool은 BOOL(=int)에 비해 느립니다. 그러나 이러한 성능을 운운하는 것은 소위 말하는 '이른 최적화'라고 지적하고 ..
도스시절 한글라이브러리인 한라 프로를 만드신 임인건님께서 쓰신 글입니다. 프로그래밍을 공부하시는 분들께 큰 도움이 되리라 생각합니다.--------------------------------------------------------------------------------------------------1. 정보를 모음에 소홀히 하지 말고 설명서를 읽음에 게을리 하지 말지어다. 오늘 필요 없는 정보는 내일 필요하리라. 가장 가치 있고도 저렴 한 지식은 책 속에 있느니라. 서점과 동료의 책꽂이에 무엇이 꽂혀 있는지 때때로 살피어라. 무심코 흘렸던 종이 한 장이 너의 근심을 풀어 주었으리라. 설명서는 충분히, 꼼꼼히 읽을지어다. 모든 의문은 설명서를 안 보는 데서 생기니라. 그렇더라도 모두 다 읽을 필요..
BMP화일은 이미지 파일중에 가장 간단한 파일중 하나입니다. 기본적으로 bmp화일은 1,4,8,16,24 및 32비트를 지원합니다. 하지만 16과 32비트는 거의 사용하는 예가 드믑니다. bmp화일은 사용이 쉬운만큼 용량이 큰 파일입니다. 그렇게 때문에 이 파일역시 기본적인 압축형식을 지원합니다. 그 방식은 간단한 압축방식인 Run-Length Compresstion방식이며, 4비트와 8비트를 지원합니다.(RLE4, RLE8). 어쨌든 이 압축방식의 특성은 간단한 색상의 그림블록의 경우에는 비교적 효율이 좋으나, 복잡한 색상 혹은 완벽히 랜덤한 색상의 경우는 전혀 압축이 되지 않을수 있습니다. 그래서, 대부분의 BMP파일은 압축을 사용하는 예가 드물게 됩니다. 몇해동안 bmp화일역시 여러방식이 존재했습니..
TCHAR to the rescue! TCHAR가 구원의 손길을 내밀다! TCHAR is a character type that lets you use the same codebase for both MBCS and Unicode builds, without putting messy #defines all over your code. A definition of the TCHAR looks like this: TCHAR는 MBCS와 유니코드 빌드 모두의 경우에 같은 기초코드를 사용할 수 있도록 해주는 문자 타입이다. 여러분의 코드에 너저분한 #define 문들을 넣이 않고도 말이다. TCHAR의 정의는 다음과 같다. #ifdef UNICODE typedef wchar_t TCHAR; #else typed..
Preface 프로그래밍을 하다 보면 static만큼 다양한 곳에서 다양한 의미로 많이 쓰이는 키워드가 없는 것 같습니다. C/C++과 같은 정적인 언어 뿐만 아니라 JAVA와 같이 동적 바인딩을 기본으로 하는 언어에서조차 static이 사용되는 것을 보면 옛 속담처럼 '귀에 걸면 귀걸이, 코에 걸면 코걸이'가 되는 것이 static이라는 키워드인 것 같습니다. 그러나 유감스럽게도 이렇게 자주 쓰이고 중요하게 사용되는 static을 잘못 이해하고 있거나 많은 특징들을 모르고 있는 사람들이 의외로 많습니다. 특히 시중에 판매되는 대다수의 프로그래밍 입문 서적들이 static에 대해서 정확하고 자세하게 설명하고 있지 않다라는 사실이 이렇게 부족하게 나마 static에 대한 글을 쓰게 된 이유라 할 수 있습니..
class Base { public: void Init(){printf("Base");} }; class Inheritance : public Base { public: void Init(int a) { printf("Inheritance %d", a); } };int main(int argc, char **arv) { Inheritance inheritance; inheritance.Init(); return 0; } 위 코드는 컴파일 에러를 발생시킨다. 내가 이 코드를 작성한 의도는 함수 오버로딩이다. 즉, 같은 이름의 함수가 여러 개가 있고, 파라미터가 다르다면 다른 함수로 인식할거라고 생각한 것이다. 그런데, 같은 이름의 함수가 있을 경우, 자식 클래스의 함수만 유효하다. int main(int ..
char* GetStr() { static char szStr[] = "Hello"; return szStr; } void PrintStr(char **str) { printf("%s",*str); } int main(int argc, char **arv) { PrintStr(&GetStr()); return 0; } 위 코드는 아래와 같은 컴파일 에러를 발생시킨다. error C2102: '&' requires l-value 컴파일러의 에러는, l-value. 즉, 어딘가에 저장된 값에만 주소 연산자를 사용할 수 있다는 말이다. 내가 이 코드를 작성한 의도는 char형 포인터의 포인터 (이중 포인터)를 매개 변수로 받는 PrintStr함수의 매개변수로, char형 포인터를 반환하는 GetStr함수의 반..
- Total
- Today
- Yesterday
- ftp
- CppSQLite
- MS-SQL
- 조엘 온 소프트웨어
- 리버스 엔지니어링
- EzShortcut
- TDD
- 바로가기 프로그램
- 엘키
- Rails
- 임백준
- NDC2013
- 게임개발포에버
- 좋은 프로그래머
- EasyExec
- 루비 온 레일즈
- 게임데브포에버
- SQLite Spy
- c언어
- svn
- RoR
- 디버깅
- SDL
- ruby
- 루비
- Ruby on Rails
- TraceRoute
- perfmon
- 멀티스레드
- 디자인 패턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |