Hikari-LLVM15 icon indicating copy to clipboard operation
Hikari-LLVM15 copied to clipboard

能否编译成so的形式

Open BRYNHILDRINTHEDARKNESS opened this issue 2 years ago • 9 comments

能否改成此项目的形式:https://github.com/LeadroyaL/llvm-pass-tutorial 这样有一个好处,编译的时候直接将生成的so链接进去,就会方便得多。

BRYNHILDRINTHEDARKNESS avatar Feb 05 '23 07:02 BRYNHILDRINTHEDARKNESS

LLVM是没有跨版本的API/ABI向前兼容的保证的, 你最终还是需要每个版本单独编译一份so

Naville avatar Feb 06 '23 02:02 Naville

这个没关系的,一个llvm版本可以用很长时间

BRYNHILDRINTHEDARKNESS avatar Feb 06 '23 02:02 BRYNHILDRINTHEDARKNESS

Apple的Clang是没有插件支持的, 并且至少Apple的Clang是不导出绝大多数符号的. LLVM在Windows下也缺失很多dllexport之类的标记。

至少对于我自己维护的生产环境下可用的高稳定性版本来说, 插件化是个非常非常糟糕的主意

Naville avatar Feb 06 '23 02:02 Naville

但我的生产环境是android,因为我要考虑便捷性,所以我会尽可能的将编译环境部署在linux,这样只需要加载一个hikari.so就可以完成混淆。

BRYNHILDRINTHEDARKNESS avatar Feb 06 '23 02:02 BRYNHILDRINTHEDARKNESS

现在的这套构建系统应该是不行的, @NeHyci LLVM11+开始提供了一套新的可以做out-of-tree build的机制, 不再需要Patch LLVM源码并且可以按需构建静态或者动态库, 可以切过去? CMake函数叫add_llvm_pass_plugin 需要的话可以Telegram之类的方式来问我也行

Naville avatar Feb 06 '23 02:02 Naville

但我的生产环境是android,因为我要考虑便捷性,所以我会尽可能的将编译环境部署在linux,这样只需要加载一个hikari.so就可以完成混淆。

pass plugin能使用cl::opt吗?我记得好像是不行的吧,你说的那个仓库中-mllvm -sub这种参数有效吗?

61bcdefg avatar Feb 06 '23 02:02 61bcdefg

我记得是能的, 你是不是构建系统有问题多链接了一份Support? 不过我们自己downstream也是static link

Naville avatar Feb 06 '23 02:02 Naville

但我的生产环境是android,因为我要考虑便捷性,所以我会尽可能的将编译环境部署在linux,这样只需要加载一个hikari.so就可以完成混淆。

pass plugin能使用cl::opt吗?我记得好像是不行的吧,你说的那个仓库中-mllvm -sub这种参数有效吗?

是可以的 ,你可以看看代码,我现在正在用

BRYNHILDRINTHEDARKNESS avatar Feb 06 '23 02:02 BRYNHILDRINTHEDARKNESS

@61bcdefg 大佬 如果能改成编译动态库的方式,还请帮忙改改,拜托了

BRYNHILDRINTHEDARKNESS avatar Feb 06 '23 07:02 BRYNHILDRINTHEDARKNESS