开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3157|回复: 2
收起左侧

[技术专题] 【简单静态支持库开发】一、简单认识 Visual C++

[复制链接]
结帖率:100% (26/26)
发表于 2018-6-7 03:00:51 | 显示全部楼层 |阅读模式   海南省三亚市
这个标题写得有点大,实际上本文只是结合易简单认识一下 Visual C++ .




导语
本文结合易简单认识一下 Visual C++ .
作为一个 IDE, VS 常被冠以“宇宙IDE”的称号, 发展到如今的 VS2017, 其强大完全不是我能窥一豹的, 但是此处, 仅对于易而言, 我们只谈关于静态编译这一小部分(而且是这一小部分之中的一小部分, 有点拗口但确实如此).
编译器
Visual C++ 的编译器 通常cl.exe, 当然并不全是如此, 例如 VS2015 开始支持 clang 编译.
链接器
Visual C++ 的链接器 通常link.exe, 同理也并不全是如此.
对应易的静态编译
我们在这里”抽象”一下, 假设整个静态编译的过程只由 编译器链接器 组成, 那么, 易的静态编译对应 Visual C++ 的静态编译就是:
* 编译器的工作归 e.exe 完成
* 链接器的工作归 link.exe 完成

如果对此过程不够清晰直观, 那么跟随我来做这样的操作:
* 新建一个 .e , 不用写什么代码, 默认即可
* 打开易的安装目录下的 tools\link.ini(注意:如果第一步是用非管理员权限打开的 e.exe, 那么 link.ini 在 *%USERPROFILE%\AppData\Local\VirtualStore\Program Files (x86)\e\tools\link.ini)
* 修改 show_command_line=yes
* 修改 retain_intermediate_files=yes
* 保存 link.ini
* 回到第一步新建的 .e, 选择静态编译


可以观察到输出了一段命令行:
命令行:"C:\Program Files (x86)\e\linker\VC98linker\bin\link.exe" "D:\BackUp\E\1.obj" "C:\Program Files (x86)\e\static_lib\krnln_static.lib" kernel32.lib user32.lib gdi32.lib winmm.lib msimg32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib "D:\BackUp\E\1.res" /LIBPATH:"C:\Program Files (x86)\e\static_lib" /nologo /machine:I386 /subsystem:windows /out:"D:\BackUp\E\1.exe"

很容易理解: 实际上就是调用 link.exe 对编译器(也就是 e.exe)生成的 .obj 进行链接, 得到最终的可执行文件. 换句话说, 如果在此处将生成的 “D:\BackUp\E\1.exe” 删除, 然后在 cmd 中执行上面的命令行, 一样能成功生成 “D:\BackUp\E\1.exe”.
同时我们可以发现
"D:\BackUp\E\1.res"



这两个文件由于 retain_intermediate_files 参数的设置, 没有在编译完成后被删除.
其中 .obj 文件就是编译器生成的 目标代码, 而 .res 文件则是资源文件, 里面有图标等资源, 关于这个我在 在编译的时候修改掉默认的”易”图标以及”易语言程序”的描述 这个帖子中有简单的反编译利用, 我也不甚擅长不在此讨论.


补充内容 (2018-6-9 11:50):

评分

参与人数 1精币 +1 收起 理由
被封禁言 + 1 支持开源~!感谢分享

查看全部评分


结帖率:46% (6/13)

签到天数: 1 天

发表于 2018-7-17 21:52:30 | 显示全部楼层   山西省忻州市
精品  谢谢楼主给大家分享
回复 支持 反对

使用道具 举报

结帖率:50% (3/6)
发表于 2018-6-14 17:22:02 | 显示全部楼层   福建省泉州市
能否换其它编译器呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表