일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- architecture
- react
- instruction
- javascript
- DB
- html
- control
- web
- MacOS
- MIPS
- for
- github
- function
- Pipelining
- Java
- python
- Algorithm
- DATAPATH
- DoM
- system
- mysql
- while
- CSS
- Linux
- computer
- php
- XML
- DS
- data structure
- Class
- Today
- Total
목록전체 글 (395)
YYYEJI
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/PkXCD/btrHZVWwGof/dts4XCy1638sC5SpL7WQg1/img.png)
스택 프레임에는 함수의 영역을 표현하는 부분이 있습니다. 함수가 시작할 때는 프롤로그(Prolog), 끝날 때에는 에필로그(Epilog)가 실행됩니다. 함수의 프롤로그와 에필로그에 대해서 자세히 알아보겠습니다. 함수의 프롤로그는 push ebp mov ebp, esp 의 구조를 가지고 있습니다. 함수 프롤로그는 함수가 호출되면 그 함수의 영역을 설정하기 위한 것입니다. 함수가 시작되면 스택프레임이 형성되고 그 시작을 함수 프롤로그라고 합니다. 함수의 에필로그는 leave (mov esp, ebp pop ebp) ret (pop eip jmp eip) 의 구조를 가지고 있습니다. 함수 에필로그는 함수가 종료되어 자신을 호출했던 함수로 돌아갈 때 스택을 정리하기 위한 것입니다. ◡̈
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/pjHY0/btrHZq3BMbc/1sXP8RScyNiji8sAcNqhA1/img.png)
UAF 프로그램이 실행되면 실행에 필요한 정보들이 Memory 영역에 올라가게 되는데 Code영역, Data영역, Stack영역, Heap영역이 있습니다. Code영역 - 프로그램의 컴파일된 기계어 코드가 올라가는 곳 Data영역 - Global variable과 Static variable이 할당되는 곳 Stack영역 - Local variable과 Parameter가 저장되는 곳 Heap영역 - 빈 공간으로 필요에 따라 동적으로 메모리를 할당/해제하는 곳 Use After Free 줄여서 UAF라 부릅니다. Heap 영역에서 할당된 공간(malloc)을 free로 영역을 해제하고, 메모리를 다시 할당시 같은 공간을 재사용 하면서 생기는 취약점입니다. ◡̈
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bgMMwJ/btrHTrPXzgV/rBeZjt9UGkwl5dZPtCMzs0/img.png)
리눅스를 사용하게 되면 패키지를 관리해야 하는데 관리를 쉽게 도와주는 tool이 있습니다. apt-get / get(advanced package tool) - 데미안 or Ubuntu 에서 사용합니다. yum(Hello dog updater, modified) - 레드헷 or CentOS에서 사용합니다. 동작 RedHat or CentOS Debian or Ubuntu 패키지 설치 yum install 패키지명 apt install 패키지명 apt-get install 패키지명 패키지 제거 yum remove 패키지명 apt remove 패키지명 apt-get remove 패키지명 업데이트 확인 yum check-update apt-get -s upgrade (패키지 업그레이드) apt-get upda..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dqGf4V/btrHEeP8gRn/41ObuKqs7VUIFx0HK1Ke8k/img.gif)
gdb는 디버깅(Debugging)을 목적으로 프로그램 내부의 상황을 알 수 있게 해주는 디버거(Debugger)입니다. 우선 gdb를 실습하기 전에 도커를 다운 받아주세요! [Docker] MacOS에서 Docker 시작하기 Docker(도커)란? 컨테이너 기반의 오프소스 가상화 플랫폼이다. Image(이미지)란? 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것이다. 상태값을 가지지 않고 변하지 않는다. Container( yyyeji.tistory.com 도커가 다운이 되었다면 바로 시작하도록 하겠습니다! 아래 명령어를 통해 도커 계정에 로그인합니다. $ docker run -it —name bufferoverflow ubuntu:20.04 /bin/bash 아래 명령어를 하나씩 입력해서 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dSbmAK/btrHDBqaSSA/iCT4cD6VlxfSV8YMJWKjAK/img.png)
리눅스도 다른 운영체제처럼 파일을 작성하거나 수정하기 위한 편집기가 필요합니다. 다양한 편집기 중에서 오늘은 vi에 대해 알아보겠습니다. vim/vi에 대해 조금만 더 설명을 해드리겠습니다. vi은 명령이 매우 단순하여 빠르게 편집할 수 있어서 널리 사용되는 화면 단위 편집기입니다. 글자를 입력하고 수정하는 방법이 일반 GUI 편집기와는 다르기 때문에 다소 불편하실 수 있습니다. 밑에 나오는 설명을 통해서 조금이라도 vim/vi에 익숙해졌으면 좋겠습니다. vim/vi 주요 모드에는 3가지가 있습니다. 입력 모드(insert mode) - 입력한 키를 내용으로 처리하는 모드 시각 모드(visual mode) - 입력한 키를 명령으로 해석하는 모드 마지막 행 모드(command mode)..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/m4Wah/btrHsEPvDvL/4sjzeEljyzH4l6Fo3RBvhK/img.png)
cat - 파일 내용 출력 $ cat etc/hosts -n 행 번호를 붙여서 출력 more - 파일 내용을 화면 단위로 출력 $ more /etc/services Space bar - 누르면 다음 화면 출력 Enter - 누르면 한 줄씩 스크롤됨 ./문자열 - 해당 문자열을 찾아 이동 q - more 명령어 종료 less - 파일 내용을 화면 단위로 출력 $ less /etc/services j - 한 줄씩 다음 행으로 스크롤됨 k - 한 줄씩 이전 행으로 스크롤됨 Space bar, Ctrl + f - 다음 화면으로 이동 Ctrl + b - 이전 화면으로 이동 tail - 파일 뒷부분의 몇 행을 출력 $ tail /etc/services +행 번호 지정한 행부터 끝까지 출력..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b2dq6m/btrHrNFT87c/fX1zDoakvyCdO11RevnoGK/img.png)
pwd(print working directory) - 현재 디렉터리를 확인 $ pwd cd(change directory) [directory_name] - 지정한 디렉터리로 이동 $ cd Desktop ls(list) - 디렉터리의 내용 출력 $ ls -a 숨김 파일을 포함하여 모든 파일의 목록을 출력 -d 디렉터리 자체의 정보를 출력 -i 첫 번재 행의 inode 번호를 출력 -l 파일의 상세 정보를 출력 -A .(마침표)와 ..(마침표 두 개)를 제외한 모든 파일의 목록을 출력 -F 파일의 종류를 표시 (* - 실행파일, / - 디렉터리, @-심벌릭 링크) -L 심벌릭 링크 파일의 경우 원본 파일의 정보를 출력 -R 하위 디렉터리의 목록까지 출력 (recursive) -al 숨..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/TtkaB/btrHwlacFAI/Yb2Sa00SKbuh6nVW6NRlvK/img.png)
시스템과 관련된 정보와 하드웨어 같은 장치를 모두 파일로 관리하기 때문에 파일과 디렉터리를 이해하는 것은 중요하다. 파일은 관련 있는 정보들의 집합이고 리눅스에서는 파일을 효과적으로 관리하기 위해 디렉터리를 사용하는데 디렉터리는 계층 구조를 가지고 있다. 일반 파일 (Regular file) 데이터를 저장하는데 주로 사용 각종 텍스트 파일, 실행 파일, 이미지 파일 등 텍스트 파일은 내용을 확인하는 명령으로 내용 확인이 가능하며, 문서 편집기를 사용하여 내용을 보거나 편집할 수 있음. 실행 파일이나 이미지 파일의 경우 데이터가 바이너리 형태로 저장되어 바이너리 파일이라고 하는데 바이너리 파일은 특정 응용 프로그램이 있어야 내용을 확인할 수 있음. 디렉터리 (Directory) 리눅스에..