전체 글 103

참조자(Reference)

참조자(Referenfce) 이해 "변수는 할당된 메모리 공간에 붙여진 이름이다. 그리고 그 이름을 통해서 해당 메모리 공간에 접근이 가능하다" "참조자는 할당된 하나의 메모리 공간에 또 다른 이름을 붙이는 것이다." int &num2=num1; 위의 문장을 실행하면, num1이라는 이름이 붙어있는 메모리 공간에는 num2라는 이름이 하나 더 붙게 된다. int *ptr=&num1; //변수 num1의 주소 값을 반환해서 포인터 ptr에 저장 int &num2=num1 //변수 num1에 대한 참조자 num2를 선언 Reference.cpp #include using namespace std; int main(void) { int num1=1020; int &num2=num1; num2=3047; cout

study/C++ 2020.05.19

자료형 bool

C언어 복습 키워드 const 의미 - const int num= 10; --> 변수 num을 상수화! - const int * ptr1 = &val1; --> 포인터 ptr1을 이용해서 val1의 값을 변경할 수 없음 - int * const ptr2 = &val2; --> 포인터 ptr2가 상수화 됨 - const int * const ptr3 = &val3; --> 포인터 ptr3가 상수화 되었으며, ptr3를 이용해서 val3의 값을 변경할 수 없음 실행 중인 프로그램의 메모리 공간 - 데이터 : 전역 변수가 저장되는 영역 - 스택 : 지역변수 및 매개변수가 저장되는 영역 - 힙 : malloc 함수 호출에 의해 프로그램이 실행되는 과정에서 동적으로 할당이 이뤄지는 영역 - malloc&free ..

study/C++ 2020.05.19

매개변수의 디폴트 값(Default Value)

C++의 함수에는 '디폴트 값'을 설정할 수 있다. 매개변수에 설정하는 '디폴트 값' int MyFuncOne(int num=7) { return num+1; } int MyFuncTwo(int num1=5, int num2=7) { return num1+num2; } "매개변수의 디폴트 값은 함수 호출 시 인자를 전달하지 않으면 7이 전달된 것으로 간주하는 것" MyFuncOne(); //7이 전달된 것으로 간주! MyFuncTwo(7); MyFuncTwo(); //5와 7이 전달된 것으로 간주! MyFuncTwo(5, 7); DefaultValue1.cpp #include using namespace std; int Adder(int num1=1, int num2=2) { return num1+num..

study/C++ 2020.05.19

함수 오버로딩(Function Overloading)

//C언어 함수 오버로딩의 이해 int MyFunc(int num) { num++; return num; } int MyFunc(int a, int b) { return a+b; } int main(void) { MyFunc(20); //MyFunc(int num) 함수의 호출 MyFunc(30,40); //MyFunc(int a, int b) 함수의 호출 return 0; } "함수 호출 시 전달되는 인자를 통해서 호출하고자 하는 함수의 구분이 가능하기 때문에 매개변수의 선언 형태가 다르다면, 동일한 이름의 함수 정의를 할 수 있는 것이 함수 오버 로딩이라고 한다" MyFunc(30, 40); //함수 호출 문 "두 개의 int형 정수를 인자로 전달 받을 수 있는 MyFunc라는 함수를 찾는다" "매개..

study/C++ 2020.05.19

패킹과 언패킹

프로그램 코드 크기를 줄이려고 압축하거나 프로그램 분석을 어렵게 만들려고 암호화하는 것을 패킹(Packing)이라고 합니다. 단순 압축하는 것을 컴프 레싱(Compressing), 암호화하는 것을 프로텍팅(Protecting)이라고 구분 컴프 레싱(Compressing) 실행 코드를 압축해서 PE 파일의 특정 섹션에 저장하고 프로그램이 실행될 때 공간에 압축을 풀어 실행하는 구조 프로텍팅(Protecting) 실행 파일을 암호화해서 분석을 어렵게 만드는 기술이다. 실행코드는 암호화된 상태로 배포되고, 실행 시점에 복호화되어 동작을 수행한다. Packer Compressor Protector 파일 소형화 코드 난독화 저용량 실행 파일 생성 내부 실행 로직 보호 프로그램 실행 속도 저하 프로그램 크기 증가 ..

레나 리버싱 17 강 일련번호 생성 로직 분석

XOR ESI, ESI 명령어는 같은 레지스터를 XOR 연산하게 되면은 0으로 초기화하는 과정입니다. 빨간색으로 네모칸 친 부분이 일련번호 생성 부분이고 차례대로 번호를 붙여서 설명하겠습니다. 입력된 값 : lena151 1. 'MOV EDX, DWORD PTR DS : [403038] ' EDX 레지스터로 DWORD(4바이트) 크기만큼 복사하는 명령어입니다 (WORD는 2바이트) '403038'에 있는 데이터 4바이트만큼 EDX에 복사한다. 주소에는 '6C 65 6E 61'이 저장되어 있으며, ASCII 코드로 'lena'라고 확인할 수 있습니다. 2. 'MOV DL, BYTE PTR DS : [EAX + 403037] EAX 레지스터에는 1이 저장되어 있으며, 1 + 403037 = 403038이라고..

WIN API [GetVolumeInformation() 함수]

BOOL GetVolumeInformationA( _In_opt_ LPCSTR lpRootPathName, _out_opt_ LPSTR lpVolumeNameBuffer, _In_ DWORD nVolumeNameSize, _out-opt_ LPDWORD lpVolumeSerialNumber, _out-opt_ LPDWORD lpMaximumComponentLength, _out-opt_ LPDWORD lpFileSystemFlags, _out-opt_ LPSTR lpFileSystemNameBuffer, _In_ DWORD nFileSystemNameSize ); GetVolumeInformation() 함수는 지정된 루트 디렉터리가 속한 파일 시스템 정의와 볼륨 정보를 가져오는 함수입니다. 변수 유형 ..

study/C언어 2020.04.08

구조체 정리

구조체란? 구조체(structure type)란 사용자가 C언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입입니다. 구조체는 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있습니다. 배열이 같은 타입의 변수 집합이라고 한다면, 구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것입니다. 이때 구조체를 구성하는 변수를 구조체의 멤버(member) 또는 멤버 변수(member variable)라고 합니다. 구조체의 정의와 선언 struct 구조체이름 { 멤버변수1의타입 멤버변수1의이름; 멤버변수2의타입 멤버변수2의이름; ... }; struct라는 키워드를 사용하여 구조체의 시작을 알리고, 구조체 이름인 book으로 구조체를 정의하고 있습니다. 중괄호 사이에 char..

study/C언어 2020.04.02