"자발적 컨텍스트 전환"이란 정확히 무엇입니까?

"자발적 컨텍스트 전환"이란 정확히 무엇입니까?

바이너리 파일이 있고 그 파일의 비밀번호(할당)를 해독해야 합니다. 함수도 제공됩니다(바이너리의 일부). 이 함수는 입력 문자열을 문자별로 올바른 비밀번호와 비교하고 문자가 틀리면 즉시 false를 반환한다는 것을 보여줍니다. 이는 시간이 누출되고 예를 들어 올바른 비밀번호 길이를 알고 있기 때문에 안전한 접근 방식이 아닌 것 같습니다. 그런데 선생님이 결과(맞음/틀림)를 반환하기 위해 무작위 타이머를 추가했기 때문에 우리가 조금 어려워졌습니다...

어쨌든 리버스엔지니어링으로 성공적으로 해냈고 올바른 비밀번호를 얻었습니다. 이제 명령줄에서 사용하고 있습니다.

/usr/bin/time -v ./program_name enter_password

이 명령을 통해 시스템 시간, 교환, 실행 시간 등과 같은 많은 정보를 얻었습니다. 그러나 나에게 가장 흥미로운 점은 "자발적 컨텍스트 전환"입니다. 왜냐하면 입력한 암호 문자가 더 정확할수록 "자발적 컨텍스트 전환"이 줄어들기 때문입니다!

잘못된 문자를 더 많이 입력할수록 "자발적 컨텍스트 전환"이 더 많이 발생합니다.

명령을 입력하고 문자를 입력하고 "자발적 컨텍스트 전환"을 관찰하여 비밀번호를 해독하는 데 거의 2시간이 걸렸습니다. 문자가 정확할 때마다 자발적 컨텍스트 전환이 1씩 감소합니다.

내 질문은 "자발적 컨텍스트 전환"이 정확히 무엇입니까? 비밀번호를 해독하는 데 왜 도움이 되나요?

답변1

이것매뉴얼 페이지time자발적 및 비자발적 컨텍스트 전환의 개념을 설명하십시오.

The resource specifiers [...] are:
   c      Number of times the process was context-switched involuntarily
          (because the time slice expired).
   w      Number of times that the program was context-switched voluntarily, 
          for instance while waiting for an I/O operation to complete.

(인용문은 내 데비안 시스템에서 인용한 것이며 링크된 매뉴얼 페이지의 텍스트는 약간 다릅니다)

즉, 프로세스가 할 일이 없어서(외부 이벤트가 발생하기를 기다리는 동안) CPU를 떠나는 경우 컨텍스트 전환은 자발적입니다. 비자발적, 일부 계산을 계속하고 싶지만 운영 체제가 다른 프로세스로 전환해야 한다고 결정하는 경우.


이들 중 비밀번호 검사기와의 관련성은 해당 프로그램이 실제로 수행하는 작업에 따라 달라집니다.

주석에 링크된 소스 코드에서 usleep()일치하지 않는 각 문자에 대해 프로그램이 한 번 호출된 후 다음 문자에 대해 비교 루프를 계속하는 것을 볼 수 있습니다. 잠자는 것은 CPU를 해제하는 것과 마찬가지로 자발적이므로 이러한 호출은 일치하지 않는 각 문자에 대한 자발적인 컨텍스트 스위치로 나타납니다.

Linux에서는 를 사용하여 호출을 볼 수도 있습니다 strace.

최종 지연은 T * (rand() % 3)상수의 0, 1 또는 2배인 임의의 절전 모드에서 발생합니다. 이는 매우 대략적이므로 동일한 비밀번호를 사용한 여러 번의 시도에 대한 평균을 쉽게 계산할 수 있습니다.

관련 정보