Linux 스택 경계를 얻는 방법은 무엇입니까?

Linux 스택 경계를 얻는 방법은 무엇입니까?

예외 처리기를 사용하지 않고 시스템 호출을 사용하여 Linux 스택의 주소 경계를 얻는 방법은 무엇입니까? getrlimit를 사용하여 스택 크기를 얻을 수 있지만 스택이 시작되거나 끝나는 위치는 알려주지 않습니다. RSP는 스택 내의 위치를 ​​가리키므로 얼마나 많이 사용되었는지 또는 사용 가능한지 확인할 수 없습니다. msync를 사용하면 커밋된 콘텐츠를 찾을 수 있지만 아직 건드리지 않은 영역은 찾을 수 없습니다. 내 어셈블리 코드에는 한계에 접근할 수 있을 정도로 스택을 너무 많이 밀어넣지 않았는지 확인하는 검사를 포함하고 싶습니다.

답변1

불행히도 Linux 사용자에게는rusage 구조의 ru_isrss 요소유지되지 않습니다. 대략적인 스택 사용량을 얻기 위해 내가 수행한 해결 방법은 다음과 같습니다.

1/가능한 프로그램 시작 부분에 가깝게 지역 변수를 선언하고 해당 주소를 전역적으로 예약합니다.

2/ 스택 사용량을 확인해야 할 때마다 호출할 수 있는 함수가 있는데, 이는 단순히 다른 지역 변수를 선언하고 해당 주소와 1/에 저장된 주소의 차이를 계산하는 것입니다.

그런데 먼저 플랫폼에서 스택이 커지거나 작아지는지 확인하고 싶을 수도 있습니다.

관련 정보