能力值:
( LV2,RANK:10 )
|
-
-
2 楼
笔记:为ntdll.dll创建移入库ntdll.lib
本来以为很简单的,结果费了一番周折,为了防止下次重蹈覆辙,记个笔记。
一开始的想法:
1、用impdef或dumpbin生成一个ntdll.dll的模块定义文件ntdll.def;
2、用lib /def:ntdll.def生成ntdll.lib;
3、按网上hacker给出的函数原形写个头文件ntdll.h.
结果编译时说无法链接_LdrLoadDll@16,看起来是__stdcall调用约定修饰名的原因,但是找不到办法将链接时的_LdrLoadDll@16转换到DLL实际输出的名称LdrLoadDll,查def文件格式时有EXPORTS部分的写法:
entryname[=internalname] [@ordinal [NONAME]] [PRIVATE] [DATA]
以为可以用这种方法换名,于是改def文件:
LdrLoadDll@16=LdrLoadDll
重新生成ntdll.lib后程序编译通过,但是运行提示找不到_LdrLoadDll@16入口点,看来这次反过来了,移入库里我名称对了,但还是没对应到DLL实际输出的名称。
想不出办法了,所以到网上搜了一下,发觉原MS在DDK提供了一个ntdll.lib,汗!
最后不知道从哪看到一个说自己建一个dll工程ntdll,然后生成移入库,于是试了试,自己建一个纯win32 dll项目,加一个模块定义文件:
EXPORTS
LdrLoadDll
再在程序里写一个与ntdll.dll里LdrLoadDll原型一样的空函数,编译一下,得到一个ntdll.lib,用这个编译原来的程序,编译通过,运行,
也OK了,用dumpbin看一下生成的ntdll.lib,呵呵,居然它就是用的_LdrLoadDll@16这个名字,但它却能正确的定位ntdll.dll里的LdrLoadDll,搞不明白了,为什么,lib /def:ntdll.def生成的库就不行:(
这方法麻烦点,不过可行,就这样吧,MS的东西,搞不明白的太多了!
|
能力值:
( LV9,RANK:610 )
|
-
-
3 楼
这个库在用Native API时会用到吧。感谢分享!
|
能力值:
( LV8,RANK:130 )
|
-
-
4 楼
直接DDK里面复制一个就行了
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
5 楼
 我自己整理的这个,一直使用,感觉还可以,如果你发现少了哪个API可以手动加进去。lib是从DDK2003下提取的,我一直用Windows 2003,如果你的是Windows XP,不行的话可以换一个。需要的朋友可以下载:
http://bbs.pediy.com/attachment.php?attachmentid=17289&d=1219225831
|
|
|