关于link的一些东西, 摆脱default lib
来源:互联网 发布:现货源码 编辑:程序博客网 时间:2024/06/05 04:49
感觉写一些恶意程序会有点用
用cl 编译一个东西,啥头文件都不引用,随便用个反汇编器打开,一看,一大堆代码,而你仅仅写了一个main函数.
why ?
答案是编译的时候自动连接到default lib 了,会启动crt 代码,完成一些初始化工作
,具体可见源代码
这里说明一下,exe文件进内存后执行的第一条指令由pe文件的EntryPoint 来指明.
咋摆脱default lib 呢
link 链接器上做文章, cl m.c /link /nodefaultlib
D:/asm/1>cl m.c /link /NODEFAULTLIB
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
m.c
Microsoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:m.exe
/NODEFAULTLIB
m.obj
LINK : error LNK2001: unresolved external symbol _mainCRTStartup
m.exe : fatal error LNK1120: 1 unresolved externals
这样以后,会报错,无法链接到_mainCRTStartup
我们可以指定一个入口点, /entry
D:/asm/1>cl m.c /link /NODEFAULTLIB /entry:main
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
m.c
Microsoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:m.exe
/NODEFAULTLIB
/entry:main
m.obj
一个例子,
D:/asm/1>cl m.c /link /NODEFAULTLIB /entry:main kernel32.lib
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
m.c
Microsoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:m.exe
/NODEFAULTLIB
/entry:main
kernel32.lib
m.obj
编译以后看导入表,没有多余的函数,很简洁.
不过不用default lib的代价是c语言库函数是没法用了,像printf这种,但是,windows下完全可以用api来替代! 比如上面用lstrlen来代替了strlen ,链接的是写上kernel32.lib ,api 文档上注明了每个api 引用的库,下面是msdn 的截图
Function InformationMinimum DLL Version kernel32.dllHeader Declared in Winbase.h, include Windows.hImport library Kernel32.libMinimum operating systems Windows 95, Windows NT 3.1Unicode Implemented as ANSI and Unicode versions.
- 关于link的一些东西, 摆脱default lib
- 关于player的一些东西
- 关于Rss的一些东西
- 关于招聘的一些东西
- 关于log4j的一些东西
- 关于memset的一些东西
- 关于电子邮件的一些东西
- 关于sscanf的一些东西
- 一些关于hibernate的东西
- 关于emacs的一些东西
- 关于javaScript的一些东西
- 关于wlan的一些东西
- 关于bsp的一些东西
- 关于补码的一些东西
- 关于友元类的一些东西
- 关于一些语法的东西
- 关于iBeacons的一些东西
- 关于UIPageControl的一些东西
- 一位程序员的忠告(转)
- Base64 解密,加密文件或者字符串 [本人加了字符串加解密]
- 使用skyeye编译u-boot
- cross compiler Toolchain(交叉编译工具链)的建立
- 两个最常见的“404错误”以及解决方法
- 关于link的一些东西, 摆脱default lib
- GSM
- C语言的指向数组的指针
- Flex编程有感
- CDMA与GSM的区别
- JSTL使用说明
- 去掉windows图标上的箭头
- 市场经济和中国国情
- .net winform下 C#/VB.NET项目代码行数统计(2009-6-25新版本)