首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Shawl:一个能够将一切应用程序运行为Windows服务

Shawl: 将一切应用程序运行为Windows服务

Shawl是一个用Rust编写的能够将任何程序作为Windows服务运行的包装程序。它可以处理Windows服务的API,因此您原本的程序只需要响应 或者。创建需要作为服务来运行的项目,只需将Shawl与您的项目捆绑在一起,将其设置为入口点,然后通过CLI传递指令来运行。

了解更多:crates.io GitHub

Rust中的插件

Rust语言为我们提供了许多非常强大的工具,为应用程序提升了灵活性和可扩展性(例如特征、枚举、宏等),但是所有这些都是在编译时完成的。但是为了获得我们所希望的灵活性,我们希望能够在运行时添加新功能。

这可以使用一个称为动态加载的技术来实现。

何为动态加载?

动态加载是所有主流操作系统提供的一种可以在运行时加载库的机制,以便用户检索函数或变量的地址。然后可以像使用其他任何指针一样使用这些函数和变量的地址。

在* nix平台上,函数用于将库加载到内存中,然后能够让您通过其符号名称获取指向某变量的指针。需要记住的一点是,符号不包含任何类型信息,因此调用者必须将指针转换为正确的类型。

通常,通过与某种类型的协定提前完成加载库来完成.例如,头文件需要声明""函数为 .

来自的示例:

其中, 以及分别代替了,和。

libloading提供了一个高品质的Rust接口以及底层平台的动态加载机制。

阅读博客原文了解更多。

使用Rust制作RISC-V操作系统

详细教程请参阅http://web.eecs.utk.edu/~smarz1/osblog/

Cargo安全问题

最近,Rust团队收到了有关使用旧版Cargo构建crates的安全问题的反馈,这些crates使用了新版Cargo中添加的软件包重命名功能。如果您使用的是2018年5月10日发布的Rust 1.26.0,则不会受到影响。

此漏洞的CVE为CVE-2019-16760。

问题概述

可以通过和区域配置Cargo,使其依赖于不同的crates,例如在crates.io中的crates。还可以通过多种方式配置crates的依赖,例如,如果您依赖并启用该crates,则的特征将如下所示:

Rust 1.31.0 引入了Cargo的新功能 ,这是一个在本地重命名crates的可选方法。例如,如果您在本地更喜欢使用,可以将进行更改:

正是由于添加了密钥,Cargo才以不同的方式编译crates。该功能最初是在Rust 1.26.0中实现的,但当时还不稳定。但是,对于Rust 1.25.0及更低版本,Cargo会忽略这个package关键字,并将依赖项行编译为:

这意味着,当使用Rust 1.25.0及更低版本进行编译时,它将尝试下载 crates。黑客可以将的名字建立在crates.io上,虽然长得像但是却是恶意的代码。

总而言之,在Rust 1.25.0及更低版本中,将忽略使用关键字来重命名依赖项。使用Rust 1.25.0及更高版本时,Cargo会忽略并下载错误的依赖关系,而该依赖关系可能被crates.io认为是恶意软件包。这不仅会影响您自己在本地编写的清单,还会影响发布到crates.io的清单。例如,如果您发布的crates依赖于crates.io上的,则添加了您的依赖项的用户如果使用Rust 1.25.0及更低版本,也可能会受到攻击。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191001A0HSI800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券