2017-11-16 15 views
0

포인터가 ptr이고 주소가 커널 스택 공간에 있습니다.산술 및 마스크를 사용하여 주소를 반올림하는 방법은 무엇입니까?

ptr을 사용하여 프로세스 설명자 주소로 보내고 싶습니다.

커널 스택 공간과 프로세스 디스크립터 크기가 함께 8kb이기 때문에 프로세스 디스크립터의 주소로 이동하려면 ptr의 주소를 반올림해야합니다.

내가 매크로에서 그렇게 할 수있는 방법

(커널 스택과 프로세스 기술자가있는 블록 (8)의 곱이다 단축 번호로 시작)? 어떤 마스크를 사용해야합니까?

+1

커널 모드 프로그래밍 그것이 무엇 인 표준 정수에 그것을 선택한 이유

#include <stdint.h> #define MASK 0x01FF int a = 0; intptr_t b = (intptr_t)&a; b &=~MASK; int * c= (int *)b; 

inptr_t는 포인터를 저장하기에 충분히 큰 유형, 먹으 렴 단 하나의 32 비트 아키텍처 (중복 질문 당)에 대한 개인용 롤업 오두막 (hand-rolled bodge)은 대기중인 유지 관리 문제입니다. – JdeBP

답변

0

나는 같은 것을 할 것입니다 : 내가