c语言怎么连接库,C语言库函数的连接

以前没怎么注意这个,知道今天搞驱动的时侯才注意到!我在debugman上自问自答,这里在写的详细一点:

现在最新的WDK6001.18002,改了驱动入口点

/entry:GsDriverEntry@8

“Windows Vista and Windows Server 2008 x86 Checked”的驱动连接了

1>E:/WINDDK/6001~1.180/lib/wlh/i386/BufferOverflowK.lib

1>E:/WINDDK/6001~1.180/lib/wlh/i386/ntoskrnl.lib

1>E:/WINDDK/6001~1.180/lib/wlh/i386/hal.lib

1>E:/WINDDK/6001~1.180/lib/wlh/i386/wmilib.lib

用WDK(6001.18002)编译的,但其实的编译器是vs2005的!

VC6的C库函数连接

/MD link with MSVCRT.LIB                 /MDd link with MSVCRTD.LIB debug lib

/ML link with LIBC.LIB                   /MLd link with LIBCD.LIB debug lib

/MT link with LIBCMT.LIB                 /MTd link with LIBCMTD.LIB debug lib

VS2008、VS2005、WDK6001的C库函数连接

/MD 与 MSVCRT.LIB 链接

/MT 与 LIBCMT.LIB 链接                  /MDd 与 MSVCRTD.LIB 调试库链接

/MTd 与 LIBCMTD.LIB 调试库链接

其实VC6的很多参数,到后来都有改动!!

C库函数是由编译时(CL)的上面几个参数指定的(这几乎被ms定死)

/Zl  从.obj 文件中移除默认库名(仅限 x86),VC6中没有

/NODEFAULTLIB    //Link的时侯忽略obj中指定的默认库

但奇怪的是编译驱动的时侯没有指定任何C库函数,其实这里真正的奥秘是:

/Oi  生成内部函数

弄了个例子,(没有加/Oi)

正在链接...

1>11.obj : error LNK2019: 无法解析的外部符号 _memcmp,该符号在函数 _main 中被引用

1>11.obj : error LNK2019: 无法解析的外部符号 __RTC_CheckEsp,该符号在函数 _main 中被引用

1>11.obj : error LNK2001: 无法解析的外部符号 __RTC_Shutdown

1>11.obj : error LNK2001: 无法解析的外部符号 __RTC_InitBase

1>LINK : error LNK2001: 无法解析的外部符号 _mainCRTStartup

正在链接...(加/Oi)

1>11.obj : error LNK2001: 无法解析的外部符号 __RTC_Shutdown

1>11.obj : error LNK2001: 无法解析的外部符号 __RTC_InitBase

1>LINK : error LNK2001: 无法解析的外部符号 _mainCRTStartup

1>./Debug/11.exe : fatal error LNK1120: 3 个无法解析的外部命令

豁然开朗:

_disable

_outp

fabs

strcmp

_enable

_outpw

labs

strcpy

_inp

_rotl

memcmp

strlen

_inpw

_rotr

memcpy

_lrotl

_strset

memset

_lrotr

abs

strcat

可以intrinsic那么多函数啊,,哈哈……

其实用IDA分析obj文件也能看出点名堂来……

换句话说,如果调用上面名单之外的库函数,而ntosknrl又没导出的,就不行了…………

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值