首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为LLVM和clang c++开发自定义调用约定,以便注入DLL代码。

为LLVM和clang c++开发自定义调用约定,以便注入DLL代码。
EN

Stack Overflow用户
提问于 2020-10-31 20:00:08
回答 1查看 521关注 0票数 1

我目前正在从事一个项目,其中有一个可执行文件需要一些C/++注入来修复DLL中的代码,不幸的是,上述exe恰好是用Watcom编译的--这意味着使用visual c++和clang的常用方法都无法调用现有代码并在不破坏参数的情况下注入自定义函数(我已经尝试内联一些程序集以传递带有存根的参数,但由于有超过7000个可以任意调用的方法,维护起来将非常令人头疼)。

因此,由于我使用Visual Studio2019,且Visual Studio2019与clang进行了本机集成,因此我认为一个好的解决方案可能是使用编译器添加来实现自定义的__watcom调用约定。现在的问题是:如何添加自定义调用约定?有人试过做类似的事情吗?

我正在绞尽脑汁想弄清楚到底要在LLVM或clang中修改什么。

EN

回答 1

Stack Overflow用户

发布于 2020-11-01 07:21:01

您必须同时在前端(Clang)和后端(LLVM)中进行更改。

前端部分的变化包括增加对__watcom关键字的支持,即让Clang解析和接受这样的关键字,并以某种方式将其传播到后端。我看到的一种简单的方法是

代码语言:javascript
运行
AI代码解释
复制
#define __wacom __attribute__((annotate("wacom_calling_convention")))

在您的系统头中的某个位置。这将导致Clang将"wacom_calling_convention“元数据附加到每个标记为__wacom的函数。

后端部分当然更复杂。有关如何在IR级别上阅读注释的示例,请参阅https://github.com/HikariObfuscator/Core/blob/master/Utils.cpp#L158

一旦找到所有标记为__wacom的函数,就必须更改它们的调用约定。请参阅documentation on that matter。您可能需要扩展一些描述支持的调用约定的枚举或TableGen文件。

最后,您需要对机器代码(MC)层进行一些调整。我在这方面的经验要少得多,所以不能给你确切的切入点。但是,到了这一步,您应该能够自己解决问题了。

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64625864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档