2021년 1월 12일 화요일

C언어의 형변환(Type Cast)

  • 암묵적 형변환
    상황에 따라 자동적으로 이루어지는 형변환을 암묵적 형변환이라 한다.
    ex)
    • int n = 0;
      n = 123.123123;
      // n은 123이 된다.
    • char a = 10;
      short b = 20;
      c = a + b;
      // c는 char+short => 하지만 int로 변환된다.
    • double n = 10 + 20.123;
      // 10.0 + 20.123 = 30.123 으로, 10이 double 타입으로 형변환된다.

  • 명시적 형변환
    명시적 형변환은 변수의 타입을 강제적으로 명시하여 변환하는 방법이다.
    ex)
    • double f=0;
      f = (double)10 / 8;
      // 10.0 / 8 = 1.25

2018년 4월 2일 월요일

C에서 C++ 함수 호출하기..

프로젝트를 진행하다 보면
C, C++ 등으로 작성된 파일이나 라이브러리들이 혼재되어 사용되는 경우가
발생할 수 있다.
물론 사용언어가 통일되면 가장 좋겠지만...

이런 경우 C++ 소스에서
C++ 함수를 C에서 사용할 수 있도록 Wrapping 함수를 작성하면
C에서 C++ 함수를 사용하는 것이 가능하다.

//C++ 소스

int get_number(std::string strNumber)
{
return atoi(strNumber.c_str());
}

extern "C" int get_number_c(char *pszNumber)
{
return get_number(pszNumber);
}


//C 소스
int get_number_c(char *pszNumber);

int main(int argc, char *argv)
{
char szNumber[] = "1000";
printf("%d\n", get_number_c(szNumber);
return 0;
}


C++ 소스는 g++로 컴파일
C 소스는 gcc로 컴파일
Link는.. 반드시 g++로..

2018년 3월 27일 화요일

false-positive & false-negative

- false positive
 거짓 양성, 실제로는 답이 No 인데 Yes 로 응답함


- false negative
 거짓 음성, 실제로는 답이 Yes 인데 No 로 응답함


Business Email Compromise Attack.. (BEC)

Business Email Compromise Attack..

BEC Attack.. 일종의 phishing 공격..
회사의 뉴스, 연구, 직원의 SNS 등을 통해
정보를 수집..

CEO나 회사 메일등으로 가장해서
입/출금, 지불 변경 등을 유도하거나,
주요 기밀을 탈취..

메일 내용을 제차.. 확인하고
인증 강화 및 직원 교육 등을 통해 방지할 수 있음..

Dictionary Harvest Attack (DHA) & Bounce Attack

Dictionary Harvest Attack..

사전 수확 공격??

임의의 글짜, 단어, 사전, 성씨 등을 조합하여
특정 메일 서버에 메일을 보내고,
메일이 성공적으로 전송이 되서
해당 메일 주소가 유효한 것으로 판단하고 수확한다.

Brute Force Attack과 유사한 느낌..

단위 시간에 동일한 sender ip로 부터 유입되는
정상 메일 혹은 메일 주소가 유효하지 않은 메일의 수를 카운트하고
임계치를 넘는 경우 해당 sender ip를 일정시간 동안
block하는 방식으로 방어가 가능할 것으로 보임

참조
https://en.wikipedia.org/wiki/Directory_Harvest_Attack

Bounce Attack..

DDOS Attack과 유사한 공격..
unsolicited email(unwanted email.. spam..)을 Mail서버로 전송
Mail 서버에 과부하가 걸리도록 유도함..

이것 역시 단위 시간 유입되는 메시지를 카운트하고..
임계치를 넘으면.. 일정 시간 Block..

local directory mounting

linux에서 cifs, nfs 등 네트워크 공유 경로 등을 마운트 사용할 때,

경우에 따라
마운트를 해제하지 않고 마운트된 디랙터리 내용이 아닌
실제 로컬 경로의 내용 확인이 필요한 경우가 있다.

로컬 경로를 직접 마운트하면 되는데,
마운트 방법은 아래와 같다.

mount --bind src_path dst_path

2017년 11월 28일 화요일

find_first_of, find_last_of 함수 오용 주의

c++ 에서 find_first_of, find_last_of 를 사용할 때 유의할 점이 있다.
두 함수가 모양만 봤을 때 처음으로, 마지막으로 사용된 위치를 찾는 기능을 하는 것은
쉽게 알 수 있다.

하지만 함수의 파라메터로 받은 search string의 경우
잘못 생각하면 큰 실수를 범할 수 있다.

최근 message header에서 사용되는 encoded-word를 파싱할 때
실수를 했던 부분이다.

std::string strEncodedSubject = "=?EUC-KR?B?x9Gx2yDA3yC1ybHuPw==?=";
// encoded-word는 =?[character set]?[encoding type]?[encoded string]?= 로 구성된다.

// 앞뒤 "=?", "?=" 위치 파악을 위해..
size_t tIdx = strText.find_first_of("=?");
std::cout << tIdx << std::endl;
tIdx = strText.find_last_of("?=");
std::cout << tIdx << std::endl;

=> 결과는 0, 32 이다.

무엇이 문제인가..
아시는 분들은 "그건 당연히 그렇게 사용하는 거지.." 하겠지만
find_first_of, find_last_of는 파라메터로 받는 search string을
string 전체로 search하는 것이 아니라,
해당 string의 구성하는 char 중 어떤 것이라도 먼저 혹은 마지막에 발견된 위치를
찾는 함수이다.
(차라리.. token 함수와 유사함)

그렇다. 내가 원하는 위치를 찾기 위해서는
find, rfind를 사용하는 것이 맞다.

size_t tIdx = strText.find("=?");
std::cout << tIdx << std::endl;
tIdx = strText.rfind("?=");
std::cout << tIdx << std::endl;

=> 결과는 0, 31 이다.

이렇게 간단한 실수지만 잘못하면 정말 찾기힘든
치명적인 버그를 만들게 된다.
분명 예전에도 한번 실수 해서 조심해야 겠다하고.. 생각한적 있는데..
또 이런 기본적인 실수를..

전자제품이건.. API건 사용 설명서를 꼼꼼히 읽고 사용하도록 하자.

스프린트 정리

스프린트 :  스프린트는 프로토타입을 제작하고 고객과 함께 아이디어를 테스트하여 중요한 문제들에 대한 답을 찾는 독특한 5일 짜리 과정이다. 스트린트는 업무 전략, 혁신 행동과학, 디자인 그 외 여러 분야의 최고 히트작을 어떤 팀에서라도 사용할 수 있...