몇 시간 동안 검색해 봤는데 도움이 될만한 것을 찾을 수 없습니다. 나는 FunctionPass를 포함하는 프로젝트에서 일하고있다. runOnFunction (Function & f) 메소드를 구현했는데 정상적으로 작동합니다.LLVM 명령어를 삽입하는 방법은 무엇입니까?
1) 저장 명령
2) 비트 단위 AND 연산 (0000FFFF를 사용하여 정수를 변경 정수
3)에 스토어 명령의 메모리 어드레스 변환)
에게 검색 : 기본적으로는 필요virtual bool runOnFunction(Function &F) {
for (Function::iterator bb = F.begin(), bbe = F.end(); bb != bbe; ++bb) {
BasicBlock& b = *bb;
for (BasicBlock::iterator i = b.begin(), ie = b.end(); i != ie; ++i) {
if(StoreInst *si = dyn_cast<StoreInst>(&*i)) {
PtrToIntInst* ptrToInt = new PtrToIntInst(si->getPointerOperand(), IntegerType::get(si->getContext(), 32), "", si);
}
}
}
return true;
}
:
4)
지금까지 나는 다음있어 포인터에 다시 정수 변환
나는 실제로 내 명령을 삽입하는 방법을 알아 내거나 AND 명령을 만드는 방법을 찾을 수 없다. 누군가가 올바른 방향으로 나를 가리킬 수 있다면 그것은 좋을 것입니다.
미리 감사드립니다.
인클로저 기본 블록을 통과하는 경우 터미네이터를 어떻게 처리합니까? – PatoBeltran
@PatoBeltran 그런 식으로 지침을 추가해도 기본 블록의 검증이 실행되지 않으므로 중간 단계에서 변형 된 기본 블록을 사용할 수 있습니다. 패스 기능을 끝내기 전에 마지막에 터미네이터를 배치하십시오. – Oak