[转]NT4源码编译环境

转自:http://yanshurong.spaces.live.com/blog/cns!33C6A79B73579F0!275.entry

2004212号,有人将Microsoft Windows NT 4Microsoft Windows 2000的部分核心源代码泄露出来,并在网上传播。对此,微软公司发言人汤姆·皮拉表示:我们发现Windows 2000NT 4.0的部分源代码非法地出现在互联网上。并警告说,任何第三方传播这些源代码都是非法的行为,微软将对此采取严肃行动。不过相信很多对Windows内核感兴趣的朋友还是在第一时间下载到了这些压缩文件。如果你没有,也不用着急,虽然我不能告诉你直接的下载地址,但即使到今天,你仍然可以尝试通过emule或迅雷等P2P工具搜索到,关键字分别是nt sourcewindows_2000_source_code。请记住,为了不必要的法律纠纷,不要把这些代码用于商业目的,也不要传播这些代码,学习完后应该立刻把这些代码删除,如果由此引起任何法律问题,本人概不负责。

 

在泄露当天我得到了相关代码,至于从哪下的忘掉了,好像是一个国外网站。NT4的代码压缩包大小是229M2000的是203M。通过研究分析,NT4代码相对比较全,可以编译出绝大部分系统核心文件(起码我想编译的大都编译出来了),2000代码基本上只能看,不能编译,因为缺失了太多的头文件。今天突然起了怀旧之心,想来个故地重游,本以为轻车熟路,应该很快就能搞定,不料还是碰到不少问题,虽然凭记忆最终还是得以解决,但还是花了不少时间。其间也借助google尝试查找这方面的信息,但结果并不是很理想,尤其是NTLDR的编译可以说没有任何相关信息,为了方便大家也为了方便自己以后查找,特意把步骤记录下来。发表是最好的记忆。

 

这篇文章主要讨论代码的编译环境搭建,后面有时间的话我会陆续写出编译NTLDRntoskrnl.exehal.dll以及win32k.sys等文件的详细编译步骤。由于我可爱的小黑一直用的是XP,下面就介绍XP系统下编译环境的搭建,在这你需要准备好VC6.0NT4DDK以及NT4的源代码压缩包。NT4DDK可以从下载。(可惜MS对中国还不开放SkyDrive,否则我可以把相应修改后的文件放上去了)

 

1 安装VC6.0

2  由于在XP2003下没办法安装NT4 DDK,只好在另外一台WIN2K的机器(可以是虚拟机)上安装选自定义安装,仅安装库和头文 件。假定安装到c:\ddk

3  把上一步中的c:\ddk目录整个拷到XP系统的d:\下,这样就类似于把NT4 DDK安装到XP系统下的d:\ddk中。

4  nt4源代码解压到d:\nt下,里面应包含privatepublic两个目录。

5  d:\ddk目录下创建buildchk.bat文件,其内容是:

cmd.exe /k D:\DDK\bin\setenv.bat D:\DDK checked

       d:\ddk目录下创建buildfre.bat文件,其内容是:

cmd.exe /k D:\DDK\bin\setenv.bat D:\DDK free

6.  拷贝D:\nt\public\sdk\lib\coffbase.txtD:\DDK\lib\i386\free目录。

7.   点击d:\ddk\buildfre.bat,切换到D:\nt\private\sdktools目录,尽可能多的编译其中的文件,并把编好的文件拷贝到D:\nt\public\tools。其中至少应包括chmode.exe ech.exe gensrv.exe hextract.exe hsplist.exe listmung.exe masm386.exe strcto.exe touch.exe wcshdr.exe ws2hdr.exe。如果在编译过程中碰到类似“link() : error LNK1104: cannot open file "obj\i386\free\structo.exe"”的错误,手动在其i386目录下创建free目录,再重新编译。

8.   d:\nt目录下创建ntos.bat文件,其内容是:

              set CPUTYPE=I386

set USE_PDB=1

set NTDEBUG=ntsd

set NTDEBUGTYPE=windbg

set BASEDIR=\nt

set _NTDRIVE=d:

set _NTROOT=\nt

set NT_UP=1

rem set C_DEFINES=%C_DEFINES% -D_UNICODE -DUNICODE

path d:\nt\public\tools;%PATH%

9  修改d:\ddk\inc下的MAKEFILE.DEF文件,其中原来的92-101行更改为:

#modified by David

SDK_INC_PATH = D:\nt\public\sdk\inc

CRT_INC_PATH = D:\nt\public\sdk\inc\crt

OAK_INC_PATH = D:\nt\public\oak\inc

 

#SDK_LIB_PATH = $(BASEDIR)\lib\*\$(DDKBUILDENV)

#DDK_LIB_PATH = $(BASEDIR)\lib\*\$(DDKBUILDENV)

#CRT_LIB_PATH = $(BASEDIR)\lib\*\$(DDKBUILDENV)

 

#modified by David

SDK_LIB_PATH = D:\nt\public\sdk\lib\*

DDK_LIB_PATH = D:\nt\public\sdk\lib\*

CRT_LIB_PATH = D:\nt\public\sdk\lib\*

USE_PDB=1

#BROWSER_INFO=1

BUILD_OPTIONS=fe

LINKER_FLAGS=$(LINKER_FLAGS) $(SDK_LIB_PATH)\exsup.lib

 

MASTER_VERSION_FILE = $(BASEDIR)\inc\ntverp.h

 

#modified by David

 

#COFFBASE_TXT_FILE = $(BASEDIR)\lib\*\$(DDKBUILDENV)\coffbase.txt

COFFBASE_TXT_FILE = $(BASEDIR)\public\sdk\lib\coffbase.txt

10.   如果你安装NT4DDK的WIN2K系统不是英文环境,修改D:\ddk\bin下的SETENV.BAT文件,其中原来的95行更改为:

              set LANGUAGE=USA

        原来的109行更改为:

              set LANGUAGE=USA

11  修改D:\nt\public\sdk\inc下的ntdbg.h文件,其中原来的213-221行更改为:

//modified by David

/*typedef enum _DBGUI_APINUMBER {

                  DbgUiWaitStateChangeApi,

                  DbgUiContinueApi,

                  DbgUiMaxI

}

CsrGetProcessLuid(

                  HANDLE ProcessHandle,

                  PLUID LuidProcess

                  );*/

 

//added by David

#define PCSR_API_ROUTINE ULONG

#define PCSR_1P_API_ROUTINE ULONG

#define PCSR_SERVER_CONNECT_ROUTINE ULONG

#define PCSR_SERVER_DISCONNECT_ROUTINE ULONG

#define PCSR_SERVER_ADDTHREAD_ROUTINE ULONG

#define PCSR_SERVER_DELETETHREAD_ROUTINE ULONG

#define PCSR_SERVER_INITTHREAD_ROUTINE ULONG

#define PCSR_SERVER_EXCEPTION_ROUTINE ULONG

#define PCSR_SERVER_HARDERROR_ROUTINE ULONG

#define PCSR_SERVER_ADDPROCESS_ROUTINE ULONG

#define PCSR_SERVER_SHUTDOWNPROCESS_ROUTINE ULONG

#define PCSR_API_DISPATCH_ROUTINE ULONG

   原来的262行后插入:

//added by David

#define NTCSRAPI

#define PCSR_THREAD ULONG

   原来的276行后插入:

              //added by David

#define PCSR_NT_SESSION ULONG

   原来的298行后插入:

              //added by David

#define PCSR_PROCESS ULONG

   原来的313行后插入:

              //modified by David

#define PDBGSS_DBGKM_APIMSG_FILTER ULONG

   原来的319-320行更改为:

              OUT PCSR_PROCESS *Process,

              IN ULONG NTCSoutine OPTIONAL,

   原来的337行后插入:

              //added by David

#define PDBGUI_WAIT_STATE_CHANGE ULONG 

 

posted on 2010-01-07 14:58  cgwolver  阅读(2695)  评论(0编辑  收藏  举报

导航