rosieblue
article thumbnail
[OS] Thread Local Storage (TLS)
🖥️ Computer Science/OS 2023. 4. 11. 00:16

TLS(Thread Local Storage)란? TLS는 Thread Local Storage의 약자로 thread별로 고유한 전역/정적 변수를 저장할 수 있게 하는 공간이다. 스레드는 원래 스레드 별로 고유의 스택을 가지지만, 전역/전적 변수는 프로세스의 모든 스레드가 접근 가능하다. 따라서 전역/정적 변수를 스레드 별로 할당해주고 싶을 때 TLS를 사용한다. (따라서 TLS에 들어있는 애들은 지역 변수와 다르게 함수 above에서 다 visible하다) TLS는 프로세스 실행에 필요한 여러 정보가 들어있다 fs는 TLS를 가리키는데, 예를 들어 fs:0x28에는 스택 카나리의 값으로 쓰이는 랜덤한 값이 저장된다. 대충 tls 생성하는 함수임 아래는 ㅇㅇ static void * init_tls (v..

article thumbnail
[드림핵(Dreamhack)] basic_exploitation_000
Linux Exploitation/Wargame 2023. 4. 10. 19:59

문제 설명 Return Address Overwrite를 통해 BOF를 이끌어내서 해킹하는 문제이다. 문제 정보에 보면 NX 비트나 canary 등 보안 기법은 설정되어있지 않다는 것을 볼 수 있다. 그리고 Arch를 보니 i386-32-little 이므로 32bit 기준으로 쉘 코드를 작성해주면 된다. 주어진 코드 분석 #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { //초기화 setvbuf(stdin, NULL, _IONBF, 0); //stdin 버퍼 사용x setvbuf(stdout, NULL, _IONBF, 0); //stdout 버퍼 사용x sign..

article thumbnail
[OS] 프로세스 Process (1) - 프로세스 개념, 포그라운드 프로세스 vs 백그라운드 프로세스, ps 명령어
🖥️ Computer Science/OS 2023. 4. 5. 15:10

프로그램 (Program) 프로그램이란 우리가 많이 쓰듯 그저 하나의 앱?이라고 생각하면 편하다. 앱이라는 용어가 사실 여기서 정확하진 않지만 비전공자분들한테는 이렇게 설명하면 쉬울 것 같다. 예를 들어 크롬이나 노션, 워드 같은 것들이 다 프로그램이다. (exe같은 거 붙여진 애들!! exe말고 다른 확장자도 가능~) 이러한 프로그램을 설계할 때는 보통 C언어와 같은 프로그래밍 언어를 이용하므로 프로그램은 어떠한 테스크를 수행할 수 있는 그저 코드 덩어리라고 보면 편하다. 그렇다면 프로그램과 프로세스의 차이는 무엇일까? 프로세스 (Process) 이때 프로세스란 실행되고 있는 프로그램이라고 생각하면 된다. 프로그램은 아직 실행되지 않은 정적인 코드 덩어리라면, 프로세스는 실행되고 있는 동적인 아이라고 ..

article thumbnail
[System/Assembly] 범용 레지스터 호환표

x86(32비트) 아키텍처의 범용 레지스터 32비트 레지스터: eax, ebx, ecx, edx, esi, edi, ebp, esp (8개만 있고 r8~r16은 없음) 16비트 레지스터: ax, bx, cx, dx, si, di, bp, sp 8비트 레지스터: al, bl, cl, dl, sil, dil, bpl, spl x86-64 아키텍처의 범용 레지스터 64비트 레지스터: rax, rbx, rcx, rdx, rsi, rdi, rbp, rsp, r8 ~ r15 32비트 레지스터(하위 32비트만 사용): eax, ebx, ecx, edx, esi, edi, ebp, esp, r8d ~ r15d 16비트 레지스터(하위 16비트만 사용): ax, bx, cx, dx, si, di, bp, sp, r8w ~..

article thumbnail
[C/C++] mmap 함수

오늘은 pwnable에 많이 나오는 mmap 함수에 다뤄보도록 하겠다. mmap이 무엇이고 왜 쓰는지? 일단 mmap은 메모리를 어떤 파일 혹은 디바이스에 대응시키는 함수이다. 그렇다면 "메모리를 파일로 대응시킨다는 것"이 무슨 뜻이고 "왜" 그래야만 할까? 🤔 컴퓨터 프로세스에서 각 프로세스는 다른 프로세스와 분리된 주소를 가지고 있어 서로 겹치지 않는다. 즉 프로세스 메모리는 서로 중복되지 않는다. 그렇기 때문에 프로세스 간 데이터 공유가 어렵다. 물론 이는 프로세스 안의 데이터를 보호하기에는 좋으나.. 저런식으로 데이터를 공유하고 싶을 때는 사실 불편할 것이다. 하지만 mmap을 이용하면 공유하고자하는 메모리를 아예 파일로 대응시켜놓고, 이를 여러 프로세스가 사용할 수 있다. 파일은 전역적인 객체이..

article thumbnail
[System] 컴파일 과정의 링크(Link)와 오브젝트 파일(Object File)

C코드나 어셈블리 코드를 컴파일 할 때 결과를 지정할 때 Object File이 될 때도 있고,,, 기계어 코드가 될 때도 있고(?)해서 도대체 둘의 차이가 뭔지, 그리고 오브젝트 파일이라는게 정확하게 뭘 지칭하는지 궁금해서 정리해보려고 한다. 그리고 중간에 나오는 '링크'의 개념을 다뤄보고자 한다. 오늘 다룰 것은 다음과 같다 기계어 코드 vs 오브젝트 코드 (vs 어셈블리 코드) 링크(Link)의 개념 gcc vs as 기계어 코드 vs 오브젝트 코드 (vs 어셈블리 코드) 는 아래 글을 참고하였다. https://stackoverflow.com/questions/466790/assembly-code-vs-machine-code-vs-object-code#:~:text=Object%20code%20i..