-fno-stack-protector의 용도는 무엇입니까?
저는 C에서 신청서를 작성했고, 무엇이 목적인지 이해하려고 노력하고 있습니다.-fno-stack-protector
컴파일할 때 명령을 입력합니다.특정 응용 프로그램의 경우 버퍼 오버플로로부터 보호하는 측면에서 이 명령을 사용하든 사용하지 않든 아무런 차이가 없습니다.
인터넷에서 읽었어요.-fstack-protector
그리고.-fno-stack-protector
명령어는 스택 스매싱 보호기를 각각 활성화하고 비활성화하지만, 내가 직접 응용 프로그램을 컴파일하는 경우 보호기를 사전에 활성화하려면 어떻게 해야 합니까?명령어의 사용은 응용 프로그램이 실행 중인 시스템에 따라 달라질 수 있습니까?
표준/재고 GCC에서는 스택 프로텍터가 기본적으로 해제되어 있습니다.그러나 일부 리눅스 배포판에서는 기본적으로 GCC를 켜도록 패치를 적용했습니다.Makefile이 스택 보호기를 특별히 비활성화하지 않는 한 표준 사용자 공간 라이브러리에 연결되지 않은 모든 파일을 컴파일하는 기능이 손상되기 때문에 이는 다소 위험합니다.커널이 빌드되고 있음을 감지하고 비활성화하기 위해 이 해킹이 포함된 배포판이 GCC에 추가적인 해킹을 추가한 것을 제외하면 Linux 커널 빌드도 중단됩니다.
로 컴파일할 경우-fstack-protector
그러면 코드가 체크를 설정하고 실제로 사용자가 스택에 있는 동안 스택을 덮어썼는지 여부를 확인하는 동안 스택에 할당된 공간이 조금 더 많아지고 함수에 들어가고 돌아올 때 오버헤드가 조금 더 많아집니다.
그것은 당신의 신청에 변화를 줄 것입니다.활성화된 경우 스택 오버플로 공격을 신속하게 차단합니다.코드에 함수 호출이 없는 경우에만 프로그램이 영향을 받지 않습니다(그리고 일반적으로 쓰기 때문에).main()
그리고 그것은 시작 코드에 의해 호출되는 함수이며, 그것은 당신의 프로그램에 영향을 미칠 것입니다.)그러나 스택 오버플로 공격은 사용할 수 있는 유일한 공격이 아니므로 만병통치약이 아닙니다.그러나 그것은 제한된 비용으로 유용한 보호입니다.
보호 기능은 시스템 자체에 의존하는 것이 아니라 사용 중인 컴파일러 버전에 따라 다릅니다.
스택 보호기는 컴파일러에 의해 생성되어 프로그램에 배치되는 코드입니다.프로그램에서 호출되는 외부 프로그램이나 시스템 호출이 아닙니다.
기본 컴파일러 설정과 일치하는 옵션이 유용할 수 있는 시간은 다음과 같습니다.
수정하려는 복잡한 구성을 가진 빌드 시스템을 사용하는 경우.메이크 파일의 미로에서 사용할 수 있는 위치를 파악하는 대신
fstack-protector
(예를 들어) 옵션 목록의 끝에 있는 추가 옵션을 쉽게 전달할 수 있습니다.가 GCC를 둘 다 볼fstack-protector
그리고.fno-stack-protector
옵션 집합에서 명령줄의 마지막 옵션이 적용됩니다.다른 때는 이런 종류의 것이 유용할 수 있습니다(그것은 적용되지 않는 것 같습니다).
-fstack-protector
그러나)는 '하위 메뉴'를 여러 개 켜는 옵션이 있는 경우입니다.예를 들어, -O2를 설정하면 여러 개의 스위치가 켜집니다.-fxxx
옵션을 할 수 .-O2
대부분은 GCC의 엄격한 앨리어싱 최적화를 원하지 않습니다. 지할수있다니를 지정할 수 .-fno-strict-aliasing
특정 옵션을 기본 설정으로 되돌립니다.(참고: 이 경우는 위의 경우와 매우 동일합니다.)
이 기능을 해제하려는 세 가지 이유가 있습니다.
- 이 문제가 발생할 수 있는 공유 라이브러리를 구축하고 다른 함수가 스택에 대해 가정합니다.
- 당신은 성능에 대해 걱정하고 있습니다.
- 취약한 소프트웨어를 구축하려고 합니다.이는 CTF(Capture The Flag) 등에서 매우 자주 발생합니다. Protostar를 구축하여 취약하지 않은 공격을 입증하려는 경우와 마찬가지입니다.
언급URL : https://stackoverflow.com/questions/10712972/what-is-the-use-of-fno-stack-protector
'programing' 카테고리의 다른 글
Git를 사용하여 로컬과 원격 간의 변경 사항을 찾는 방법 (0) | 2023.09.01 |
---|---|
SQL의 인벤토리 평균 비용 계산 (0) | 2023.09.01 |
새 DB가 훨씬 느림 (0) | 2023.09.01 |
스크롤로 AJAX 기능이 작동하지 않습니다. (0) | 2023.09.01 |
Ajax 처리에 "잘못된 JSON 기본값"이(가) 있습니다. (0) | 2023.09.01 |