llvm - 在“组合”LLVM IR 指令中检测自由功能?
问题描述
我可以使用 getCalledFunction() 在这个 IR 调用指令中轻松找到免费的:
call void @free(i8* %10) #4, !dbg !53
但是,我似乎不知道如何在此调用指令中找到它:
%call7 = call i32 bitcast (i32 (...)* @free to i32 (%struct.Bar*)*)(%struct.Bar* %7), !dbg !56
该指令将 BitCast 与调用指令相结合。我不确定“组合”是否是正确的短语,但是,我怎样才能在这里检测到 free 呢?
我尝试将 dyn_cast 转换为 Bitcast,但事实并非如此。我什至首先使用了 getCalledOperand() 并尝试将我从中获得的值转换为 BitCast,但它仍然没有检测到它。我将不胜感激。
谢谢!
解决方案
@arnt 在评论中回答了这个问题,所以我为其他人添加了答案。
@arnt:调用的第一个参数是由 getBitCast 返回的 ConstantExpr。cast(foo)->getOperand(0) 将返回免费的。
推荐阅读
- r - 计算 R 中数据帧中具有条件的条目数(通用)
- python - 按类的属性分组和计数
- angular - 如何检查主题是否不为空?
- tinymce - 在 TinyMCE 中使用 paste_as_text 后为文本添加样式
- python - 如何解码定义为字符串的十六进制字节?
- php - 在 PHP ob_get_clean() 中捕获 javascript 输出?
- java - 在这种情况下如何声明 Java Comparable
- swift - 将具有清晰背景颜色的 UIView 转换为 UIImage 为生成的图像添加白色背景颜色
- java - 如何在 JAVA 的 HTTP 帖子中传递当前的 Windows 用户凭据?
- java - 如何使用 Java 重新验证已在 Okta 应用程序下登录的用户?