- NEW초롱이의 하루
- kisa
- 길은 가면, 뒤에 있다
- C언어 예술가
- Zer0 day - Zer0 day
- Information Security
- Secure-EDU
- 앙큼한유채's 일상 Story
- Library of Ezbeat (잠정 폐쇄)
- The Factory
- 안드
- 모후모후의 커뮤니티
- 공학도의 잡다한 시선
- 안드2
- IT속에 코코아
- IP주소검색(whois)
- IP주소검색(좌표포함)
- 소프트웨어 경력 관리
- 해저 케이블 지도
- MAC주소검색
- IANA
- 포트번호검색
- 자신의IP확인
- 웹페이퍼캡처
- 나의패스워드보안등급
- 웹 취약점 분석
- IT용어정리
- GitHub
- 라이브러리 모음
- 웹마당넷
- 시스템콜참고
- BCD 변환
- 보안뉴스
- 코딩도장(C, Python)
- 백준알고리즘
- 코딩테스트 연습
- 웹 사이트 테스트
- 스크립트꾸미기
- ctf대회목록
- 전자신문
- hash 크랙
- CVE
- 도메인등록
- N클라우드
- BugBountyList
- 칼리공식사이트
- CR4FTING BOX
- 아스키코드 변환
- 웹 사이트 통계 및 평가
- PDF변환
- AWS 및 클라우드 정보
- 가상화 및 서버관련
- 티오리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- System
- 그라파나
- 쉘 스크립트
- 프로젝트
- Java
- 쉘 스크립트 기초
- 네트워크
- JSP
- GUI
- Shell script
- RaspberryPi
- nginx
- API
- docker
- ACL
- 안드로이드
- Python
- Linux
- Tkinter
- 라즈베리파이
- centos docker
- LEVIATHAN
- 메소드
- 리눅스
- Android
- 쉘 스크립트 if문
- GPIO
- synology
- 클라우드
- 자바
- Today
- Total
IT창고
System 메모리구조와 어셈블리어 함수 본문
메모리의 구조를 살펴보기 위하여 간단한 출력프로그램을 만들어보겠습니다.
출력을하고 sleep명령어를 사용한 프로그램입니다.
백드라운드로 전환하고 이 프로그램이 실행되는지 프로세스를 확인합니다.
실제로 방금 실행한 프로그램이 있는데 여기에 PID를 확인합니다. proc디렉토리는 가상디렉토리로 리눅스에서는 실행프로세스도 모두 실행파일의 형태로 존재를 합니다. 여기서 방금 실행한 프로그램의 PID는 851인데 /proc/851 디렉토리에 들어가면 파일들이 보입니다. 그중 maps파일은 프로세스에서 사용중인 메모리의 정보를 가지고 있습니다!
이 파일에서 메모리의 정보를 확인할수있으며 커널메모리의 정보도 포함합니다.
08048000-08049000 r-xp 00000000 03:01 980584 /testgsk/9/a.out
08049000-0804a000 rw-p 00000000 03:01 980584 /testgsk/9/a.out
어셈블리어로 넘어가서 어셈블리어는 push명령어로 스택메모리를 할당합니다. 기본적으로 스택은 4byte씩 push됩니다.
이렇게되면 함수의 기능을 구현할수있습니다. 그렇다면 C언어 컴파일러는 어떻게 컴파일이될지 알아보겠습니다.
스택메모리에는 eip 레지스터가 있습니다 eip레지스터는 다음에 들어갈 메모리의 정보를 가지고있는데 eip의 값은 미리 스택메모리 어딘가에 저장해둡니다.
지금 사용하는 어셈블리어는 NASM문법으로 만들었습니다. NASM에서는 eip 레지스터를 직접 사용할수없습니다 대신 ret명령어가 대신합니다.
이번에는 전역변수를 지역변수로 만들겠습니다.
esp레지스터를 옮겨주면 메모리를 사용할수있습니다. esp는 pop을 하기 전까지는 사라지지않습니다. ebp레지스터를 기준으로 합니다. leava명령어로 꼭 메모리를 회수해주어야합니다.
메모리회수에 대해서는 콜러(caller)와 콜리(callee)가 있습니다.
http://cr3denza.blogspot.kr/2015/03/caller-callee.html 블로그에 정리가 잘되어있으며 콜러는 리눅스 콜리는 원도우에서 사용합니다.
'보안 > System' 카테고리의 다른 글
System 디버거(de-bugger) (0) | 2018.01.25 |
---|---|
System main함수의 인자와 시스템콜 (0) | 2018.01.23 |
System 어셈블리어 반복문 (0) | 2018.01.18 |
System 명령어와 분기문 (0) | 2018.01.17 |
System 어셈블리어 사칙연산 (1) | 2018.01.17 |