C++ 在应用程序运行时编译.dll
假设此场景:一个应用程序(app.exe)正在使用多个.dll。我正在调试一个函数,bugged_function()来自应用程序使用的.dll之一:util.dll。当我调试有缺陷的函数()时,我意识到代码中有错误,必须进行更改 正常执行的步骤: 1.关闭app.exe 2.修改函数中的代码 3.重新编译util.dll 4.重新运行app.exe 我想要的是: 绕过步骤1和步骤4。为此,我需要以某种方式卸载,如果可能的话,util.dll库,以便在编译时可以重写它。应用程序必须以某种方式重新加载库 编辑1: 我不知道如何调用被窃听的函数()。假设我只能访问app.exe使用的库util.dll的源代码 编辑2:C++ 在应用程序运行时编译.dll,c++,dll,C++,Dll,假设此场景:一个应用程序(app.exe)正在使用多个.dll。我正在调试一个函数,bugged_function()来自应用程序使用的.dll之一:util.dll。当我调试有缺陷的函数()时,我意识到代码中有错误,必须进行更改 正常执行的步骤: 1.关闭app.exe 2.修改函数中的代码 3.重新编译util.dll 4.重新运行app.exe 我想要的是: 绕过步骤1和步骤4。为此,我需要以某种方式卸载,如果可能的话,util.dll库,以便在编译时可以重写它。应用程序必须以某种方式重新
我正在使用Visual Studio 2010,调试时,我会附加到app.exe进程。Visual Studio可以编辑并继续。因此,如果处于断点,可以进行所需的更改,然后继续调试。Visual studio将在维护状态的同时编译并应用更改
编辑:修复了编辑并继续命名 Visual studio可以编辑并继续。因此,如果处于断点,可以进行所需的更改,然后继续调试。Visual studio将在维护状态的同时编译并应用更改
编辑:修复了编辑并继续命名 如果应用程序正在通过使用dll,则可以卸载它(
FreeLibrary
或类似),然后重新加载(LoadLibrary
或类似)
如果应用程序正在通过使用dll,我认为你运气不好
编辑:我有点误读了这个问题。由于无法修改app.exe,因此必须依赖该应用程序的内置功能进行运行时加载和卸载(如果有)。这完全取决于应用程序。如果应用程序通过使用dll,可以卸载它(
freebrary
或类似),然后重新加载(LoadLibrary
或类似)
如果应用程序正在通过使用dll,我认为你运气不好
编辑:我有点误读了这个问题。由于无法修改app.exe,因此必须依赖该应用程序的内置功能进行运行时加载和卸载(如果有)。这完全取决于应用程序。如何调用
bugged_function()
?通过GetProcAddress()
?编辑:我不确定,因为我没有访问代码的权限。我将编辑问题以突出显示这一点。bugged_function()
是如何调用的?通过GetProcAddress()
?编辑:我不确定,因为我没有访问代码的权限。我将编辑问题以突出显示这一点。如果我在调试模式下修改代码,则表示需要重新编译。注意:我使用的是VisualStudio2010。它似乎有一些奇怪的限制,比如它可以应用什么以及需要重建什么。确保您正在使用/ZI选项@DanLincan:如果它这么说,那意味着您要么没有正确配置“编辑并继续”,要么您的链接器设置指定了错误的调试信息格式。用于配置“编辑并继续”的文档为。(还请注意,关于何时可以使用E&C,存在一些限制,例如存在任何/clr
变体。)如果在调试模式下修改代码,则表示需要重新编译。注意:我使用的是VisualStudio2010。它似乎有一些奇怪的限制,比如它可以应用什么以及需要重建什么。确保您正在使用/ZI选项@DanLincan:如果它这么说,那意味着您要么没有正确配置“编辑并继续”,要么您的链接器设置指定了错误的调试信息格式。用于配置“编辑并继续”的文档为。(还请注意,关于何时可以使用E&C,存在一些限制,例如存在任何/clr
变体。)