리눅스 기초 명령어
-
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
-
메모리 구조
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 레지스터 구조
-
범용 레지스터
-
논리 연산, 수리 연산에 사용되는 피연산자, 주소를 계산하는데 사용되는 피연산자, 메모리 포인터가 저장됨
-
프로그래머가 임의로 조작할 수 있게 허용(일종의 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. 플래그 레지스터
-
프로그램의 현재 상태나 조건등을 검사
-
상태 플래그, 컨트롤 플래그, 시스템 플래그들의 집합
-
밑의 이미지는 플래그 레지스터의 구조
4. 인스트럭션 포인터
-
수행해야 하는 명령이 있는 메모리 상의 주소가 들어있음
-
다음 실행할 명령어가 있는 현채 code segment의 offset(시작 위치)값을 가짐.
'3. Pwnable (포너블) > 2) 개념 정리' 카테고리의 다른 글
[2020.11.14] 4너블 4ever - 달고나 문서 58p ~ 70p (0) | 2020.11.14 |
---|---|
[2020.11.07] 4너블4ever - 달고나 문서 44p~57p (0) | 2020.11.07 |
[2020.05.19] pw.Sly - 달고나 문서 p44~p57 (0) | 2020.05.23 |
[2020.05.12] pw.Sly - 달고나 문서 p27~p44 (0) | 2020.05.23 |
[2020.04.07] pw.Sly - 달고나 문서 ~p27 (2) (0) | 2020.04.26 |