'64bit'에 해당되는 글 1건

  1. 2006/09/22 x64 primer

x64 primer
2006/09/22 09:15

64bit는 64bit에만 설치가 가능하고(32bit 응용프로그램의 사용은 가능하다) Intel의 Itanium™과 32bit 및 64bit 시스템에 설치가 가능한 (당연히 32bit, 64bit 프로그램 실행이 가능하다) x64라고 알려진 Intel의 EM64T, AMD의 AMD64 이 있다.

PE헤더 구조의 변화
Win64의 포맷은 PE32+로 불린다. 두드러진 가장 큰 변화는  기존 예외처리 방식이 예외처리 정보를 스택에 추가되었다면 Win64는 테이블 기반의 예외 처리(exception handling)이다. 단점은 함수테이블 찾는것이 링크드 리스트보다 시간이 걸리는 것이고 장점은 매번 스택에 예외처리 블럭을 생성하는 오버헤드가 없다는 점이다.

데이터 실행 보호(Data Execution Protection - DEP) 기능 추가
고의적인든 아니든
버퍼 오버런(buffer overrun)이 원래는 데이터 저장을 목적으로 했던 메모리 블락을 CPU에서 명령어로 인식하고 실행해 버리는 결과가 발생하곤 했었습니다. 이 DEP의 도움으로, 운영체제는, 의도한 코드 영역의 경계를 명료하게 설정할 수 있고, 이 의도된 경계를 벗어나는 코드 실행에 대해서는 CPU가 일종의 덫을 놓을 수 있게 되었습니다. 이 기능은 윈도우를 악의적인 공격에 덜 취약하게 만드는데 큰 도움을 줄 수 있다.
윈도우 XP sp2 부터 기능이 추가되었고 시스템등록정보->고급->성능에서 볼수 있다. 보다 자세한 내용은 아래 링크 참조.
http://www.microsoft.com/technet/prodtechnol/winxppro/ko/maintain/sp2mempr.mspx

PatchGuard기술 추가
syscall 테이블이나 인터럽트 디스패치 테이블(interrupt dispatch table-IDT)를 변경하는 사용자 프로그램이나 드라이버들은 보안상의 문제와 잠재적인 안정성의 문제를 일으켜 왔는데 x64의 내부에서는, 그러한 방식으로 커널의 메모리를 지원되지 않는 방식으로 바꾸는 방식이 허용되지 않습니다. 이러한 것을 강화시키는 기술이 PatchGuard 입니다. 이 기술은 중요한 커널 메모리의 위치가 바뀌는 것은 커널 모드의 쓰레드에서 항상 감시합니다. 그리고 메모리가 바뀌면, 시스템은 버그체크를 통하여 멈춰 버립니다.

함수 호출 방식(Calling Convention)의 변경
Win64의 경우는 하나의 함수 호출 방식이 존재합니다. fastcall 과 유사한 방식인데 처음의 4개의 인자는 특별히 디자인된 레지스터(RCX: 1 번째 정수 인자 RDX: 2 번째 정수 인자 R8: 3번째 정수 인자 R9: 4번째 정수 인자)에 전달되고 나머지는 스택으로 전달됩니다.  게다가 x64 코드 생성기는 (파라미터의 입장에서 보면) 얼마든지 큰 대상 함수에서도 쓸 수 있을 만큼 충분한 스택을 예약해 웬만한 경우가 아니면 RSP를 조작하는 경우가 없을겁니다.
리턴값은 Win32에서와 마찬가지로 RAX에 저장됩니다.

그외에 사항으로는

링커의 기본주소 변경 4G 이상으로 설정
64비트 포인터는 8바이트 이지만 int,long, DWORD는 4바이트
레지스트터 이름 변경 RAX, RBX등으로, 기존 EAX, AX등 사용가능



Visual Studio® 2005 에서 x64 어플리케이션의 개발
추가중...


참조
Matt Pietrek의 x64 primer 원본(
Matt Pietrek의 x64 primer 번역본)
64비트 윈도우 개괄

2006/09/22 09:15 2006/09/22 09:15
TAG , ,
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다