본문 바로가기

3. Pwnable (포너블)/2) 개념 정리

[2020.9.19] 4너블4ever - 리눅스 기초 명령어 + 달고나 문서 ~p12

리눅스 기초 명령어

  1.  gcc hello world 출력

2.  rwx 권한 

  • rwx 특징

-  r : 읽기 권한, 파일 읽기/디렉터리의 내용을 볼 수 있음

- w : 쓰기 권한, 파일 저장, 삭제/디렉터리에 파일저장, 디렉터리 이름 변경, 삭제 가능

- x : 실행 권한, 파일 실행/디렉터리에 접근할 수 있음

 

출처: https://securityspecialist.tistory.com/40 

  • rwx 권한 변경(chmod - 숫자, 문자)

- 숫자로 바꾸기 chmod [변경될 퍼미션값] [변경할 파일]

- 문자로 바꾸기 chmod [reference] [operator] [modes] [변경할 파일]

- reference(대상):

            u: user의 권한(사용자의 권한)

            g: group의 권한(파일의 group 멤버인 사용자의 권한)

            o: other의 권한(user, group의 멤버가 아닌 사용자의 권한)

            a: all의 권한(위의 셋을 포함하는 모든 사용자의 권한)

- operator:

           + : 해당 권한을 추가한다

            - : 해당 권한을 제거한다

           = : 해당 권한을 설정한데로 변경한다

- modes:

            r : read 권한(읽기)

           w : write 권한(쓰기)

            x : excute 권한(실행)

- : 사용권한없음

출처: http://www.incodom.kr/Linux/%EA%B8%B0%EB%B3%B8%EB%AA%85%EB%A0%B9%EC%96%B4/chmod 

3.  디렉터리 파일 생성 및 삭제

 

- 디렉터리 만들기

          mkdir [디렉터리 이름]

- 디렉터리 지우기

          rm -r [디렉터리 이름]

 

- 파일 만들기

          touch [파일 이름]

- 파일 지우기

          rm -f [파일 이름]

 

4.  절대경로, 상대경로 + cd

 

-  절대 경로

: 리눅스의 디렉터리(파일 저장소)는 계층적 트리 구조임.

: 이 때 파일 시스템이 있는 최상위 디렉터리는 “/” 인데, 최상위 디렉터리부터 파일명에 이르는 경로절대 경로라고 함

 

-  상대 경로

: 현재 자신이 위치한 디렉터리를 기준으로 하는 경로를 상대 경로라고 함

: “./”는 현재 디렉터리, “../”는 상위 디렉터리를 의미함

출처: https://titanic1997.tistory.com/3 

5.  ln - hard&soft link

  • hard link

:    파일을 복사하는 건 아니지만, 같은 파일을 바라보게 하는 것

:    즉, inode가 똑같은 다른 이름의 파일을 생성하는 것임

:    원본 파일을 지워도 hardlink로 된 파일은 그대로임. 왜냐하면 같은 inode를 가지고 있기 때문

:    copy와 다른 점-원본이든 하드링크파일이든 수정되면 두 파일 모두가 바뀌지만, copy된 파일은 다른 inode로 생성      되기 때문에 의존성이 전혀 없음.

ln [원본] [하드링크이름]

 

  • soft link 

:    파일을 바라보게 하는 것

:    inode가 다르며, 원본이 지워지면 무용지물이 됨

:    하드링크와의 차이점은 권한 맨 앞에 “l”이 붙음

ln -s [원본] [소프트링크이름]

출처: https://software-craftsman.tistory.com/16 

 

6. cat 명령어

 

:   파일이라는 표준입력을 모니터라는 표준출력으로 바꿔주는 명령어

:   파일의 내용을 간단하게 출력할 때도 사용하고, 두 개 이상의 파일을 연결해서 출력할 때도 사용함.

 

7.  head/tail 명령어

 

-  head : 파일의 앞부분을 출력해줌

 head만 입력시 입력을 기다리는 상태로 전환. (입력시 바로 출력되며 총 10회까지 입력 및 출력이 되고 종료)

head [파일명] 입력시 이 파일의 첫줄부터 열번째 줄까지 출력

-  tail : 파일의 마지막 줄부터 출력해줌

tail [파일명] 입력시 마지막행의 열변째 윗 행 부터 마지막 행까지 출력

 

8. sudo 명령어

 

-  sudo 명령어는 유닉스 유닉스 계열 운영 체제에서, 다른 사용자의 보안 권한, 보통 슈퍼유저로서 프로그램을 구동할 수 있도록 하는 프로그램

-  root 권한을 부여하여 명령어를 처리하게 해준다. 

sudo [명령어] [옵션]

 8086 Memory Architecture

  1.  메모리 구조

             64bit CPU는 메모리 영역에 주소를 할당할 수 있는 범위가 0 ~ 2 ^64 -1 이다.

             하나의 프로그램(프로세스)를 segment 단위로 묶어 가용 메모리 영역에 저장한다. 

 2.   Segment 

 

(1)  Code Segment

  • instruction (기계어 코드)

  • logical address

  • segment selector로부터 offset(시작위치)를 찾을 수 있다.

           (* physical address(메모리 상 실제 위치) = offset + logical address)

           (* physical address를 알아야 하는 이유 : 명령어를 수행하는 과정에서 메모리                                       

              상의 특정 위치에 있는 명령을 지정해 주어야 한다.)

 

(2) Data Segment

  • 전역 변수 

 

(3) Stack Segment

  • buffer

  • 지역 변수 

  • multiple 스텍을 생성하고 스텍들간 switch가 가능하다.

                     (* 스텍 : 처음 생성될 때 필요한 크기만큼 만들어지고 프로세스의 명령에 의해   

          데이터를 저장해 나간다.

          스텍에 데이터를 저장하고 읽는 과정: PUSH & POP instruction )

 

8086 CPU 레지스터 구조

  1. 범용 레지스터

  • 논리 연산, 수리 연산에 사용되는 피연산자, 주소를 계산하는데 사용되는 피연산자, 메모리 포인터가 저장됨

  • 프로그래머가 임의로 조작할 수 있게 허용(일종의 32비트 변수)

  • 16비트에서는 AX, BX, CX …로 부르고 32비트에서는 E가 앞에 붙어 EAX, EBX, ECX…로 부름

  • 레지스터의 상위 부분은 X대신H넣어 표현하고, 하위 부분은 L을 넣어 표현

  • 각각의 레지스터(EAX, EDX등)은 목적이 있고, 목적대로 사용하는 것이 좋음

  2. 세그먼트 레지스터

  • code, data, stack segment를 가리키는 주소가 들어있음

  • 특정 세그먼트를 가리키는 포인터 역할

            밑의 사진과 같이  CS 레지스터 > code segment

                     DS, ES, FS, GS 레지스터 > data segment 

                                          SS 레지스터 > stack segment 

  •  이 세그먼트 레지스터가 가리키는 위치를 바탕으로 원하는 데이터와 명령어를 끄집어냄 





   3.  플래그 레지스터

  • 프로그램의 현재 상태나 조건등을 검사

  • 상태 플래그, 컨트롤 플래그, 시스템 플래그들의 집합

  • 밑의 이미지는 플래그 레지스터의 구조



플래그 레즈스터 Flag

  4.  인스트럭션 포인터 

  • 수행해야 하는 명령이 있는 메모리 상의 주소가 들어있음

  • 다음 실행할 명령어가 있는 현채 code segment의 offset(시작 위치)값을 가짐.