【发布时间】:2015-11-06 14:57:43
【问题描述】:
我正在尝试提供一些代码here 的Windows 版本,用于记录Qt (4.7) 事件。目标应用程序是基于 Qt 的,执行注入的代码 fwiw 也是如此。 linux 版本使用库预加载来覆盖 QWidget::x11event 作为录制代码的起点。
我也尝试过这样做,将 winEvent 用作 x11event 的适当等效项。我正在使用 dll 注入,据我所知是成功的。 dll在调试器的加载模块中列出并且加载例程都成功。
但是我从来没有看到我的 winEvent 被调用。我尝试用相同的结果覆盖其他函数。
我是 dll 创建的新手,更不用说注入了,所以可能在某处遗漏了一个重要步骤,但是当我构建包含我的 winEvent 实现的 .dll 时,编译器警告引起了我的怀疑;我收到“警告 C4273:'QWidget::winEvent':dll 链接不一致”。 dll虽然编译成功。目前我只是有
bool QWidget::winEvent ( MSG *message, long *result)
{
// my code
}
在我的 .dll 中的其中一个 cpp 文件中。这够了吗?
【问题讨论】:
-
如果你想在一个开源应用程序中重写一个函数,为什么不自己改变源代码呢?处理 DLL 注入的麻烦有什么意义?
-
开源代码通过使用库预加载在 linux 中记录任何 Qt 目标应用程序中的用户操作。我在 Windows 中最接近的方法是 dll 注入。
标签: c++ qt dll code-injection