首页
社区
课程
招聘
未解决 VS编译 一个空DLL 为什么如此多的导入表 怎样可以不导入不必要的函数 66.00雪花
2019-2-22 17:06 4563

未解决 VS编译 一个空DLL 为什么如此多的导入表 怎样可以不导入不必要的函数 66.00雪花

2019-2-22 17:06
4563
收藏
点赞0
打赏
分享
最新回复 (8)
雪    币: 189
活跃值: (267)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Niceto 2019-2-22 17:06
2
0
我的VS是2017 企业版本
雪    币: 19
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
大bumblebee 2019-2-26 14:28
3
0
参考这里 因为有默认的 _DllMainCRTStartup  https://docs.microsoft.com/en-us/cpp/build/run-time-library-behavior?view=vs-2017#default-dll-entry-point-_dllmaincrtstartup 
最简单的方法就是在Release环境下在link中入口点设置为DllMain 就可以了
雪    币: 26
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
邓dg 2019-2-26 18:25
4
0
我知道
雪    币: 1787
活跃值: (340)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yezhulove 2019-2-28 10:49
5
0
不用C++。把CRT代码去掉,就没多余的导入了。
上传的附件:
雪    币: 6703
活跃值: (2611)
能力值: ( LV4,RANK:52 )
在线值:
发帖
回帖
粉丝
不对 2019-2-28 11:10
6
0
因为C++编译出来的东西是有头部代码的,头部代码里面使用了系统函数,就会被写进导入表里面,如果不需要导入表,可以考虑直接用汇编进行写,自己动手搜寻Kernel32.dll
雪    币: 1573
活跃值: (183)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
Thvoifar 1 2019-3-26 07:05
7
0
楼上说得很对,用C++编译环境编译时,会编译进很多系统DLL,若不想要这些导入表,用汇编搜索获得Kernerl32.dll的基址,然后其他一切API的地址也就都有了
雪    币: 205
活跃值: (2659)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 2 2019-3-28 16:09
8
0
使用自定义入口可以达到你的需求。
但是自定义入口的话,使用c语言库函数会崩,只能使用API,除非自己手动初始化c运行库
雪    币: 184
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yueyetu 2019-12-4 22:13
9
0
来围观一下
游客
登录 | 注册 方可回帖
返回