뭥미

    인라인 함수(inline function)

    인라인 함수는 프로그램의 실행 속도를 높이기 위해 추가된 기능입니다. 왜? 인라인 함수는 컴파일된 함수 코드가 프로그램의 코드 안에 직접 삽입되어진다. 어떻게 쓰나요? 인라인 함수를 사용하려면 함수 선언 앞에 inline이라는 키워드를 붙이거나 함수 정의 앞에 inline이라는 키워드를 붙인다. 특징 및 주의사항: - 클래스 멤버 함수가 inline을 사용하려면, 함수 정의의 위치가 *.h에 있어야 한다. 안 그러면 확인할 수 없는 외부 참조라고 뜬다. - 컴파일러가 inline화를 무시? 거부할 수 있다. - 반대로, 컴파일러가 자동으로 inline화를 할 수 있다. 장점: - 성능 향상 단점: - 인라인 함수를 자주 호출 한다면, 호출한 만큼 코드를 삽입하기 때문에 프로그램의 크기가 커질 수 있다.

    함수 호출 규약(Calling convention)

    참고 자료: 아래 블로그를 보는 게 더 배울 게 많다. 굳이 내 자료를 보는 것보다 설명,그림이 잘 되어있어 시간을 아끼도록 하세요! blog.kimtae.xyz/7 함수호출규약 1. 함수 호출 규약 개요 함수 호출 규약(Calling Convention)이란, 함수를 호출하는 방식에 대한 약속이다. 함수 호출 규약은 인자 전달 방법, 인자 전달 순서, Stack Frame을 정리하는 방법에 따라 그 종 blog.kimtae.xyz 함수 호출 규약이란, 함수를 호출하는 방식에 대한 약속이다. 함수 호출 규약은 인자 전달 방법, 인자 전달 순서, Stack Frame을 정리하는 방법에 따라 그 종류를 구분한다. Stack Frame은 함수의 호출 과정에서 호출되는 함수가 사용하기 위해 할당되는 Stack의..

    자가 보호(3) - DeviceIO 개발

    드라이버와 통신하는 부분을 개발한다. 아직 지식이 없어, 자세한 내용을 기입하지 못한다. 리서치를 통해 해당 게시글을 수정한다.

    자가 보호(2) - Driver Load, Unload

    - Drivr Load, Unload 하는 Function을 만들 것이다. - 잘 쓰기 쉽게, 잘못 쓰기 어렵게 참고자료 (https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-createservicea) 필요한 기능 4가지 - Driver Load - Driver Unload - Driver Start - Driver Stop 4가지 기능을 제작할 것이다. - 첫 번째는 동작만 하기 위해 개발 - 두 번째는 첫 번째보다 필요없는 변수 제거 - 세 번째는 Logic에서 필요없는 부분 제거 꼭 세 번을 개발하지 않을 수도 있다. 조금 더, 개발 스킬보다는 개발 기본에 충실하고 싶다. 위에 MSDN을 참고해, 그대로 코드를 가져왔다. 기존에..

    자가 보호(1) - 프로젝트를 시작하기 전에

    프로젝트를 진행하면서 블로그에서 진행을 한다. 자가 보호 프로젝트는 목표 프로세스, 파일, 레지스트리의 종료, 변경, 제거 등으로부터 보호하는 프로젝트. 해당 프로젝트를 진행하면서, 현업에서 배우는 코딩 컨벤션 및 논리적인 사고력 등 여러가지 본인에게 부족한 것을 향상 시키는 것에 집중한다. 1. 필요한 모듈은 개발한다. - 오픈소스가 충분하나, 모듈과 모듈끼리 서로 얽히지 않게 개발하는 능력이 매우 부족하다. 2. 주석 처리 및 코딩 컨벤션에 집중한다. - 코딩 규약은 최소한의 성의라고 생각한다. 3. Modern C++ 지향한다. - Modern이라고 붙이기에는 애매하지만, C++11 이상에서 개발된 키워드를 사용한다. 4. 최소 2번 이상 지웠다가 새롭게 짠다. - 결과만 나오는 코딩은 어울리지 않..

    코딩 컨벤션 맛보기

    항상 말씀을 드리지만, 제가 기록하는 것은 제 위주로 적혀 있어 혼란을 야기할 수 있습니다. 그리고 제 자료를 머리에 저장하기 전, 여러번 구글링을 통해 정확한 자료를 머릿속에 저장하기를 부탁드립니다. 먼저, 코딩 컨벤션이란? 나 이외에 다른 사람들도 내가 작성한 코드를 보고 쉽고 빠르게 이해할 수 있도록 하나의 작성 표준 이 글에서 다룰 코딩 컨벤션은? 함수를 정의할 때, 지켜야 할 몇 가지 스텝을 말해보도록 한다. Step 1. 매개변수 이름을 더 잘 짓도록한다. - 함수의 매개변수 위치에 따라, 입력 매개변수 인지, 결과로 사용하는 매개변수인지 알 수 있도록 네이밍을 하도록한다. Step 2. 읽기전용 매개변수를 상수화 한다. - 결과가 아닌, 입력 매개변수는 읽기전용 지시어(const)를 사용한다..

    Drive-by Compromise

    대부분 영어로 된 자료라, 내 저렴한 영어 실력으로 번역하면 다른 분들에게 민폐끼칠 수 있음을 미리 알려드립니다. Drive-by Compromise는 Mitre Att&ck 에서 Initial Access 단계에서 사용하는 기술 중 하나이다. Drive-by Compromise는 악의적인 사용자가 일반적인 브라우징 과정을 통해 웹 사이트를 방문하는 사용자를 통해 시스템에 액세스하는 방법이다. 익스플로잇 코드를 브라우저에 전달하는 여러 가지 방법이 있다. - 공격자가 정상 웹사이트에 크로스 사이트 스크립팅, javascript와 iFrames 같은 악성 코드를 삽입한다. - 악성 광고를 정상 광고 제공자에게 유료로 지불하고 배포한다. - 나머지 부분은 참고 사이트를 참고하세요. - 어정쩡한 번역과 이해는..

    FltRegisterFilter 함수

    참고 자료 : https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/fltkernel/nf-fltkernel-fltregisterfilter?redirectedfrom=MSDN FltRegisterFilter function (fltkernel.h) - Windows drivers FltRegisterFilter registers a minifilter driver. docs.microsoft.com 함수 기능 : 미니 필터 드라이버를 등록한다 NTSTATUS FLTAPI FltRegisterFilter( PDRIVER_OBJECT Driver, const FLT_REGISTRATION *Registration, PFLT_FILTER *RetFil..

    퀵정렬(Quick sort)

    참고 블로그 : https://gmlwjd9405.github.io/2018/05/10/algorithm-quick-sort.html [알고리즘] 퀵 정렬(quick sort)이란 - Heee's Development Blog Step by step goes a long way. gmlwjd9405.github.io 퀵 정렬은 분할 정복 알고리즘의 하나로서, 평균적으로 매우 빠른 수행 속도를 가지는 정렬 방법 퀵 정렬 알고리즘 특징 - 합병 정렬(merge sort)과 달리 리스트를 비 균등하게 분할 - 분할 정복 알고리즘 - 문제를 작은 2개의 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략 - 분할 정복 방법은 재귀 함수를 이용하여 구현 퀵정렬 과정 1. 리스트에서 한..

    빌드과정 ( 전처리, 컴파일, 어셈블리, 링킹 )

    빌드과정 ( 전처리, 컴파일, 어셈블리, 링킹 )

    이번에는 기본 중 기본 빌드과정에 알아보려합니다. 빌드과정 진짜 너무너무 쉬워서 무시할 수 있는데, 그래도 컴파일 언어를 쓴다면 다시 되짚어보면 좋은기회라 생각해 글을 올리게되었습니다. 먼저 C++ 기준으로 빌드과정을 설명 및 정리하겠습니다. 빌드과정은 1. Preprocessor (전처리기) - #define 같은 매크로나 지시자를 소스코드로 변경하고, cpp 확장자를 가진 파일이 i 파일이 된다. 2. Parser(문법검사) - 코드 문법을 검사하고, 문법에 따라 코드를 쪼갠다. 3. Translation (번역) - 소스코드를 어셈블리어로 번역하고, i파일이 s파일이 된다. 4. Assembler(번역) - 어셈블리어를 기계어만큼 낮은 수준의 언어로 번역하고, s파일이 o파일이 된다. ------여..