我有一个注入器,它调用以下(删节)代码:
var processes = Process.GetProcessesByName("target");
/* ... */
var process = processes[0];
/* ... */
process.Kill();
RemoteHooking.CreateAndInject(process.MainModule.FileName, string.Empty, 0,
InjectionOptions.NoService | InjectionOptions.DoNotRequireStrongName,
typeof(EntryPoint).Assembly.Location, typeof(EntryPoint).Assembly.Location,
out injectedProcessId, null);
应该注入的DLL只有以下代码:
public class EntryPoint : IEntryPoint {
public EntryPoint(RemoteHooking.IContext InContext) {}
public void Run(RemoteHooking.IContext InContext) {
RemoteHooking.WakeUpProcess();
Thread.Sleep(5000);
}
}
不幸的是,注入器只是崩溃,典型的Windows错误报告工具显示,根本没有可视异常消息,甚至没有进入DLL。事件视图中的错误是这样的:
Faulting application name: TestInjector.vshost.exe, version: 14.0.23107.0, time stamp: 0x559b788a
Faulting module name: EasyHook64.dll, version: 2.7.0.0, time stamp: 0x589704aa
Exception code: 0xc0000409
Fault offset: 0x0000000000091a9b
在调试模式下运行时,我无法逐步浏览EasyHook代码以找到关键位置,但我至少得到一个例外:
您对如何进一步调试此问题并找出导致问题的原因有什么建议吗?我甚至尝试关闭各种应用以减少干扰,但没有任何帮助。
答案 0 :(得分:0)
我可以解决错误 - 我正在调用的应用程序也获得了一个命令行参数(不幸的是,这不在我的示例代码中),这对于库来说太长了。因此,我增加了缓冲区大小right here以及对它的引用调用right here,现在它可以正常运行。