나는 EasyHook를 사용하지 않지만, 다음과 같은 코드가 너무 당신을 위해 작동합니다. 몇 가지 제한이있는 ILMerge를 사용하는 대신 다음을 수행하십시오.
1) SharpDx.dll의 서명 된 copiy 및 다른 모든 필요한 SharpDx 어셈블리를 프로젝트에 연결하십시오. "Local Copy"속성을 "False"로 설정하십시오.
2) 프로젝트에 이러한 라이브러리를 추가하고 (.cs 파일 에서처럼) 파일의 속성을 "Embedded Resource"및 "출력 폴더에 복사하지 않음"으로 설정합니다. 해당 파일이 1 단계에서 링크 된 것과 정확히 일치하는지 확인하십시오.
3) 주입 후, 발견 된 경우 자원에서 임의의 어셈블리 (관리되는 또는 관리되지 않는)를로드하는 엔트리 포인트에서 다음 함수를 먼저 호출하십시오.
private static void LoadAssemblyFromResources() {
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
try {
Assembly asm = Assembly.GetExecutingAssembly();
string name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll";
string rsc = asm.GetManifestResourceNames().FirstOrDefault(s => s.EndsWith(name));
if (rsc == null) return null; //assembly not found in resources
byte[] module;
using (Stream stream = asm.GetManifestResourceStream(rsc)) {
if (stream == null) return null;
module = new byte[stream.Length];
stream.Read(module, 0, module.Length);
}
try {
return Assembly.Load(module); //Load managed assembly as byte array
} catch (FileLoadException) {
string file = Path.Combine(Path.GetTempPath(), name);
if (!File.Exists(file) || !module.SequenceEqual(File.ReadAllBytes(file)))
File.WriteAllBytes(file, module);
return Assembly.LoadFile(file); //Load unmanaged assembly as file
}
} catch {
return null;
}
};
}
EasyHook 인젝션 콜은 어떻게 생겼습니까? 과거에는 ILMerge를 사용하여 SharpDX, EasyHook 및 내 어셈블리를 하나로 결합했습니다. –