보호되어 있는 글입니다.
필터 모델 BPF의 필터 모델에는 CFG 모델과 Tree 모델이라는 2가지 형식이 있다. 2개의 모델은 계산상으로는 동일한 성능을 가지긴 하지만, 구현 방식이 전혀 다르다. 하지만 최근에는 현대의 기기들이 레지스터 기반이기 때문에 CFG 모델이 구현에 더 적합하다고 하고 있다.Tree 모델 : Stack 기반, 각 노드 자체가 boolean으로 표현되어 or 연산에 의해 결론지어짐CFG 모델 : Register 기반, 각 노드에 의해 분기되어 흐름을 가지고 있어 분기로 결론지어짐 개인적인 생각으로 Tree 모델이 실제로 구현했을 때, 코드는 더 깔끔하다고 생각한다. CFG 모델은 대신 알고리즘 상으로는 더 효율적일 수 있다. 코드가 길면 길수록 중첩 분기가 많아져 코드가 복잡해질 수 있는 반면, Tree..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
소스코드1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556#!/usr/bin/pythonfrom subprocess import *from time import sleepimport re def crash_logging(ps, pid, cause, ip, sp, error, ptr): with open("./crash_log.txt", "a") as fh: fh.write("=============================================\n") fh.write("Process : {0}\n".format(ps)) fh.write("PID : {0}\n"...
어셈 코드(32bit 어셈)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768int main(void) { asm( "xor %eax, %eax\n\t" "xor %ebx, %ebx\n\t" "xor %ecx, %ecx\n\t" "push %ecx\n\t" //IPPROTO_IP "inc %ecx\n\t" "push %ecx\n\t" //SOCK_STREAM "inc %ecx\n\t" "push %ecx\n\t" //AF_INET "mov %esp, %ecx\n\t" "inc %ebx\n\t" "mov $0x66, %al\n\t"..
TLS(Thread Local Storage) : 각 스레드 별로 다른 값을 가지는 전역 변수, 기본적으로 일반적인 전역 변수는 모든 스레드가 공유하기 때문에 상호배제를 안 걸면 Race Condition이 발생 가능하기 때문에 사용(물론, 일반 전역 변수에 직접 상호배제를 걸어도 됨) TLS 변수 선언 방법12345// .tbss Section__thread int val1; // .tdata Section__thread int val2 = 0x12345678csELF Format에는 TLS 전역 변수를 저장하기 위해 .data/bss 섹션이외에 별도로 .tdata/tbss 섹션이 추가됨 초기화 이미지 과정ELF Format에 .tdata/tbss 섹션 추가링크 과정에서 PT_TLS 타입의 데이터 세그..
문자 디바이스(Character Device) 요청 처리 방식 문자 디바이스는 블록 디바이스와 다르게 System Buffer를 사용하지 않기 때문에 요청 큐를 가지지 않는다. 블록 디바이스는 인터페이스를 이용해 제어를 하다가 System Buffer에 해당 내용이 비어있어 디바이스 드라이버까지 요청이 들어오면 요청 큐에 요청을 저장하여, request() 함수를 이용해 요청을 하나씩 꺼내어 처리하였다. 하지만 문자 디바이스는 System Buffer와 상관없이 디바이스 드라이버로 요청이 들어오고 문자 디바이스의 인터페이스를 이용해 바로 요청을 처리한다.블록 디바이스 : System Buffer 사용, request()를 이용해 요청 처리, System Buffer에 쓰기·읽기문자 디바이스 : User ..
Device의 종류Block Device : Block 단위로 입출력을 하는 Device, Block은 File System의 섹터를 의미Character Device : Character 단위, 즉 바이트 단위로 입출력을 하는 Device, 데이터 관리 기능을 가진 응용 프로그램Network Device : 네트워크 층과 연결되어 있음(루프백 장치, 랜카드와 같은...) Block Device Character Device 데이터 전송 단위 Block(File System의 섹터) Character(문자, Byte) 전송 버퍼 처리 System Buffer 사용 응용 프로그램의 Buffer 처리 대표 장치 하드디스크플로피디스크등...(디스크 종류) 프린트,단말기 등... 주요 특징 File System..
커널이란? 운영체제(OS, Operating System)의 핵심 부분으로 프로세스, 파일, 네트워크, 장치 등을 관리하는 사용자에게 편리한 인터페이스를 제공해주는 시스템 소프트웨어이다.Monolithic 커널 : 시스템에 관련된 모든 기능을 커널에 때려박은 형태이다. 모든 기능이 커널에서 동작하기 때문에 기능도 많고 Ring 레벨을 변경할 필요가 없기 때문에 빠르지만 기능을 추가하려면 커널을 수정해서 재컴파일해야 한다는 단점 존재 (Linux는 Monolithic 커널이며, 단점을 해결하기 위해 실시간으로 모듈을 추가할 수 있는 기능을 제공[insmod 명령어])Micro 커널 : 시스템의 주요 핵심 기능만을 커널에 넣고 그 이외는 프로세스로 돌리는 형태이다. 핵심기능은 커널이 처리해주기 때문에 기능 ..