hzqst
雪 币: 8484
活跃值: (360)
能力值:
( LV9,RANK:250 )
在线值:
踩过的坑比较多,折腾了一周总算编译出能用的驱动了
源码:
void DriverUnload(PDRIVER_OBJECT driver_object) { } NTSTATUS NTAPI DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryString) { UNREFERENCED_PARAMETER(pRegistryString); pDriverObject->DriverUnload = DriverUnload; return STATUS_SUCCESS; }
效果:
方法:安装VS-LLVM插件
配置类型:动态库(.dll)
平台工具集:LLVM
Windows SDK版本:看着设置,一般选最新
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\版本号\include
C:\Program Files (x86)\Windows Kits\10\Include\SDK版本号\ucrt
C:\Program Files (x86)\Windows Kits\10\Include\SDK版本号\km\crt
C:\Program Files (x86)\Windows Kits\10\Include\SDK版本号\km
C:\Program Files (x86)\Windows Kits\10\Include\SDK版本号\shared
C:\Program Files (x86)\Windows Kits\10\lib\SDK版本号\km\x64
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\版本号\lib\x64
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\版本号\atlmfc\lib\x64
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\VS\lib\x64
C:\Program Files (x86)\Windows Kits\10\lib\SDK版本号\ucrt\x64
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\VS\UnitTest\lib
C:\Program Files (x86)\Windows Kits\10\lib\SDK版本号\um\x64
C:\Program Files (x86)\Windows Kits\NETFXSDK\版本号\lib\um\x64
C:\Program Files (x86)\Windows Kits\NETFXSDK\版本号\Lib\um\x64
AMD64;_AMD64_;_WIN64;__WIN64_;_KERNEL_MODE;__x86_64__
Spectre缓解:否
运行库:MD
启用C++异常:否
附加依赖项:
ntstrsafe.lib
netio.lib
ntoskrnl.lib
hal.lib
wmilib.lib
BufferOverflowK.lib
忽略特定默认库:
msvcrt.lib
libcmt.lib
生成清单:否
子系统:本机 (/SUBSYSTEM:NATIVE)
驱动程序:驱动程序 (/Driver)(选错此项会导致驱动无法正常卸载)
入口点:DriverEntry
设置校验和:是 (/RELEASE)(选错此项会导致驱动无法正常加载)
用clang编译时会提示找不到__writecr0 __readcr3 __readmsr之类内核常用指令
解决方法1:修改clang\xxx\include\intrin.h,封装未实现的intrin,用__asm__让其强行支持,比如
static __inline__ void __DEFAULT_FN_ATTRS __writecr3(unsigned long long __cr3_val) { __asm__ ("mov %0, %%cr3" : : "q"(__cr3_val) : "memory"); }
解决方法2:MASM写.asm,封装成函数让链接器去链接
比如
; void __stdcall AsmWriteCR2(_In_ ULONG_PTR cr2_value); AsmWriteCR2 PROC mov cr2, rcx ret AsmWriteCR2 ENDP
__try__except结构就别想用了
解决方法1:避免使用SEH,用不了就憋用了呗
解决方法2:把需要SEH的地方用MSVC编译成lib,再链接过去
[公告]看雪论坛2020激励机制上线了!发帖不减雪币了!如何获得积分快速升级?
最后于 2天前 被hzqst编辑 ,原因: