BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

评估Microsoft自动插入遥测函数到C++二进制程序中

| 作者 Jeff Martin 关注 16 他的粉丝 ,译者 刘嘉洋 关注 0 他的粉丝 发布于 2016年6月15日. 估计阅读时间: 4 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

最近,Reddit用户“sammiesdog”回复称Visual Studio的编译器会自动添加调用Microsoft遥测服务的函数。评论所附屏幕截图显示了一个非常简单的5行的CPP文件自动产生的汇编语言文件中,包含了一个叫“telemetry_main_invoke_trigger”的函数。

接下来的讨论围绕着如何禁用这个突如其来的“功能”,同时用户们揣测了这个功能的用意。用户“sammiesdog”注意到该功能出现在发布模式中,而用户“ssylvan”指出它还会出现在调试模式中。遥测函数好像是与ETW通信。

用户“xon-xoff”在回复中表达了他们对于相关线程的担忧:

你是正确的,ETW本身仅记录事件。这本身不是一个问题,但是问题出在这些环节:

  • ETW有时可以作为遥测的解决方案的一部分。
  • 当CRT静态连接到程序时,这些事件来自于程序本身。
  • 它被称为遥测。

在为本文进行研究的过程中,作者可以看到用户“sammiesdog”使用以下CPP代码,由Visual Studio 2015 Update 2编译时所报告的遥测功能调用。

#include "stdafx.h"
#include 

int main()

{
    return 0;

}

当项目在Windows 7和 Windows 10操作系统下编译的时候,可以在调试和发布模式发现telemetry_main_invoke_trigger。

在这个功能发现之后引发了异常热烈的争论和讨论,Microsoft Visual C++团队的开发经理Steve Carroll对此发表了回应。他在声明中明确表示这个功能将会在Visual Studio 2015’s Update 3中被移除。Carroll接着讨论了Microsoft有关于这个功能的一些想法:

…代码的功能是触发ETW事件,当它被触发时,将会发出时间戳和模块加载事件。事件的数据仅仅代表着一个用户给我们提供了符号信息(比如说PDBs),这些数据仅适用于积极寻求我们帮助,并愿意将PDBs作为调查数据的一部分与我们分享的用户。我们从没有真正地用过这个办法,到目前为止我们都依赖于现有的方法来调查并解决潜在的问题。

同时,有拷贝VS2015 Update 2并希望关闭目前被编译到代码中的遥测功能的用户必须添加“notelemetry.obj”到其链接器命令行中。(这个修复方法得到了Carroll的确认)。

InfoQ向Microsoft确认了这个默认行为是否出现在Visual Studio “15”中,根据一位Microsoft发言人表示,这个行为现在确实存在在“15”中,在将来的预览版中将会被删除。然而,确切的移除时间表还没有确认。VS2012和VS2013不包括这种遥测行为。

查看英文原文Reviewing Microsoft's Automatic Insertion of Telemetry into C++ Binaries


感谢夏雪对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT