세그멘테이션 오류에서 위키 백과를 읽고 다음 코드와 문을 사용했습니다. 이 코드가 포함 된 프로그램이 컴파일 될 때읽기 전용으로 표시된 프로그램 실행 파일
int main(void)
{
char *s = "hello world";
*s = 'H';
}
는 문자열 "안녕하세요 세계는"프로그램 실행 파일의 섹션에 배치 읽기 전용으로 를 표시; 로드 될 때 운영 체제는 다른 문자열 및 상수 데이터를 메모리의 읽기 전용 세그먼트에 넣습니다. 이 실행되면 변수 s가 문자열의 위치를 가리 키도록 설정되고 변수를 통해 H 문자를 메모리 에 쓰려고 시도하여 세그먼트 오류가 발생합니다. 이러한 프로그램을 컴파일러와 컴파일 할 때 컴파일 타임에 읽기 전용 위치 할당을 확인하지 않습니다.
내 질문에 대한 파일 사용 권한이 있습니다. 즉, 실행 파일을 읽기 전용으로 표시하고 읽고 쓸 때 등의 질문이 있으십니까?
파일 사용 권한에 대해 모두 알고 싶습니다. 명시 적으로 파일 사용 권한을 변경할 수 있습니까?
파일이라고하면 여기에 스택을 의미합니까? – noMAD
실행중인 프로그램 내의 파일 액세스 권한과 메모리 액세스 권한은 관련이 없습니다. 실행 가능 프로그램을 쓰기 가능으로 표시해도 텍스트 페이지는 읽기/쓰기로 매핑되지 않습니다. 반대로, 읽기 전용으로 표시해도 데이터 페이지가 예기치 않게 읽기 전용으로 매핑되지 않습니다. – geekosaur
파일 권한이 어떻게 관련이 있는지 잘 모르겠습니다 - 위키 문서는 메모리 * 페이지의 권한을 참조합니다. POSIX 시스템에서'mprotect() '와 같은 시스템 고유의 방법으로 페이지 권한을 변경할 수 있습니다. – FatalError