【问题标题】:Is it possible extern a win32 application (only have exe file) [closed]是否有可能是一个win32应用程序(只有exe文件)[关闭]
【发布时间】:2010-12-02 01:26:53
【问题描述】:

我有一个没有源代码的应用程序(win32 exe 文件)。

是否可以编写 C# 应用程序并重用该 win32 .exe 文件中的某些功能?

【问题讨论】:

  • 非常感谢。我在这里学到的关键字是:1)用于监视 GUI 控制消息的 Spy++ 2)线程注入 3)我可以通过获取句柄来操作 gui。 4) dumpbin.exe /exports [your-win32.exe] 可以得到导出的函数 5) LoadLibrary() 和 GetProcAddress() 调用这些函数。

标签: c# winapi executable reusability


【解决方案1】:

你可以运行

dumpbin.exe /exports [your-win32.exe]

看看它导出了哪些函数。然后你可以使用LoadLibrary()GetProcAddress()(无论是什么C# 等价物)来调用这些函数。

当然,您需要知道这些函数的签名才能正确调用它们;即参数的数量和顺序等。

【讨论】:

  • 可执行文件很少导出任何东西。
  • 当然,如果 exe 确实导出任何函数,或者它只导出你不需要的函数,那么你就不走运了。 (我知道你知道这一点,但其他人可能不知道)
【解决方案2】:

不知道这是否是您要查找的内容,但如果其他 exe 具有 GUI,您可能可以通过向其发送消息来做一些事情。只需运行 Spy++,对其他应用程序做任何你想做的事,并在完成后查看日志。如果没有使用特殊控件,您可以通过获取所需控件的句柄并向它们发送适当的消息来操作该 GUI。如果您不希望用户知道您正在运行另一个应用程序,您可以在不同的桌面上运行它。

您可以利用的另一个选项是在其他 exe 的进程中运行您自己的线程,并使用可用的各种 IPC 技术之一与您的应用程序进行通信。这里有很多关于远程线程注入的问题,所以请四处寻找。

最后,如果幸运的话,您需要的功能实际上位于 exe 使用的 DLL 之一上,可以作为导出函数或作为 COM 接口。使用 Process Explorer 左右查看运行时,看看是否有任何模块看起来很有趣。就使用其他模块而言,DLL 显然要容易得多。

【讨论】:

    猜你喜欢
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2020-07-17
    • 2013-05-03
    相关资源
    最近更新 更多