event가 발생했을 경우 (event에 대한 자세한 정의는 잘 모르겠음) kernel은 그 event를 감지하고 signal을 만들어서 process에게 전달해 준다. 이 때 해당 process가 그 signal을 block한 상태였다면 kernel은 queue 안에
static 변수는 전역변수와 유사하게 Data 영역에 메모리가 할당되며, 그 값은 프로그램이 종료될 때 까지 할당해제되지 않는다.하지만 함수 내부에서 static 변수를 선언하게 되면 그 함수에서만 접근이 가능하고, 외부에서는 접근이 불가능하다.그래서 생각해 낸 방법
execve를 할 경우 기존 프로세스의 fd값은 일정하게 유지가 된다. (이 외에도 pid값 등 유지되는 것들이 있다.) 하지만 다른 메모리 영역은 모두 execve한 새로운 프로그램으로 인해서 덮이게 된다.여기서 주의해야 하는게 signal에 관해서인데, signal
detach? join? 스레드의 상태에는 detached 상태와 joinable 상태가 존재한다. (다른 것도 있을 수 있음) 스레드 생성 시에 default 설정으로 joinable하게 생성되고, attribute를 추가해 주면 detach로도 생성이 가능하다. 또
하나의 프로세스를 실행하던 여러 스레드가 존재한다고 해 보자.여기서 프로세스가 종료된다면 당연히 실행되던 스레드들도 모두 종료된다.즉, 하나의 스레드에서 exit이 호출되거나 main문을 실행하던 스레드가 return을 했을 경우에 해당될 것이다.하지만 그것과 "mai
일반적으로 switch 문이 if-else문에 비해서 더 효율적이라는데,,진짜 그런지 문득 궁금해짐.실제 C 코드어셈블리그렇게 큰 차이는 모르겠지만, switch 문의 경우에는 어떤 경우에든 jmp가 2번씩 일어나는데에 비해, if-else문은 조건에 해당되는 경우가
bit shift operator : 말 그대로 비트를 이동시키는 연산자.ex)a = 10000000(2)이고, a >> 3을 하면a = 00010000(2)가 된다.마찬가지로b = 00000001(2)이고, b << 3을 하면b = 00001000(2)가
인텔 8086의 경우 16비트 단위로 동작한다.즉, 16비트 => 64KB의 메모리만 사용가능.하지만, 실제 물리 메모리인 1MB(20비트)까지 지원하기 위해서 세그먼트 레지스터를 사용하기 시작.세그먼트 레지스터?16비트 레지스터.CS, DS, ES, FS, GS, S
Instruction Pointer (일반적으로 Program Counter)다음 실행될 명령어를 가리키고 있다.매 명령어 실행 시 마다 특정 크기만큼 증가한다.까지만 알고 있었는데, 정확히 증가하는 시점.? 이 갑자기 궁금해짐.얘는 왜 궁금해졌나?사실 이야기 할 것들
chunk의 크기에 대한 정보..할당할 수 있는 메모리 사이즈는 16바이트의 배수로 정렬된다고 한다. 즉, 필요 바이트 수가 32라면 32바이트가 할당되고, 33이 되는 순간 48바이트가 할당되는 식이다. 그런데 malloc에는 헤더가 존재하고, 이 헤더가 가지는 크기
그런데 찾아보면 stdout이라는 전역 변수 자체가 존재한다는 것을 알 수 있다.일단 확실한 건 stdout이라는 녀석은 FILE \*에 해당하고, \_IO_2_1_stdout\_은 실제 FILE \*을 가지고 있다.stdout은 이 \_IO_2_1_stdout\_을
open 시스템 콜이 SECCOMP에 의해 막혀있다면 openat 시스템 콜을 고려해 볼 수 있다.openat 시스템 콜open 시스템 콜과 완전히 같게 동작하는데, 다음 부분이 다르다 :dirfd 인자는 directory의 fd값으로, pathname이 상대경로라면
원래는 master_canary 문제를 풀면서 알게된 점을 올리려고 하였으나, 궁금한 것을 찾는 과정에서 방향이 이상해져버림..일단 설명 드가자스레드 2의 스택 주소스레드 2의 스택 주소vmmap한 결과스레드 2의 vmmap스레드 3의 스택 주소스레드 3의 스택 주소v
\_\_attribute\_\_((randomize_layout))struct에다가 쓸 경우 컴파일 타임에 struct의 멤버 변수들의 순서가 정해진다. -> 보안을 위함.\_\_attribute\_\_((unused))사용되지 않는 변수임을 컴파일러에 명시적으로 알려
데이터를 주고 받을 때에 오류가 생겼는지 확인하는 방법 중 하나.송신 데이터의 끝에 parity bit을 추가해서 이를 알게 해 준다.예를 들어, 1011001의 7비트 데이터를 전송한다고 해 보자.이에 추가해서 제일 뒤에 0비트를 하나 덧붙인다. (0인 이유 : pa
ELF Executable and Linking Format 실행파일, 오브젝트 파일, 라이브러리 파일 등이 취하고 있는 일종의 형식. 1. 기본 타입 2. 기본 구성 요소 ELF header 기본적인 이 파일(ELF)에 대한 정보들이 저장되어 있다. Progr
a와 b를 AND 연산해서 flag 값을 설정한다.a에서 b를 빼고 난 후의 값을 flag에 설정한다.
system call은 context-switch 비용이 상당히 많이 든다. 이를 해결하기 위한 방법으로 userspace에서 이를 처리하는 방법이 등장하였다.이 방법이 vsyscall에 해당한다.특히 gettimeofday() 와 같은 시간 관련 함수들의 경우 자주