首页
社区
课程
招聘
[求助]如何编译多个.c后缀的驱动文件
发表于: 2013-1-28 09:20 11185

[求助]如何编译多个.c后缀的驱动文件

2013-1-28 09:20
11185
各位一般采用什么方式编译多个.c后缀的文件为.sys后缀的驱动程序?一个C语言文件可以写一个简单的SOURCES文件:
TARGETNAME=Name
TARGETTYPE=DRIVER
TARGETPATH=obj
SOURCES=Name.c
但是多个C语言文件好像看例子里面有.rc文件,大家一般是使用什么方式编译的?

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

收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 12
活跃值: (773)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
。。。。。
SOURCES=xxxt.c \
                                        xxx.rc \

后面想加几个就几个。。
2013-1-28 09:57
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
首先谢谢你的回答!但目前关键是.rc文件该如何编写,我使用VS打开.rc,发现不是直接可以编写的类型。另外还有一个问题就是
PRECOMPILED_INCLUDE=pch.h
PRECOMPILED_PCH=pch.pch
PRECOMPILED_OBJ=pch.obj
这三句话是什么意思?没看太懂。。
2013-1-28 10:00
0
雪    币: 4817
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
RC不能用VS编辑,VS会加入很多WDK无法识别的东西,我也找不到解决方法,还请高手指定,我目前是用记事本直接编译的,因为驱动对RC要求不高,也就一些版本之类的东西。

PRECOMPILED是预编译的东西,具体有人比我解释的更清楚,虽说是VC的,但原理一样:
http://blog.csdn.net/wuchen1004/article/details/3210065
2013-1-28 10:19
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢你的回答!
为什么单独的一个C文件不需要.rc后缀的文件来指导编译器进行编译,而多个C语言文件需要呢?
另外从你的回答中我感觉到.rc文件是否跟makefile文件一样,写了一个就可以以后一直copy?
2013-1-28 10:28
0
雪    币: 12
活跃值: (773)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
果断手写。。也就一个版本信息吧
2013-1-28 11:18
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
随便拿一个例子的rc文件来看,不像是手写的样子。。
///////////////////////////////////////////////////////////////////////////////
///
/// Copyright (c) 2010 - <company name here>
///
/// The version information resource. Depends on "drvversion.h" header file.
///
/// (File was in the PUBLIC DOMAIN  - Created by: ddkwizard\.assarbad\.net)
///////////////////////////////////////////////////////////////////////////////

// $Id$

#include <winver.h>
#include <winnt.h>

#ifdef RC_INVOKED
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#include "drvcommon.h"
#include "drvversion.h"

#ifdef DBG
#define ACTUAL_FILEFLAGS VS_FF_DEBUG
#else
#define ACTUAL_FILEFLAGS 0
#endif

VS_VERSION_INFO VERSIONINFO
FILEVERSION CREATE_XVER(FILE_MAJVER, FILE_MINVER, FILE_BUILD)
PRODUCTVERSION CREATE_XVER(PRD_MAJVER, PRD_MINVER, 0)
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS ACTUAL_FILEFLAGS
FILEOS VOS_NT
FILETYPE VFT_DRV
FILESUBTYPE VFT2_DRV_SYSTEM
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "000004b0"
        BEGIN
#ifdef TEXT_AUTHOR
            VALUE "Author", ANSISTRING(TEXT_AUTHOR)
#endif
#ifdef TEXT_COMMENTS
            VALUE "Comments", ANSISTRING(TEXT_COMMENTS)
#endif
            VALUE "CompanyName", ANSISTRING(TEXT_COMPANY)
            VALUE "FileDescription", ANSISTRING(TEXT_FILEDESC)
            VALUE "FileVersion", ANSISTRING(CREATE_FVER(FILE_MAJVER, FILE_MINVER, FILE_BUILD))
            VALUE "InternalName", ANSISTRING(TEXT_INTERNALNAME)
            VALUE "LegalCopyright", ANSISTRING(TEXT_COPYRIGHT)
            VALUE "OriginalFilename", ANSISTRING(TEXT_MODULE)
            VALUE "ProductName", ANSISTRING(TEXT_PRODUCTNAME)
            VALUE "ProductVersion", ANSISTRING(CREATE_PVER(PRD_MAJVER, PRD_MINVER, PRD_BUILD))
#ifdef TEXT_SPECIALBUILD
            VALUE "SpecialBuild", ANSISTRING(TEXT_SPECIALBUILD)
#endif
            VALUE "Website", ANSISTRING(TEXT_WEBSITE)
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x0, 1200
    END
END

#endif // RC_INVOKED
语法我是没看懂的。。。悲伤。。
2013-1-28 11:46
0
雪    币: 952
活跃值: (1826)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
多个也不用。。。。另外,建议使用vs 2102 + wdk8 再也不头疼了,也不用自己写这些东西了
2013-1-28 12:07
0
雪    币: 297
活跃值: (120)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
工具集成的越舒服,对于开发人员越有意义,但对于逆向的人,来说未必是好事.
现在用一个记事本++,自写makefile,用nmake编译挺舒服的,再不怕虚拟机调试时候,慢吞吞的IDE占内存啦
2013-1-28 12:23
0
雪    币: 4817
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
RC文件跟单独的C和多个文件没有关系,RC文件也就是所谓的资源文件,比如版本信息,资源字符串,图片,等等会放在里边,跟几个C文件没有关系。

这个你倒说对了,确实跟makefile很像,我觉得更像sources文件,新建一个工程后,就可以拷贝一个makefile和sources,然后根据工程小修改一下sources文件即可,makefile基本可不动。RC文件也是一样,一般驱动就只有版本信息,那就那么几项,你可以从微软的例子中找一个,每一次就COPY一次,然后再根据你的公司名称啊,工程名等等修改就行。
2013-1-28 12:54
0
雪    币: 952
活跃值: (1826)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
一般是实机写代码,在编译后事件里加个bat自动复制就好了,而且vs2012支持直接源码调试驱动,很直观好用
2013-1-28 12:56
0
雪    币: 4817
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
语法我也不懂,但也不需懂什么啊。给你个我驱动里用的模板,我从WDK里的例子改过来的。

#include <windows.h>

#include <ntverp.h>

VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,0
PRODUCTVERSION 3,0
FILEFLAGSMASK 0x3fL
FILEOS 0x4L
FILETYPE 0x0L
FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "CompanyName", " ****** Co.,Ltd"
            VALUE "FileDescription", "**** Filter  Driver"
            VALUE "FileVersion", "1.0"
            VALUE "InternalName", "****.sys"
            VALUE "LegalCopyright", "Copyright (C)  ****. All rights reserved."
            VALUE "OriginalFilename", "****.sys"
            VALUE "ProductName", "**** Filter  Driver"
            VALUE "ProductVersion", "1.0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

修改里边****成你的就行了。
2013-1-28 12:58
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
嗯。。谢谢,我的inf安装文件什么的也是copy的例程里面的。。
2013-1-28 13:35
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我驱动也是用notepad ++写的,感觉单纯论编写的话比vs好用,但是写一般的普通程序还是用vs,可以提示,毕竟那些Windows api函数名字有些实在是太bug了。。
2013-1-28 13:37
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
不知道现在用VS2010编写驱动,是用的插件还是自己写的配置??
2013-1-28 13:38
0
雪    币: 297
活跃值: (120)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
16
哈哈,现在正在熟悉使用GVim,用熟练了以后,记事本++就淘汰掉
2013-1-28 13:50
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
Gvim我感觉没有notepad ++好用啊,关键是notepad ++上的函数可以折叠,这样可以更清楚的看程序的结构
2013-1-28 14:05
0
雪    币: 297
活跃值: (120)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
18
如果是自己写的代码,程序的结构应该都在心里吧,如果是读别人的源码,有Source Insight不是更好嘛,

Vim用熟练了,基本就可以不用鼠标了,开发效率会大大提高
2013-1-29 18:47
0
雪    币: 952
活跃值: (1826)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
vs2012和wdk8 自身支持
2013-1-29 19:35
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
以前不是有一个工具叫ddkwizard吗?现在我搜索了下好像是自己写配置,工程属性然后编译,这跟以前使用批处理应该差不多的吧
2013-1-29 23:37
0
游客
登录 | 注册 方可回帖
返回
//