본문 바로가기

반응형

Programming/C/C++

(42)
C++/wide 문자에 대하여 WASTE TIME # 뻘짓의 연속-C 종류의 언어에서 wide문자이고 아닌것에 민감해지는 중요한 경험이였다. 더하여 기본 char형을 지원하는 함수가 있다면 wchar를 지원하는 함수는 반드시 대칭적으로 존재한다는 것도 깨달았다. # w가 붙는다면-wstring, wchar_t , wofstream, wout 등등 wide문자를 사용해야한다면 그에 대한 모든 행동은 다 w종류로 통일 시켜야한다. 그렇게 안하면 엄청난 시간 소모와 고통을 겪는다. (^^7)-예시로 wstring을 string을 출력하는 cout으로 출력하려고 하면, 확장된 문자 셋에 적용 받는 한글이나 기타 언어들은 출력이 되지 않는 것을 볼 수 있다. 아래 예제는 다행히 컴파일 단에서 오류를 확인해 수정이 가능하지만 ofstream으로..
C/strcmp, wcscmp, _mbscmp 차이 STRCMP, WCSCMP, _MBSCMP -strcmp는 인자로 들어온 string1, string2의 서수 비교를 한다.string1이 string2보다 작은 경우 0보다 작은 값string1과 stirng2가 같은 경우 0string1이 string2 보다 큰 경우 0보다 큰 값대소문자를 구분소문자 형식으로 변환한 후 문자열을 비교필수 헤더strcmp : string.hwcscmp : string.h or wchar.h_mbscmp : mbstring.h -wcscmp 와 _mbscmp는 strcmp의 와이드 문자와 멀티바이트 문자 지원 버전임-위 함수 세가지 모두 매개 변수로 들어오는 값의 유효성을 검사하지 않음.-참고 : https://msdn.microsoft.com/ko-kr/library/..
C/GCC/최적화 및 디버깅 옵션 추가 # gcc 최적화 옵션- O : 최적화 전체 수준 제어 , 최적화 레벨이 올라갈 수록 컴파일 실행 시간과 메모리 소비율이 증가합니다.- O0 : 최적화x- O, O1 : 코드 크기와 실행 시간 감소- O2 : 메모리 공간과 속도의 희생을 제외하고 최적화 (loop unrlloing, function inlining에 대한 최적화 수행 x)- O3 : O2 최적화GDB API - 레퍼런스 정리에 인라인 함수와 레지스터에 대한 최적화를 추가로 수행- Os : O2 최적화 기능을 사용하지만, 코드 크기를 증가시키지 않음- Og : (GCC4.8++) 디버깅에 혼란을 주는 최적화 기능을 제거합니다.- Ofast : (GCC4.7++) : -O3, -ffast-math, -no-protect-arens, -fst..
C/Pointer/C포인터의 이해와 활용 - 3 ※ 본 자료는 위 책을 읽고 개인적으로 정리한 포스트임을 알려드립니다. # 포인터와 함수- 포인터는 함수로 데이터를 전달하거나 함수에 의해 데이터를 수정할 수 있게함.복잡한 데이터 역시 구조체의 포인터 형태로 함수에 전달되거나 반환될 수 있음.포인터가 데이터 타입이 아닌 함수의 주소를 가리키는 경우프로그램의 실행 흐름을 동적으로 제어하는 데 사용될 수 있음. - 프로그램 스택 이해현대의 블록 구조 언어에서 함수의 실행을 지원하기 위해 사용함수가 호출되면 함수의 스택 프레임이 생성되고 프로그램 스택에 추가(push) - 함수가 반환될 때프로그램 스택은 C언어와 같은 현대의 블록 구조 언어에서 함수의 실행을 지원하기 위해 사용함수는 함수에 의해 참조되는 데이터를 수정할 수 있음.덩치가 큰 데이터를 효과적으로..
C/Pointer/C포인터의 이해와 활용 - 2 ※ 본 자료는 위 책을 읽고 개인적으로 정리한 포스트임을 알려드립니다. # 동적 메모리 관리- 포인터의 강력한 기능의 대부분은 동적으로 할당된 메모리를 추적할 수 있는 포인터의 능력에서 기인한다.동적 메모리 관리는 복잡한 데이터 구조를 조작하는 일을 포함한 많은 일의 핵심이다.- C 프로그램은 런타임 시스템(runtime system) 안에서 실행된다.런타임 시스템 : 운영체제에서 제공되는 환경많은 프로그램 기능들과 함께 스택(stack), 힙(heap)을 지원 - 메모리 관리 : 프로그램의 핵심자동 관리 : 자동 변수의 메모리 할당정적 변수와 전역 변수의 경우는 프로그램 시작 시 0으로 초기화되는 애플리케이션의 다른 데이터 세그먼트에 위치함 - 메모리를 할당하고 해제하는 능력메모리를 더 효율적이며 유연..
C/Pointer/C포인터의 이해와 활용 - 1 ※ 본 자료는 위 책을 읽고 개인적으로 정리한 포스트임을 알려드립니다. #포인터와 메모리- 정적(Static)/전역(Global)정적으로 선언된 변수는 정적/전역 메모리에 할당 -> Data영역이나 BSS영역시작될 때 할당되며 종료될 때까지 메모리에 남아있음.전역 변수는 모든 범위에서 접근, 정적 변수는 선언한 함수 범위내에서 접근- 자동(Automatic)/로컬(Local)함수 안에서 선언되고 함수가 호출될 때 생성됨접근 범위는 선언한 함수 범위내블록문안의서에 선언은 범위가 블록문 안으로 좁혀짐- 동적(Dynamic)동적 메모리는 힙 영역에 하당 되고 필요할 경우 해제됨포인터를 사용하여 메모리 영역을 참조해제하지 않는한 메모리 영역에 존재 # 포인터를 잘알아야 하는 이유- 용도빠르고 효율적인 코드작성다..
C/Symbolic Execution/KLEE Reference ++ 2018-02-6 변경사항 ++- docker 컨테이너 내의 파일 빼오기- docker 컨테이너 volume의 위치를 확인 ※발음 - 클레이, 클레※ LLVM - Loew Level Virtual Machineclang을 사용# 출처 : [KLEE Documentation] http://klee.github.io/docs/ # [Part : Docker] 영구적 컨테이너 설정- docker 상에 임시적으로 띄우는 컨테이너를 영구적으로 유지시킵니다.docker run -ti -name=[컨테이너 이름] --ulimit='stack=-1:=1' klee/klee--rm 옵션을 사용하지 않으면 컨테이너가 종료될 때 컨테이너가 사라지지 않습니다.--volume 옵션을 통해 docker run을 통해 마운트..
C/Symbolic Execution/KLEE Tutorials 1-2 Anaylsis # 대상 파일 : ~/klee_src/examples/get_sign/get_sign.c 기호실행을 할 수 있게 해주는 가상 엔진입니다.소스코드와 함께 헤더파일이 전처리되어 소스를 감싼 후 기호 실행할 변수를 지정하는 klee_make_symbolic() 함수를 이용해 기호실행을 합니다.klee_make_symbolic()은 소스 내의 지정할 변수의 주소값, 기호로 다룰 크기, 그 변수를 부를 이름 이렇게 3가지를 인자값으로 사용합니다. - Bllvm 바이너리 생성하는 방법clang -I [전처리할 헤더 위치] -emit-llvm -c -g [소스 위치]-I는 컴파일러가 klee/klee.h 파일을 찾을 수 있게 하는 옵션이고,-g는 디버그 정보를 바이트 코드에 포함시키는 옵셥입니다.최적화를 시키려면 -..

반응형