我想这样做因为我需要将我的dll注入smss.exe或csrss。 我删除了Win32 DLL示例src中的所有代码,但它没用;当我把我的dll放到PEtools时,我已经在导入表中找到了kernel32.dll和msvcXXXX.dll。
我尝试使用Google搜索“native dll”或“no import table dll”,但我找不到任何相关内容。
Content-Type
答案 0 :(得分:1)
您可以通过静态链接(/MT
命令行开关)来删除CRT dll中的依赖项。
对于ntdll.dll和kernel32.dll,您可以使用/NODEFAULTLIB
命令行开关来避免任何隐式依赖,但请记住,如果您没有显式链接至少ntdll.dll那么没有太多你可以做的 - CRT将无法工作(即使静态链接它仍然取决于核心Win32 dll),你将无法使用任何Win32或NT API(使用{{1}例如,你需要kernel32.dll,而后者依赖于ntdll.dll;对于NT本机API等价 - CreateThread
- 你只需要ntdll.dll就可以了。)
如果不链接任何.dll,你唯一能做的就是做“普通”计算(不使用任何其他库或系统函数),或使用NtCreateThread
/ {{1执行“原始”内核调用汇编指令(在32位上)或int 0x2e
(在64位上) - 这实际上是重新实现ntdll.dll的功能。
答案 1 :(得分:1)
如果您与/NoDefaultLib
链接,则可以提出要求,但由于SMSS和CSRSS不使用Win32子系统,因此无法解决您的问题。他们使用本机NT子系统。如果要将DLL放在像SMSS这样的本机程序中,则需要创建本机NT DLL。
那就是说,搞乱CSRSS和SMSS是一个坏主意,但我假设你已经知道......