我正在尝试用c#做一些挂钩(我宁愿不使用Detours或c ++)所以我一直在使用EasyHook。
然而,当我这样做时
Config.Register( "This description can be anything.", @"SomePathToAnExecutable.exe", "MyInjectionDll.dll");
我收到错误:
连接时出错 目标: System.BadImageFormatException:无法使用 加载给定的程序集 [SomePathToAnExecutable.exe] for 反射。
这是一个有效的NET程序集吗? ---> System.BadImageFormatException:可以 不加载文件或程序集 [SomePathToAnExecutable.exe]或其中之一 它的依赖关系。该模块是 预计包含一个集会 清单。
问题1)我是否认为SomePathToAnExecutable是您要挂钩的进程???
问题2)可执行文件是否必须是托管代码?
我也曾在codeplex项目网站上询问过,但没有回复。
http://easyhook.codeplex.com/Thread/View.aspx?ThreadId=235616
答案 0 :(得分:1)
答案1)否Config.Register
使用GAC注册托管程序集。因此,您注册参与代码的所有程序集。这包括您要注入的DLL和为IPCServer提供公共接口的程序集。对于我来说,它看起来就像这样:
Config.Register("MyHook",
Path.Combine(startupPath, "HookManager.dll"),
Path.Combine(startupPath, "NetworkIncomingHook.dll"),
Path.Combine(startupPath, "NetworkOutgoingHook.dll")
);
HookManager.dll包含我用来创建IPCServer的接口(以及从钩子函数发送所有消息的地方)。 NetworkIncomingHook.dll和NetworkOutgoingHook.dll都是我注入我的程序的dll。这是由RemoteHooking.Inject
完成的。
2)否。您也可以挂钩非托管程序集。