llvm - LLVM IR:获取调用点的返回值
问题描述
这是一个关于分析 LLVM IR 的快速问题。所以基本上我正在尝试获取 LLVM IR 函数调用语句的返回值,如下所示:
%47 = call i256 @test(i256 %46)
我想获得访问权%47
。
这是我用来访问参数的代码。
else if (funcName.contains("test")) {
Value *op = CI->getOperand(0);
if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(op))
// get the first function parameter
op = GEP->getPointerOperand();
}
非常令人惊讶的发现是,我在文档中找不到类似“获取返回值”之类的东西:http: //llvm.org/doxygen/classllvm_1_1CallInst.html
任何人都可以在这里点亮一些灯吗?非常感谢。
解决方案
CI
(call
指令)是它的返回值。它有一个继承的类型Value
。
如果你想这样做1 + %47
,就像一个例子,你可以像这样进行加法:Value * Add = BinaryOperation::Create(Instruction::Add, CI, ConstantInt::get(i256, 1), ...);
加法指令又是它的结果,Add->getType() == i256
因为它是两个都具有 type 的值的总和i256
。
推荐阅读
- java - 将带有时区的过去 gregorianCalendar 日期转换为 localDate 返回错误时间
- javascript - 谷歌双 y 图表线重叠
- javascript - 在 Angular 4+ 中使用反应组件
- php - 无法将 WooCommerce 类别描述放在类别框下
- wpf - 绑定按钮 Mediaelement
- playframework - Camunda:如何解决 Play Framework 应用程序中 JavaDelegate 进程的 ENGINE-09017 错误?
- c# - 共享位置上的 Windows 窗体应用程序,在本地保存文件
- vb.net - 使用 vb.net 获取访问我的网站的远程客户端的主机名
- maven - 找不到 org.slf4j.Logger 并使用 log.info() 等
- c# - Datagridview 按钮编程