2011-05-03 3 views
4

프로그램에서 정적 콜 그래프 분석을 사용하면 어떤 문제점을 발견 할 수 있습니까? FxCop은 정적 콜 그래프 분석을 사용합니다.이 기법을 사용하면 어떤 문제점이 있습니까? 지식의 나의 부족에 대한정적 콜 그래프 분석은 어떤 문제점을 해독합니까?

http://msdn.microsoft.com/library/bb429476.aspx
http://en.wikipedia.org/wiki/Callgraph

사과, 나는 구글을 통해 일부 정보를 찾았지만이 크게 불완전 것을 우려하고있다. 감사!

답변

1

이것은 내가 찾은 것입니다 :

전화-그래프는 프로그램 실행, 권장 지침의 위반, 가능한 코드 주입 공격에 관해서 문제를 감지하는 데 사용됩니다.

다양한 메서드 중에서 호출 관계의 그래프를 작성하면 특정 메서드가 호출되거나 특정 메서드가 호출되는 방식으로 특정 시점에 문제가 발생할 수있는 곳을 쉽게 알 수 있습니다. 프로 시저/함수가 코드 모듈성 유지와 같은 지침을 위반하는 경우를 쉽게 볼 수 있습니다. 악의적 인 코드가 호출하는 관계와 그것들이 어떻게 구조화되어 있는지에 따라 특정 지점에서 악성 코드가 어디에 주입 될 수 있는지 쉽게 알 수 있습니다. 이러한 방식으로, 콜 그래프는 정적 분석에 컨텍스트를 제공하여보다 정확한 결과를 산출합니다.

FxCop은 정적 콜 그래프를 사용하기 때문에 위의 내용을 어느 정도 추측 할 수만 있습니다.

4

그 자체로 콜 그래프가 바로 그 것이다. "잘못된"콜 그래프가 없습니다 (재귀를 금지하는 스타일 검사가없는 경우).

실제 문제는 프로그램의 한 지점에서 코드가 문제가되는 방식을 이해하는 데있어 일반적으로 세계의 모양 (어떤 데이터 구조가 살아 있는지, 어떤 값을 포함 할 수 있는지, 어떤 관계가 있는지 코드 포인트가 활성화 된 순간에 콜 그래프는 실행이 원하는 코드 포인트에 어떻게 도달 할 수 있는지 보여주고 콜 그래프 경로의 모든 코드는 코드 실행 컨텍스트를 설정합니다. 이를 통해 정적 분석기는보다 정확한 답변을 제공하는 "상황에 맞는"분석을 생성 할 수 있습니다.

이렇게하면 두 번째 문제가 발생합니다. 정확한 호출 그래프를 얻는 방법은 무엇입니까? A에서 B의 직접 호출이있는 경우 "A는 B를 호출합니다"라고 적어 두는 것이 쉽고 정확한 호출 그래프 사실이라고 생각합니다. 그러나 A가 간접 포인터를 통해 전화를 걸면 (갑자기 가상 메서드를 호출 할 수 있습니까?) 갑자기 A가 전화하는 사람이 갑자기 명확하지 않습니다. 당신은 결국 A-might-call-B1, A-might-call-B2, ...로 끝납니다. A가 실제로 실제로 호출하는 것은 A가 실행되는 상황에 달려 있습니다 ... oops, 당신은 제조 할 콜 그래프가 필요합니다. 콜 그래프. 좋은 소식은 아래에서 콜 그래프를 작성한다는 것입니다. "이것이 사실임을 확실히 알고 있으므로 확실해야합니다." 분석가가 알아낼 수없는 곳에서는 일반적으로 보수적 인 추측을합니다. ("이러한 모든 호출이 가능할 수도 있지만, 배제 할 수는 없습니다.") 그 보수주의는 정적 분석기의 정확성을 좌우하는 주요 원인 중 하나입니다.