int main(void) {
register int rsp asm("rsp");
int temp=rsp;
printf("\n (rsp)%p \n", rsp);
printf("\n (temp)%p \n", temp);
printf("\n (void*)(rsp)%p \n", (void*)rsp);
printf("\n (void*)(temp)%p \n", (void*)temp);
return 0;
}
출력 :
(rsp)0xffffcbe0
(temp)0xffffcbe0
(void*)(rsp)0xffffffffffffcbe0
(void*)(temp)0xffffffffffffcbe0
난이 바보 같은 질문이다 생각하지만, 왜 주조 후 포인터 변경의 가치는 무엇입니까? 다른 유형으로 캐스트하려고했는데 항상 같은 오프셋을 얻습니다. 감사합니다.
32 비트 INT 비트 및 64 비트 포인터는, 아마도 – 4386427
나는 UB – 4386427
원인 printf' 처음 두가'당신은 rsp''의 값을 인쇄하고'temp' 사용하여 '%의 p'하고 확실 해요 하지만 그들은 포인터가 아닙니다. 그러므로 네 개의 모든 printf는 정의되지 않은 동작을합니다. 그들의 주소를 대신 출력하십시오 ('& rsp','& temp' 등). – Peter