목록전체 글 (95)
total_activ
1. C++이란?C언어 + 객체 지향 언어 = C++▶ C언어의 모든것을 담고 있음 1.1. C++의 역사Asembly → BCPL → B → C → C++ → Java/C++표준 변화 → C# 1.2. 객체 지향 프로그래핑이란?클래스와 상속을 이용하여 소프트웨어의 재사용성을 높이고 개발과 관리를 쉽게하는 것객체 지향의 특징으로는 클래스를 통해 캡슐화를 진행하며, 실체인 객체가 존재한다. 또한, 상속성과 다형성이 있다. 1.3. 표준 C++의 중요성어떠한 C++ 버전이냐에 따라 특정 컴파일러에서만 컴파일이 진행된다.즉, 표준 C++은 볼랜드, 비주얼, GNU등의 모든 컴파일러에 대해 컴파일이 되지만 비주얼 C++은 비주얼 컴파일러에 대해서만 실행파일이 제작된다. 1.4. C++ 특징(a) 호환성(b)..
보호되어 있는 글입니다.
(1) 공격 타겟의 차이Linux 용 랜섬웨어는 Window 랜섬웨어 보다 더 명확하게 내부 네트워크의 서버 액세스를 지향한다.Windows 용 랜섬웨어는 개인용 컴퓨터와 조직용 사용자 워크스테이션(개인과 엔드포인트)를 타겟으로 진행한다면, Linux 용 랜섬웨어는 서버 준야에서 배포가 효과적이다.즉, Linux 랜섬웨어는 Windows 위협에 비해 중대형 조직을 대상으로 공격을 진행한다.(2) 암호화하기 위한 폴더 및 파일에 대한 접근 방식 차이Windows 용 랜섬웨어는 중요 시스템 폴더를 피하려고 시도하는 반면, Linux 용 랜섬웨어는 매개변수나 구성을 통해 직접 지정된 폴더 및 파일을 암호화한다.이러한 차이로 인해 공격자들의 특이한 행동이 존재한다 :CL0P 랜섬웨어는 파일과 폴더를 구분하기 위..
커널과 유저 모드마이크로소프트사에서 Windows 이전에 사용한 운영체제로, MS-DOS는 유닉스는 항상 단일 CPU 모드에서 실행된다.반면, 유닉스 같은 운영체제는 효율적인 시분할을 위해 이중 CPU 모드를 사용한다.리눅스 CPU는 커널모드와 유저모드로 동작한다. 사용자 프로세스는 유저모드에서 동작 & 접근 권한을 가질려면 시스템 호출을 통해 디바이스 드라이버나 커널 모드로 요청을 전달해야 함 ➜ 그래서 유저 모드는 페이지 폴트가 가능함더보기더보기페이지 폴트란?인터럽트의 일종프로세스가 실행중에 필요한 페이지가 물리 메모리에 없을때 발생한다. 커널 자체는 커널모드에서 동작& 프로세스 명령어 집합, 전체 메모리, 입출력 영역에 대한 모든 접근 권한 소유프로세스 독점[유저 모드]# 리눅스 커널 2.4..
jamp table은 제어권을 다른 특정 위치로 전송하는데 사용되는 추상 데이터 구조이다.일반적인 경우, 구현이 더 쉽고 빠르게 만들기 위해 제한된 형식에서만 제공된다.하지만, 모든 case문에 break문이 존재하는데, 이는 각 경우가 서로 독립적인 경우이다. 이러한 독립적인 경우에는 jump table의 전체 기능이 필요하지 않다.이에, "제한된 jump table'은 효율성을 활용하지만, 각 '액션'이 다른 액션과 독립적일 때 사용된다. 즉, 각 경우가 서로 영향을 주지 않고 독립적으로 동작할 때 사용하여 코드의 효율성을 높일 수 있다. 해당 매핑은 보통 해쉬 테이블이 그 예시이며, jump table과 독립적으로 사용될 수 있다/ jump table의 복잡도는 다음과 같다.보통은 O(K) 복잡도..
커널 내부 리눅스 시동 [ x86 기반 하드웨어에서 리눅스 시동 절차 과정 ] 전원 인가 ⇩ BIOS ⇩ 부트로더(GRUB/LILO...) ⇩ 실제주소 모드 커널 ︙ x86 실제 주소 모드 (arch/x86/boot/pm.c) x86 보호 모드 ︙ 부호 모든 커널 ⇩ 사용자 프로세스와 데몬 BIOS가 MBR을 메모리에 올리면서 시작 MBR에 있는 코드는 파티션 테이블을 확인한다. 이를 통해 활성 파티션에서 GRUB, LILO, SYSLINUX와 같은 리눅스 부트로더를 읽는다. 부트로더는 압축된 커널 이미지를 메모리에 올린 후 제어권을 넘김 그러면 제어권을 받은 커널은 자신의 압축을 해제한 뒤 시동을 건다 1단계 커널 초기화 : 실제 주소 모드 어셈블리로 수행 2단계 시동 절차 : init/main.c에 ..
오늘은 간단하게 커널 최신 버전을 Ubuntu에 가져와 원시 코드를 확인한 뒤, 커널 시작 코드에 printk("Hello, I am N0min9g") 명령어를 삽입하여 부팅시 " Hello, I am N0min9g" 문자열이 출력되도록 할 것이다. 총 3가지로 진행된다.첫번째로, kernel의 config를 구성하는 것이다. 해당 과정을 진행하지 않으면 수많은 요구사항들을 노가다로 선택해야할 것이다.두번째로, kernel을 빌드하는 것이다. 흔히들 make bzImage와 같이 컴파일 한다고 생각하면 된다.세번째로, kernel을 본격적으로 설치한다. 커널 최신 버전 설치Stable 버전kernel.org에 나타나있는 stable한 버전 '6.5.10' 버전을 확인한다.kernel.org 트리 구조w..
프로세스 생성유저 레벨 프로세스 생성 과정, _do_fork() 함수 처리 흐름유저 공간에서 fork() 함수 호출커널에 프로세스 생성 요청 (리눅스에서 제공하는 라이브러리 도움을 받아서 진행)해당 라이브러리 코드가 실행되는 과정에 System Call 발생리눅스 커널 계층에서 fork()함수에 대응하는 SystemCall 핸들러인 sys_clone()함수 호출sys_clone() 함수 분석유저 계증에서 fork() 함수 호출시 커널 계층에서 실행되는 함수SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp, int __user *, parent_tidptr, unsigned long, tls, ..
프로세스프로세스 소개1. 프로세스란? 프로세스는 리눅스 시스템 메모리에서 실행 중인 프로그램을 뜻한다.스케줄링 대상인 태스크와 유사한 의미로도 사용된다.다수의 프로세스를 실시간으로 사용하는 기법의 용어로 '멀티 프로세싱'이라고 한다. 리눅스 개발자 입장에서의 프로세스는 리눅스 시스템 메모리에 적재되어 실행을 대기하거나 실행하는 실행 흐름을 뜻한다. 프로세스가 실행 대기한다면 실행 할때 거치는 과정?프로세스를 식별하는 구조체 모습? : task_struct 구조체 테스크 디스크럽터는 프로세스를 관리하는 자료 구조이자 객체이다.테스크 디스크럽터는 task_struct 구조체로 표현된다.해당 구조체에 프로세스가 쓰는 메모리 리소스, 프로세스 이름, 실행 시각, PID, 프로세스 스택의 최상단 주소같은 속성 ..