Notice
Recent Posts
Recent Comments
Link
- 참치군
- ?
- stalk.io
- :: 2013년, 스리는 여섯살
- 웹 강좌
- 점프 투 파이썬
- 요니나의 대학생 재테크
- This is CS50
- 애자일 이야기
- isao의 IT,게임번역소
- 소프트웨어 이야기
- Color Scripter
- 어디를 가든지 마음을 다해 가라
- VisuAlgo
- 서울대 평생교육원
- 몽환
- RegExr: Learn, Build, & Test R…
- Hello, Stranger :D
- I Like Exploit
- Z3alous Security Story
- Project Euler
- Blog
- pieces of code
- window 쪼물딱 거리기
- IT - Informatics Alphabet
- rop
- 국제 정보교육센터 I2sec 대구 1기
- This is the moment. :)
- blackmoon
- z3alous는 세상에 소리 z3alous~
- Acord
- FORENSIC-PROOF
- 어셈블리
- Outsider's Dev Story
- Open Tutorials
- 코드라이언
- 컴퓨터 그래픽스와 3D 프린팅
- HACKABILITY
- Lee, Jae-Hong
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Calling Convention
- 창의공학설계
- 피보나치
- 블루블랙
- Visual Studio
- 디버깅
- C언어
- 소켓
- 레지스터
- 알고리즘
- 컴파일러
- 펌
- 공간복잡도
- 파이썬
- BOF
- Debug
- 염색
- Wireshark
- 베이스
- ubuntu
- 발표
- 호출규약
- 추상데이터타입
- 동대구
- Packet
- 시간복잡도
- Hello World
- 버퍼오버플로우
- 탈색
- 오지총
Archives
- Today
- Total
c0smicb0y
함수에서의 레지스터 사용 본문
컴퓨터에서 수행되는 대부분의 연산은 레지스터를 이용하여 이루어지게 된다. 하지만 이 레지스터의 개수는 극히 제한적이기 때문에 함수 내에서 또 다른 함수 호출 시에는 레지스터간의 충돌을 고려해야한다.
우리가 사용하는 Windows의 컴파일러들은 이러한 문제를 피하기 위해 아래와 같은 규칙을 사용하여 함수들간의 레지스터 사용의 충돌을 피하고 있다.
Platform |
Caller-save 레지스터 |
Callee-save 레지스터 |
x86 Windows |
EAX, ECX, EDX, ST(0)~ST(7), XMM0~XMM7 |
EBX, ESI, EDI, EBP |
x64 Windows |
RAX, RCX, RDX, R8~R11, ST(0)~ST(7), XMM0~XMM5, High half of XMM6~XMM15 |
RBX, RSI, RDI, RBP, R12~R15, XMM6~XMM15 |
Caller-save 레지스터(scratch 레지스터 혹은 volatile 레지스터라고 부르기도 함)는 함수 내에서 어떠한 임시적 저장 없이 마음대로 쓸 수 있는 레지스터로서, 레지스터의 사용이 이를 호출한 이전 함수에 어떠한 영향도 미치지 않는 레지스터들이다.
Callee-save 레지스터는 이를 호출한 함수에 영향을 미칠 수 있기 때문에 해당 레지스터를 사용하기 전에 반드시 저장을 하여 놓고 사용해야 하는 레지스터 들이며, 해당 함수가 끝났을 때에는 반드시 이전 값으로 되돌려 주어 이 함수를 호출한 함수에 어떠한 영향을 미쳐서도 안 되는 레지스터들이다.
'프로그래밍 > Windows' 카테고리의 다른 글
Child Process를 디버깅하는 방법 (0) | 2015.11.21 |
---|---|
VC 컴파일러 환경 변수 설정 (0) | 2015.11.13 |
Calling Convention (호출규약) (0) | 2015.11.04 |
ShellExecute vs CreateProcess (0) | 2015.10.02 |
Comments