보호되어 있는 글입니다.
보호되어 있는 글입니다.
어셈 코드(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 커널 : 시스템의 주요 핵심 기능만을 커널에 넣고 그 이외는 프로세스로 돌리는 형태이다. 핵심기능은 커널이 처리해주기 때문에 기능 ..
how2heap : https://github.com/shellphish/how2heap 들어가기 전...- chunk address는 chunk의 헤더 시작 주소- heap address는 malloc을 통해 사용자에게 반환되는 heap 주소----------------------------------------------------------------------------------------------------------------------------------------fastbin dup 12345678910111213141516171819202122#include #include int main(){ int *a = malloc(8); int *b = malloc(8); int *c = ..
Peda : gdb 업그레이드$ git clone https://github.com/zachriggle/peda.git ~/peda$ echo "source ~/peda/peda.py" >> ~/.gdbinitcs Peda-heap : Peda에 heap 분석용 커맨드 추가$ git clone https://github.com/Mipu94/peda-heap ~/peda-heap$ echo "source ~/peda-heap/peda.py" >> ~/.gdbinitcs pwndbg : Peda 옆그레이드, Peda나 pwndbg 중 택1 how to install 12git clone https://github.com/pwndbg/pwndbg; cd pwndbg./setup.shColored by Colo..