이번 글에선 머리 굴려서 정리할 게 없다. 예제 코드에서 include한 csapp.h는 http://csapp.cs.cmu.edu/3e/ics3/code/include/csapp.h 를 사용했다. 책이나 인강 보셈! 1. 프로세스 ID 가져오기 #include <sys/types.h> #include <unistd.h> pid_t getpid(void); pid_t getppid(void); // Returns: PID of either the caller or the parent 각 프로세스는 0이 아닌 고유의 양수 프로세스 ID를 가진다. getpid 함수는 호출하는 프로세스의 ID를 반환하며, getppid 함수는 부모 프로세스의 ID를 반환한다. 2. 프로세스 생성과 종료 프로세스는 다음 세 가지 상태 중 하나로 생각할 수 있다.

Continue reading

이 글은 프로세스에 대해 정리한 글이다. 먼저 프로세스에 대한 정보 두 가지를 언급한다. 첫번째 프로세스(process)는 프로그램(program)의 인스턴스(instance)이다. 프로그램은 프로세스의 문맥(context)에서 돌아간다. 두번째 프로세스는 프로그램에게 여러 추상화를 제공한다. 프로그램에게 혼자서 프로세서를 사용한다는 착각을 주는 독립적 논리 제어흐름(logical control flow). 프로그램에게 혼자서 메모리를 사용한다는 착각을 주는 사적 주소공간(private address space). 좀 더 자세히 알아보자. 1. 논리적인 제어흐름 (Logical Control Flow) 프로세스는 각 프로그램에 프로세서를 혼자 사용한다는 착각을 제공한다. 실행된 프로그램의 인스트럭션에 프로그램 카운터 pc 값이 대응되는데, 이러한 pc 값의 배열을 논리 흐름(logical control flow)라고 부른다.

Continue reading

기준 ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-77-generic x86_64) gcc 5.4.0 20160609 gcc랑 관련없는 건데 이 운영체제에서 계속 ASLR을 끄고 싶어 echo "kernel.randomize_va_space=0" > /etc/sysctl.d/01-disable-aslr.conf 32비트로 컴파일하고 싶어 -m32 -m32 옵션을 줬는데 이상해 sudo apt install gcc-multilib 32비트로 컴파일하니까 main 함수에 스택을 정렬하는 이상한 인스트럭션이 있어서 짜증나 -mpreferred-stack-boundary=2 최적화 옵션을 주니까 printf@plt가 __printf_chk@plt로 바뀌는 게 싫어 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 CANARY를 없애고 싶어 -fno-stack-protector 스택에 실행 권한을 주고 싶어 -z execstack No RELRO가 기본값인데 Partial RELRO가 필요해 -z relro

Continue reading

1. 예외적인 제어흐름 (Exceptional Control Flow) 프로그램 카운터(program counter)는 아래와 같이 연속된 값들을 가정한다. \[ a_0, a_1, ..., a_{n-1} \] 인스트럭션 $I_k$에 대응되는 주소가 $a_k$다. $ak$에서 $a{k+1}$로의 전환을 '제어이동'이라고 하며, 이러한 제어이동의 배열은 제어흐름(control flow)이라고 부른다. 보통의 제어흐름에서 $Ik, I{k+1}$는 메모리상에서 나란히 존재한다. jmp, call, ret 같은 인스트럭션에 의해 $Ik$가 $I{k+1}$와 인접하지 않는 경우가 있을 수 있다. 이러한 인스트럭션은 프로그램의 상태 변화를 표현하기 위해 당연히 필요하다. 시스템은 프로그램에서 표현되지 않은 시스템 상태의 변화에도 반응할 수 있어야 한다.

Continue reading

Hyper-V에서는 가상 컴퓨터를 생성할 때 1세대와 2세대 중 선택해야 한다. 2세대는 이런 기능을 제공한다. https://msdn.microsoft.com/ko-kr/library/dn282285.aspx 1세대: 이전 버전의 Hyper-V와 동일한 가상 하드웨어를 가상 컴퓨터에 제공합니다. 2세대: 가상 컴퓨터에서 다음과 같은 새로운 기능을 제공합니다. 표준 네트워크 어댑터를 사용 PXE 부팅 SCSI 가상 하드디스크에서 부팅 SCSI 가상 DVD에서 부팅 보안 부팅(기본적으로 설정됨) UEFI 펌웨어 지원 음 좋은 것이군... 하고 우분투를 설치하려고 한 나는 이 화면을 보게 된다.

Continue reading

Hyper-V를 써보기로 했다. 네트워크 설정부터 포트 포워딩까지 작업이 조금 귀찮다. 그래서 여기 적음. 1. 네트워크 설정 가상 스위치 관리자에서 '내부 네트워크'로 가상 스위치를 생성한다. 네트워크 센터에서 물리 네트워크(여기서는 '이더넷')를 선택한다. 여기서 '속성'을 선택한다. '공유' 탭에서 '다른 네트워크 사용자가 이 컴퓨터의 인터넷 연결을 통해 연결할 수 있도록 허용'에 체크한다. 그리고 아까 생성했던 가상 스위치(여기서는 'vEthernet (vInternel)')를 선택한다. 가상머신을 가상 스위치에 연결하면 IP가 알아서 잘 할당된다. 여기서는 192.

Continue reading

Author's picture

koyo

컴퓨터할줄모름

Student

Korea