· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Detect Diff Time

변경된 시간검출

작성자: 조재혁 (minzkn,Mminzkn_at_infoeq.com)

개요

  • 특정 프로세스가 외부로부터의 기준시간 참조 없이 시간이 수정된것을 감지하기 위한 방법을 모색해봅시다.
  • 필자가 사용하는 방법이 절대적인것이 아니고 그저 꽁수라고 보이는 것이기에 보다 좋은 방법을 알고 계신분은 주저없이 이곳에 적어주시면 많은 분들에게 도움이 될듯 합니다.

UPTIME과 System clock과의 시간차


  • 시간이 변경되더라도 Uptime은 항상 시간을 유지한다는 점에 착안하여 uptime과 System clock간의 시간 간격을 기록해두고 시간이 변경되면 System clock만이 변경되므로 그 시간차가 벌어지거나 좁혀지는 것을 알수 있게 될겁니다. 필자는 이러한 점을 착안하여 다음과 같은 코드를 생성해봤습니다.

/* By JaeHyuk Cho <minzkn@infoeq.com> */
int CheckTime(void)
{
 const time_t c_TimeWidth = 2; /* 시간 오차율 : 적어도 1초 이상은 되어야 되겠죠..? */
 static time_t s_DiffTime = (time_t)(0);
 time_t s_SystemTime, s_CurrentDiffTime;
 time((time_t *)(&s_SystemTime));
 if(sysinfo(&s_SystemInfo) == 0)
 {
  if(s_DiffTime == (time_t)(0))
  {
   s_DiffTime = s_SystemTime - s_SystemInfo.uptime;
   return(0); /* 첫번째 load */
  }
 }
 s_CurrentDiffTime = s_SystemTime - s_SystemInfo.uptime;
 if( (s_CurrentDiffTime - c_TimeWidth) < s_DiffTime && (s_CurrentDiffTime + c_TimeWidth) > s_DiffTime)return(0); /* 변경 안되었음 */
 return(1); /* 변경되었음 */
}


  • 문제점: 위의 코드는 일단 문제점이 초단위의 해상도밖에 검출하지 못합니다. 보다 좋은 방법을 알고 계신다면 꼭 리플 달아주세요.
    • 제안: times 를 이용한 1000/HZ 단위 해상도까지의 검출을 모색가능. 단, times 가 jiffies 에 의존하는 arch 가 아닌 경우에는 사용불가.

마지막으로



ID
Password
Join
True happiness will be found only in true love.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2008-04-23 14:01:34
Processing time 0.0033 sec