본문 바로가기

Programing

The Trip // theTrip.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int pepleCnt = 0; cin >> pepleCnt; float* ExpenseMoney = new float[pepleCnt]; memset( ExpenseMoney, 0.0f, sizeof(float)* pepleCnt); for(int i = 0; i> (float)*(ExpenseMoney + i); float sum = 0.0f; for(int i = 0; i< pepleCnt; ++i) { sum += Exp.. 더보기
알고리즘 트레이닝 북 지뢰찾기 // Minesweeper.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include #include using namespace std; //해당배열의 주위 지룃수를 리턴함 int calc(int xsize ,char* tarr, int x, int y) { // 특정 배열 구역을 찾음. char* arr = tarr + x + (xsize * y) ; if( (*arr) == '*' ) return 9; int MineCnt = 0; // 그 특정 구역역 주위를 검색. //예외처리 if( *(arr - 1) == '*' ) MineCnt++; if( *(arr + 1) == '*' ) MineCnt++; if( *(arr + (xsize* 1).. 더보기
알고리즘 트레이닝 북 3n+1 문제 // AlgoChallenges.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include using namespace std; int Calc(int num) { int cnt = 1; while( num != 1) { //짝수면 if( (num % 2) == 0 ) { num = num / 2; } else //홀수면 { num =(num* 3) +1; } cnt++; } return cnt; } int _tmain(int argc, _TCHAR* argv[]) { int inputA =0 , inputB = 0; cin >> inputA >> inputB; int curNum= 0; int oldMaxNum= 0; cout 더보기
어셈블리어 출처:http://elky.tistory.com/20 The Base knowledge of Reverse Engineering. 이번 글에서는 RE를 하는 데에 있어서의 기초 지식인 어셈블리어, 논리연산, 레지스터에 대해 간단하게 다룹니다. 1.어셈블리어 Push : sp 레지스터를 조작하는 명령어중의 하나이다. 스택에 데이터를 저장하는데 쓰인다. ex:) Push eax : 스택에 Eax의 값을 스택에 저장한다. ex:) Push 20 :즉석값인 20을 스택에 저장한다. ex:) Push 401F47 : 메모리 오프셋 401F47의 값을 스택에 저장한다. Pop : 이 또한 sp 레지스터를 조작하는 명령 어중 하나이다. 스택에서 데이터를 꺼내는데 쓰인다. ex:) Pop eax :스택에 가장 상위에 .. 더보기
volatile과 메모리 배리어 이글은 출처글입니다 출처 : http://summerlight.tistory.com/entry/volatile과-메모리-배리어 이전 글에서 volatile 키워드에 대해 간단하게 언급했는데, 핵심은 간단하다. volatile 속성을 가진 변수는 프로그램 밖의 다른 문맥들에 의해서도 비동기적으로 접근될 수 있다. 따라서 특정 쓰레드가 해당 변수에 하는 작업들은 다른 모든 문맥들 역시 볼 수 있어야 한다는 것이다. 하드웨어를 직접 제어하기 위해 Memory-mapped I/O를 하는 경우가 가장 대표적인 예이다. 고로, 프로그램 문맥 상에서는 레지스터만을 이용해서 똑같은 일을 할 수 있는 경우라 해도 가시성의 확보를 위해 컴파일러는 해당 작업을 메모리에도 저장하도록 코드를 만든다. volatile 속성을 가.. 더보기
람다 샘플 코드2 #include "stdafx.h" #include #include #include using namespace std; class testclass { public: testclass(); ~testclass(); }; int _tmain(int argc, _TCHAR* argv[]) { auto func = [](int n) {cout 더보기
람다 샘플 코드 #include "stdafx.h" #include #include #include using namespace std; function f() { std::string str("abcd"); return [=] { cout 더보기
소켓 종료와 TIME_WAIT(Socket termination and TIME_WAIT) 출처 : http://kukuta.tistory.com/27 오늘은 소켓의 종료와 그에 따라 발생하는 소켓의 상태 변화에 대해 알아 보도록 하겠다. 먼저 소켓은 생성될 때는 3-way hand shaking을 통해서 생성되지만, 종료 될때는 한단계 더 많은 4-way hand shaking을 거쳐 종료 된다. four way handshake 위에서 분명히 4-way.. 4단계라고 이야기 했다. 그럼 어떤 4단계를 거치는지 알아 보자. 1. A가 B에게 연결 종료를 요청한다. 2. B는 바로 종료를 하는 것이 아니라, 단순히 ACK만을 날리고 있다. B도 종료 하기 전에 할 일이 있기 때문에 바로 FIN을 날리지 않고, 단순히 ACK를 날리고 CLOSE_WAIT 상태로 넘어 간다. 3. 볼일을 다 보고난.. 더보기
CriticalSection에 관해.. 출처 http://kuaaan.tistory.com/99 Q1: 동일한 스레드에서 동일한 CriticalSection에 두번 진입하면 Block이 걸릴까? A1: 아니다. 스레드가 이미 자신이 소유한 CriticalSection을 다시 소유하려고 시도하는 것은 전혀 문제될 것이 없다. CriticalSection 개체는 내부적으로 LockCount와 OwningThread라는 멤버가 있어서 자신이 몇번 Lock이 걸렸는지와 어느 스레드에 소유되었는지를 기억하고 있다. 다른 스레드가 소유한 CriticalSection 개체에 대해 EnterCriticalSection을 시도하면 당연히 Block되겠지만, CriticalSection을 소유한 스레드가 다시 EnterCriticalSection을 시도하면 즉.. 더보기
OpCode of Intel Assembly 80x86 http://www.jegerlehner.ch/intel/opcode.html TRANSFER Name Comment Syntax MOV Move (copy) MOV Dest,Source XCHG Exchange XCHG Op1,Op2 STC Set Carry STC CLC Clear Carry CLC CMC Complement Carry CMC STD Set Direction STD CLD Clear Direction CLD STI Set Interrupt STI CLI Clear Interrupt CLI PUSH Push onto stack PUSH Source PUSHF Push flags PUSHF PUSHA Push all general registers PUSHA POP Pop from sta.. 더보기