写点什么

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

2016 年 6 月 14 日

最近,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 <iostream>
int main()
{
return 0;
}
</iostream>

当项目在 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 )关注我们。

2016 年 6 月 14 日 19:00779
用户头像

发布了 217 篇内容, 共 51.4 次阅读, 收获喜欢 69 次。

关注

评论

发布
暂无评论
发现更多内容

数据湖应用解析:Spark on Elasticsearch一致性问题

华为云开发者社区

大数据 spark elasticsearch 数据湖 华为云

第7周总结:性能

慵秋

为啥Underlay才是容器网络的最佳落地选择

博云技术社区

云计算 容器 容器网络

秒懂云通信:选云通信到底哪家强?

巨侠说

云通信 通信云

程序设计理念-CentOs7实践Nginx-带来安装服务的通用法则

图南日晟

Nginx PHP-FPM 架构设计 环境安装

web 性能压测工具

Z冰红茶

百度大脑OCR技术助力钢铁物流实现智能管理

百度大脑

人工智能 百度大脑 文字识别

第7周-作业1

seng man

漫画:如何证明sleep不释放锁,而wait释放锁?

王磊

Java Wait Sleep

进击的 Flink:网易云音乐实时数仓建设实践

Apache Flink

flink

BIGO海量小文件存储实践

InfoQ_3597a20b53cc

【小白学YOLO】YOLOv3网络结构细致解析

华为云开发者社区

人工智能 网络 物体检测 华为云 网络层

百度人脸算法“飞速迭代”,多模态活体检测V3.1获银行卡检测中心增强级认证

百度大脑

人工智能 人脸识别 百度大脑

前浪出新招,996已过时,互联网员工都开始住公司了!(爆公司信息)

程序员生活志

加班 996 007 互联网公司

【数据结构】Java 常用集合类 ConcurrentHashMap(JDK 1.8)

Alex🐒

Java 源码 数据结构 并发编程

英特尔唐炯:竞争推动PC行业良性发展,促使英特尔前行

飞天鱼2017

http请求压测工具

潜默闻雨

计算机网络基础(八)---网络层-路由概述

书旅

计算机网络 网络协议 计算机基础 AS

挑战10的1,143,913次方种算法组合:这都不是事儿!

华为云开发者社区

华为 算法 进化 华为云

web压力性能测试

周冬辉

压力测试

架构训练营第七周作业

张锐

Kubernetes的拐点助推器:左手开源,右手边缘计算

华为云开发者社区

Kubernetes 容器 边缘计算 容器技术 华为云

BIGO | Likee深度推荐模型的特征工程优化

InfoQ_3597a20b53cc

人工智能

API网关——Kong实践分享

博云技术社区

云计算 容器 PaaS API

创业使人成长系列 (4)- 常用账号申请

石云升

支付宝 微信商户 商标

技术​选型的艺术

YourBatman

技术选型 湖北

PV与UV你的网站也可以

北漂码农有话说

关于数据库索引的知识点,你所需要了解的都在这儿了

鄙人薛某

MySQL 索引结构 索引 MySQL优化

原生Ingress灰度发布能力不够?我们是这么干的

博云技术社区

云计算 容器 云原生 PaaS

为什么我们要自主开发一个稳定可靠的容器网络

博云技术社区

云计算 PaaS fabric 容器云

架构感悟 7- 性能优化何为

旭东(Frank)

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

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