BLOG ARTICLE 프로그래밍 | 50 ARTICLE FOUND

  1. 2017.03.30 확인해야할것1
  2. 2014.06.30 [c/c++] 데이터형 정리
  3. 2013.08.02 Windows/TCP 예제 프로그래밍 (server/client)
  4. 2013.06.26 메모리해킹관련발표자료
  5. 2013.06.05 cwe 250
  6. 2013.05.30 cwe 307
  7. 2013.05.23 cwe-759
  8. 2013.05.16 [세미나]cwe327
  9. 2013.05.16 [세미나]0508 cwe311
  10. 2013.05.16 암호 알고리즘사용하기 정리자료.

프로젝트속성 : 멀티바이트문자셋

테스트환경 : 영문 OS , 영문로캐일


wchar_t * a = L"한글이다";

MessageBoxW(NULL, a, L"",MB_OK);  -> 정상출력

OutputDebugStringW(a);                -> 깨짐




'프로그래밍 > C , C ++' 카테고리의 다른 글

[c/c++] 데이터형 정리  (0) 2014.06.30
Windows/TCP 예제 프로그래밍 (server/client)  (0) 2013.08.02
#pragma 사용법 2  (0) 2013.04.03
#pragma 사용법 1  (0) 2013.04.03
[c_스터디]3. 형변환, 함수  (0) 2013.03.01
AND

뭔가 long데이터형이 깔끔하지 않아.



 

 32 bit

64 bit 

char

1 byte

short int 

int 

long  int 

float 

4

double 

8

8

pointer 

4

8


1. 분류 

정수형 : char, int 류

실수형 : float(float-point), double(double float)


2. char 

8bit 를 사용하여 표현가능한 범위에 있는 경우 사용한다. 꼭 문자만을 사용해야하는게 아니다.  다만 문자를 저장하는데 

가장 적합한 크기가 1byte 이므로 이를 좀더 쉽게 사용하도록 유도하기 위함. 

문자를 인코딩하기 위한 표준 규약인 ASCII 코드를 살펴보면 알 수 있다. (0~255 까지임)


3. short int

short int 가 원래 데이터형 이름이다. 

DOS시절 16bit운영체제이기때문에 int 라고 선언하면 short int 인 2byte 크기의 데이터형으로 인식되어, short 는 생략가능했음. 

하지만 현재 32bit운영체제에서는 short 를 생략할 수 없음. 


short라는 용어는 short int 라는 데이터형에서만 사용하기 때문에 편하게 int를 생략하고 short 라고 말해도 됨.  따라서 

short int        =    short

 타입

바이트수

최소/최대 값 

limits.h 상수 

접미사 

 비고

 (signed) short (int)

unsigned short (int)

 2

 -32768 - 32767

0 - 65535

 SHRT_MIN, SHRT_MAX

USHRT_MAX

 

 



4. int

 타입

바이트수

최소/최대 값 

limits.h 상수 

접미사 

 비고

 (signed) int

unsigned (int)

4

-2147483648 - 2147483647
0 - 4294967295

INT_MIN, INT_MAX

UINT_MAX

 

U

 

   


5. long int 

short 와는 달리 long는 32비트 이고 현재 32bit 운영체제 에서는 long 는 생략가능하다.  따라서 아래와같이  쓸수있다.

long int    =    int 


또한 long 이라는 키워드도 int 앞에만 붙여서 사용하기 때문에 long 나오면 int도 나올수밖에 없다. 따라서 int 를 생략 가능하다.  결과적으로 아래와같이쓸수있다.

long int     =     int    =    long

 타입

바이트수

최소/최대 값 

limits.h 상수 

접미사 

 비고

(signed) long (int)
unsigned long (int)

 4

-2147483648 - 2147483647
0 - 4294967295

LONG_MIN, LONG_MAX
ULONG_MAX

L

UL

 



 타입

바이

트수

최소/최대 값 

limits.h 상수 

접미사 

 비고

(signed) long long (int)
unsigned long long (int)

8

-9223372036854775808 - 9223372036854775807
0 - 18446744073709551615

LONG_LONG_MIN, LONG_LONG_MAX
ULONG_LONG_MAX

LL

ULL 

 



6. float 

4바이트 실수형. IEEE 754 규약에 따라 부호개념이 무조건 존재함. 그래서 signed나 unsigned 키워드를 사용할 필요가 없음. 


7. double 

8바이트 실수형 . IEEE 754 규약에 따라 부호 개념이 무조건 존재함. 그래서 signed나 unsigned 키워드를 사용할 필요가 없음. 



'프로그래밍 > C , C ++' 카테고리의 다른 글

확인해야할것1  (0) 2017.03.30
Windows/TCP 예제 프로그래밍 (server/client)  (0) 2013.08.02
#pragma 사용법 2  (0) 2013.04.03
#pragma 사용법 1  (0) 2013.04.03
[c_스터디]3. 형변환, 함수  (0) 2013.03.01
AND

server


/*==================================================
        Windows 기반의 "Hello World" 서버 
==================================================*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>


/*==================================================
        Error Message print
==================================================*/
void ErrorHandling(char *message)
{
        fputs(message, stderr);
        fputc('\n', stderr);
        exit(1);
}


/*==================================================
        Entry Point
==================================================*/
int main(int argc, char **argv)
{
        WSADATA wsaData;
        SOCKET hServSock;
        SOCKET hClntSock;
        SOCKADDR_IN servAddr;
        SOCKADDR_IN clntAddr;
        int szClntAddr;

        char message[] = "Hello World!\n";

        if(argc != 2)
        {
                printf("Usage : %s <port> \n", argv[0]);
                exit(1);
        }

        // Load Winsock 2.2 DLL
        if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
        {
                ErrorHandling("WSAStartup() error!");
        }

        // 서버 소켓 생성
        hServSock = socket(PF_INET, SOCK_STREAM, 0);
        if(hServSock == INVALID_SOCKET)
        {
                ErrorHandling("socket() error");
        }

        memset(&servAddr, 0, sizeof(servAddr));
        servAddr.sin_family = AF_INET;
        servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
        servAddr.sin_port = htons(atoi(argv[1]));

        // 소켓에 주소 할당
        if(bind(hServSock, (SOCKADDR*) &servAddr, sizeof(servAddr)) == SOCKET_ERROR)
        {
                ErrorHandling("bind() error");
        }

        // 연결 요청 대기 상태
        if(listen(hServSock, 5) == SOCKET_ERROR)
        {
                ErrorHandling("listen() error");
        }

        // 연결 요청 수락
        szClntAddr = sizeof(clntAddr);
        hClntSock = accept(hServSock, (SOCKADDR*) &clntAddr, &szClntAddr);
        if(hClntSock == INVALID_SOCKET)
        {
                ErrorHandling("accept() error");
        }

        // 데이터 전송
        send(hClntSock, message, sizeof(message), 0);

        // 연결 종료
        closesocket(hClntSock);
        WSACleanup();

        return 0;
}








Client



/*
==================================================
        Windows 기반의 "Hello World" 클라이언트 
==================================================*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>


/*==================================================
        Error Message print
==================================================*/
void ErrorHandling(char *message)
{
        fputs(message, stderr);
        fputc('\n', stderr);
        exit(1);
}


/*==================================================
        Entry Point
==================================================*/
int main(int argc, char **argv)
{
        WSADATA wsaData;
        SOCKET hSocket;
        char message[30];
        int strLen;
        SOCKADDR_IN servAddr;

        if(argc != 3)
        {
                printf("Usage : %s <ip> <port>\n", argv[0]);
                exit(1);
        }

        // Load WinSocket 2.2 DLL
        if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
        {
                ErrorHandling("WSAStartup(), error");
        }

        // 서버 접속을 위한 소켓 생성
        hSocket = socket(PF_INET, SOCK_STREAM, 0);
        if(hSocket == INVALID_SOCKET)
        {
                ErrorHandling("hSocketet(), error");
        }

        memset(&servAddr, 0, sizeof(servAddr));
        servAddr.sin_family = AF_INET;
        servAddr.sin_addr.s_addr = inet_addr(argv[1]);
        servAddr.sin_port = htons(atoi(argv[2]));
        
        // 서버로 연결 요청
        if(connect(hSocket, (SOCKADDR*) &servAddr, sizeof(servAddr)) == SOCKET_ERROR)
        {
                ErrorHandling("Connect() error");
        }

        // 데이터 수신 
        strLen = recv(hSocket, message, sizeof(message)-1, 0);
        if(strLen == -1)
        {
                ErrorHandling("read() error");
        }
        message[strLen] = 0;
        printf("Message from server : %s \n", message);

        // 연결 종료
        closesocket(hSocket);
        WSACleanup();
        
        return 0;

}

'프로그래밍 > C , C ++' 카테고리의 다른 글

확인해야할것1  (0) 2017.03.30
[c/c++] 데이터형 정리  (0) 2014.06.30
#pragma 사용법 2  (0) 2013.04.03
#pragma 사용법 1  (0) 2013.04.03
[c_스터디]3. 형변환, 함수  (0) 2013.03.01
AND


연구실세미나_20130625_메모리덤프및분석공격.pptx


'프로그래밍 > 시큐어코딩' 카테고리의 다른 글

cwe 250  (0) 2013.06.05
cwe 307  (0) 2013.05.30
cwe-759  (0) 2013.05.23
[세미나]cwe327  (0) 2013.05.16
[세미나]0508 cwe311  (0) 2013.05.16
AND


연구실세미나_20130605_cwe250_유창훈.pptx


'프로그래밍 > 시큐어코딩' 카테고리의 다른 글

메모리해킹관련발표자료  (0) 2013.06.26
cwe 307  (0) 2013.05.30
cwe-759  (0) 2013.05.23
[세미나]cwe327  (0) 2013.05.16
[세미나]0508 cwe311  (0) 2013.05.16
AND


연구실세미나_20130531_cwe307_유창훈.pptx


'프로그래밍 > 시큐어코딩' 카테고리의 다른 글

메모리해킹관련발표자료  (0) 2013.06.26
cwe 250  (0) 2013.06.05
cwe-759  (0) 2013.05.23
[세미나]cwe327  (0) 2013.05.16
[세미나]0508 cwe311  (0) 2013.05.16
AND


연구실세미나_20130523_cwe759_유창훈.pptx


'프로그래밍 > 시큐어코딩' 카테고리의 다른 글

cwe 250  (0) 2013.06.05
cwe 307  (0) 2013.05.30
[세미나]cwe327  (0) 2013.05.16
[세미나]0508 cwe311  (0) 2013.05.16
암호 알고리즘사용하기 정리자료.  (0) 2013.05.16
AND




연구실세미나_20130516_cwe327_유창훈.pptx


'프로그래밍 > 시큐어코딩' 카테고리의 다른 글

cwe 307  (0) 2013.05.30
cwe-759  (0) 2013.05.23
[세미나]0508 cwe311  (0) 2013.05.16
암호 알고리즘사용하기 정리자료.  (0) 2013.05.16
cwe-311  (0) 2013.05.08
AND


연구실세미나_20130508_cwe311_유창훈.pptx


'프로그래밍 > 시큐어코딩' 카테고리의 다른 글

cwe-759  (0) 2013.05.23
[세미나]cwe327  (0) 2013.05.16
암호 알고리즘사용하기 정리자료.  (0) 2013.05.16
cwe-311  (0) 2013.05.08
cwe-22  (0) 2013.04.19
AND


암호화 프로그래밍 정리.docx


'프로그래밍 > 시큐어코딩' 카테고리의 다른 글

[세미나]cwe327  (0) 2013.05.16
[세미나]0508 cwe311  (0) 2013.05.16
cwe-311  (0) 2013.05.08
cwe-22  (0) 2013.04.19
cwe-306  (0) 2013.04.10
AND