2014-10-10 4 views
-2

내 프로그램의 세그먼트 오류에 대한 추론을 이해하려고합니다. 종료 시스템 호출을 의도적으로 주석 처리하여 프로그램이 종료되지 않도록합니다. 내 프로그램의 마지막 코드 줄입니다. 세분화 오류의 정확한 이유는 무엇입니까? 종료 코드에 대한 책임이있는 코드의 행 :세그먼트 화 오류 이유 어셈블리

int $0x80 #make the system call

+0

당신은 무엇을 생각하니? !! 11 어서. – unwind

+1

@unwind 요점은 프로그램이 작동한다는 것이며 종료 호출없이 작동하지 않는다는 것을 알고 있습니다. 전화가 없을 때 무슨 일이 일어나는지 알고 싶을뿐입니다. – akalikin

답변

3

메모리에는 항상 값이 포함되며 프로세서는 해당 바이트를 명령어로 실행하려고 시도합니다. 바이트가 의미가 없거나 (잘못된 명령) 명령 자체가 오류를 일으킬 수 있습니다. 오류를 일으키지 않는 올바른 지침이있는 경우 결국 매핑되지 않은 페이지에 도달하게되므로 오류가 발생합니다. 극히 운이 좋으면 쓰레기 코드에 무한 루프가 생길 수 있습니다 (또는 종료 syscall;)).이 경우에는 오류가 발생하지 않습니다.

3

이유는 결함 가능성이 그 실행에 계속입니다

편집은 (I 코드가 여기에 관련이 있다고 생각) 실행에 유효하지 않거나 실제 코드를 포함하지 않고 임의의 가비지를 포함하는 메모리. 코드로 실행될 때 임의의 쓰레기가 차례로 segfault를 제공하는 조작을 생성 할 수 있다고 생각하는 것은 꽤 쉽습니다.