首页
社区
课程
招聘
[求助]编译了一个x64驱动,输入表里面为什么会有R3函数
发表于: 2020-5-23 15:23 4216

[求助]编译了一个x64驱动,输入表里面为什么会有R3函数

2020-5-23 15:23
4216

开发环境使用CB+DDK7600,配置x64驱动开发环境
测试空壳驱动,编译通过不报错,可以正常加载
但是添加下面执行内联汇编的代码后,编译不通过

 

VOID test()
{
SCFN scfn;
UINT64 ret;
UCHAR strShellCode[14]="\x48\x03\xCA\x49\x03\xC8\x49\x03\xC9\x48\x8B\xC1\xC3";
/
add rcx,rdx
add rcx,r8
add rcx,r9
mov rax,rcx
ret
/
scfn=ExAllocatePool(NonPagedPool,14);
memcpy(scfn,strShellCode,14);
ret=scfn(11,22,33,44);
DbgPrint("[x64Drv] Inline ASM return: %lld",ret);
ExFreePool(scfn);
}

 

报错提示如下

 

||=== Build: Release in 1212 (compiler: [DRI_X64]) ===|
MSVCRT.lib(gs_report.obj)||error LNK2019: unresolved external symbol imp_TerminateProcess referenced in function report_gsfailure|
MSVCRT.lib(gs_report.obj)||error LNK2019: unresolved external symbol imp_GetCurrentProcess referenced in function report_gsfailure|
MSVCRT.lib(gs_report.obj)||error LNK2019: unresolved external symbol imp_UnhandledExceptionFilter referenced in function report_gsfailure|
MSVCRT.lib(gs_report.obj)||error LNK2019: unresolved external symbol imp_SetUnhandledExceptionFilter referenced in function report_gsfailure|
bin\Release\1212.sys||fatal error LNK1120: 4 unresolved externals|
||=== Build failed: 5 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
竟然提示缺少R3的函数
添加kernel32.lib后 编译通过,但是无法加载
IDA查看添加kernel32.lib编译后的驱动文件:
Address Ordinal Name Library


 

0000000140002000 UnhandledExceptionFilter KERNEL32
0000000140002008 GetCurrentProcess KERNEL32
0000000140002010 TerminateProcess KERNEL32
0000000140002018 SetUnhandledExceptionFilter KERNEL32
0000000140002028 RtlInitUnicodeString ntoskrnl
0000000140002030 IofCompleteRequest ntoskrnl
0000000140002038 IoCreateSymbolicLink ntoskrnl
0000000140002040 IoIsWdmVersionAvailable ntoskrnl
0000000140002048 IoDeleteSymbolicLink ntoskrnl
0000000140002050 RtlVirtualUnwind ntoskrnl
0000000140002058 RtlLookupFunctionEntry ntoskrnl
0000000140002060 RtlCaptureContext ntoskrnl
0000000140002068 IoDeleteDevice ntoskrnl
0000000140002070 ExAllocatePool ntoskrnl
0000000140002078 DbgPrint ntoskrnl
0000000140002080 IoCreateDevice ntoskrnl
0000000140002088 ExFreePoolWithTag ntoskrnl

 

输入表里面的确有R3函数,导致加载驱动失败,提示"无法找到指定文件"
求解这是什么原因?
配置环境问题吗?


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
UCHAR strShellCode[14]="\x48\x03\xCA\x49\x03\xC8\x49\x03\xC9\x48\x8B\xC1\xC3";
通过一行一行注释发现,原来是这行代码有问题,,
长度小于等于3 不报错,长度大于3就报错,难道是codeblocks的原因?

2020-5-23 18:37
0
雪    币: 216
活跃值: (250)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

链接的lib不对. 检查下路径.

最后于 2021-8-15 22:31 被tsoo编辑 ,原因:
2020-5-23 18:38
0
雪    币: 5734
活跃值: (1737)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
gs 库用错了
2020-5-24 01:39
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
小艾 gs 库用错了
怎么讲?
2020-5-24 20:37
0
雪    币: 1790
活跃值: (3919)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
首先哪些函数被引用是因为GS(防止缓冲溢出)选项的原因,之所以修改TCHAR长度短了就可以编译过是因为GS选项我记得只有变量超过一定长度才会增加缓冲区溢出的代码检查。
你可以把 UCHAR strShellCode[14]修改成 const UCHAR *pstrShellCode = ;试下,至于为什么DDK编译驱动启动GS选项会链接R3的相关函数很奇怪。
2020-5-25 09:47
0
雪    币: 5734
活跃值: (1737)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
taizhong 怎么讲?
目录一共四个GS库BufferOverflow.lib BufferOverflowK.lib BufferOverflowU.lib BufferOverflowGDI.lib,你应该链接 BufferOverflowK.lib。 无非就是你搞项目的时候,定义错了环境变量,导致 native 项目链接到了R3的库。
2020-5-25 20:02
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
小艾 目录一共四个GS库BufferOverflow.lib BufferOverflowK.lib BufferOverflowU.lib BufferOverflowGDI.lib,你应该链接 Buff ...
确实这个问题,添加正确的lib后,解决了
谢谢
2020-5-26 14:14
0
游客
登录 | 注册 方可回帖
返回
//