我想确定本机程序集是否从托管代码应用程序(C#)编译为x64或x86 .
我认为它必须在PE头中的某处,因为OS加载器需要知道这些信息,但我找不到它.当然我更喜欢在托管代码中执行它,但如果有必要,我可以使用本机C++.
我正在开发一个捕获所有用户交互的项目.MSDN告诉(这个)
SetWindowsHookEx可用于将DLL注入另一个进程.32位DLL无法注入64位进程,64位DLL无法注入32位进程.如果应用程序需要在其他进程中使用钩子,则需要32位应用程序调用SetWindowsHookEx将32位DLL注入32位进程,并且64位应用程序调用SetWindowsHookEx注入64位DLL进入64位进程.
我的问题是,如果构建了一个应用程序会发生什么Any CPU.我是否需要SetWindowsHookEx从构建的DLL 调用Any CPU.
我写了HookLogger_32.exe加载HookFunctions_32.dll(包括x86)和HookLogger_64.exe加载HookFunctions_64.dll(都是x64)设置WH_CBT和WH_MOUSE全局(不是特定的线程).
HookLogger_32.exe,HookLogger_64.exe,HookFunctions_32.dll和HookFunctions_64.dll是用C++编写的.
当我点击构建的.NET应用程序时Any CPU,这些DLL会被注入(通过SetWindowHookEx).Windows操作系统挂起,我必须强行重启我的机器.
当针对x86或x64构建相同的.NET应用程序时,当我在HookLoggers(32位和64位)启动后单击应用程序时,一切正常.
这种未定义行为的任何原因.
我工作的平台是64位机器.