나는 선언 된 함수에 전달 된 값을 가져와이를 인쇄해야하는 LLVM 패스를 작성하고 있습니다. 선언 된 함수가 LLVM IR에서 호출됩니다.LLVM 런타임 중에 선언 된 함수의 인수 값을 얻습니다.
모듈 패스를 작성하여 프로그램의 모든 명령어를 반복 처리했습니다. 다음과 같이 명령에 호출 된 함수의 인수를 얻을 수있는 단편이다
라고하기 기능에 대한 LLVM IR 이런 식으로 뭔가 보이는 그러나 경우for (auto &B: F){
for (auto &I: B){
if (auto *InvokeI = dyn_cast <InvokeInst>(&I)) {
if (InvokeI->getCalledFunction()->getName().str() == "function_name") {
errs() << "===\n";
errs() << *(InvokeI->getOperand(0)) <<"\n";
errs() << *(InvokeI->getOperand(1)) <<"\n";
errs() << *(InvokeI->getOperand(2)) <<"\n";
}
}
}
}
: 다음 내 위의 코드를
invoke void @function_name(i8* %4, i8* bitcast (i8** @_ZTIi to i8*), i8* null) #5
to label %36 unwind label %6
을 스 니펫 출력 :
%4 = call i8* @__cxa_allocate_exception(i64 4) #2
i8* bitcast (i8** @_ZTIi to i8*)
i8* null
함수 호출 중에 전달되는 실제 값을 출력하는 대신.
제 질문은 런타임 중에 전달되는 값을 얻는 방법입니다. 아무 것도 반환하지 않는 선언 된 함수에 함수 본문을 추가 할 수있는 방법이 있습니까?
이에 어떤 도움 감사합니다, 감사
이것은 예외를 생성하기위한'C++ abi' 호출입니다. pastebin이나 그 비슷한 곳에서 IR을 생성하는 원본 소스 코드의 최소한의 스 니펫을 제공 할 수 있습니까? – compor
실제로 함수 이름은'__cxa_throw'이고 그 IR을 생성하는 코드 줄은 기본적으로'thow 1'뿐입니다. 그걸 잡으려고했는데 뭐든지 던져 버릴 겁니다 – Nik391
조금 혼란 스럽습니다. 당신이 C++ [ABI] (https://itanium-cxx-abi.github.io/cxx-abi/)를 가리키는 것을 남겨 놓은 이후로 말이죠. – compor