2012-09-05 3 views
3

저는 LLVM을 매우 새로 도입했습니다.LLVM에서 특정 변수의 모든 사용 찾기

나는 taint 분석과 비슷한 것을 수행하기 위해 llvm Pass를 작성하려고한다. 필자는 Defined use chain을 통해 사전 정의 된 변수를 반복해야한다. 예를 들어, C 프로그램의 창피 어셈블리 코드

@someVar = external global %struct.something 

다음이 함수 위에서 발견하고 내 함수 내에서이 @someVar의 모든 사용을 찾고 싶어요. 어떻게해야합니까? 함수 패스를 작성하기 시작했습니다. 하지만이 특정 식별자의 Def Use Chain을 얻으려면 어떻게해야합니까?

나는 이것을 LLVM 설명서 http://llvm.org/docs/ProgrammersManual.html#iterate_chains에서 발견했습니다.

하지만이 컨텍스트에서 어떻게 사용할 수 있는지 잘 모르겠습니다.

피씨. 내 질문이 모호하거나 순진하다면 죄송합니다. 나는 초보자이며 어떤 정보가 적절한 지 알지 못합니다.

답변

5

나는 기본적으로 F 당신이 체인 나는 이것을 이해

+0

을 발견하고자하는 값이 링크

Function *F = ...; for (Value::use_iterator i = F->use_begin(), e = F->use_end(); i != e; ++i) if (Instruction *Inst = dyn_cast<Instruction>(*i)) { errs() << "F is used in instruction:\n"; errs() << *Inst << "\n"; } 

에서 코드를 붙여 넣기하고있다. 내 질문은 내가 어떻게 변수의 가치를 얻을 것 같아요. 나에게 명확하지 않다. – ash

+2

@ash 당신이 준 코드는 명령입니다. 그냥이 값을하십시오 * v = * i; 내가 지시 인 곳인 – knightrider

+0

예. 모든 지시 사항을 반복 할 수 있다면 어떻게하는지 알 수 있습니다. 하지만 특정 값을 가리키는 포인터를 얻으려면 어떻게해야할지 모르겠다. 예제에서는 @someVar 값에 대한 포인터를 어떻게 얻을 수 있을까? – ash

관련 문제