일반적인 호출 추적에서 RIP를 검사하여 어떤 코드가 충돌했는지 확인할 수 있습니다.
그러나 일부 통화 추적에서는 Bad RIP 값이 표시됩니다.
[ 86.414392] RIP: 0010: (null)
[ 86.415351] Code: Bad RIP value.
전임자:
https://bugzilla.kernel.org/show_bug.cgi?id=202827
무슨 Bad RIP value
뜻인가요?
답변1
"RIP"는 CPU의 64비트 명령 포인터 레지스터입니다. 그 값은 CPU가 실행할 다음 명령어를 가져올 주소를 결정합니다.
(x86 아키텍처에서 원래의 16비트 명령어 포인터는 IP라고 불렸습니다. 아키텍처가 32비트로 확장되었을 때 32비트 폭 액세스를 나타내기 위해 레지스터 이름에 E 접두사가 추가되었습니다. x86_64에서는 전체 64비트 액세스를 나타 내기 위해 R 접두사가 추가되었습니다.
"잘못된 RIP 값"은 명령 포인터 레지스터가 실행 가능한 메모리를 포함하지 않는 주소를 가리키는 것을 의미합니다. 이는 함수를 사용하기 전에 함수에 대한 포인터를 적절하게 초기화하지 않거나 스택에서 함수의 반환 주소를 덮어써 RET
기계어 명령어가 잘못된 주소로 반환을 시도하는 등의 버그를 나타냅니다.