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

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

了解更多:crates.io GitHub

Rust中的插件

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

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

何为动态加载?

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

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

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

来自man dlopen的示例:

#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
// Defines LIBM_SO (which will be a string such as "libm.so.6")
#include <gnu/lib-names.h>// the type signature used by our cosine function
typedef double (*trig_func)(double);int main() {char *error;// load the libm library into memoryvoid *handle = dlopen(LIBM_SO, RTLD_LAZY);// handle loading failuresif (!handle) {fprintf(stderr, "unable to load libm: %s\n", dlerror());return EXIT_FAILURE;}// Clear any existing errorsdlerror();// get a pointer to the "cos" symbol and cast it to the right typetrig_func cosine = (trig_func) dlsym(handle, "cos");// were we able to find the symbol?error = dlerror();if (error != NULL) {fprintf(stderr, "cos not found: %s\n", error);return EXIT_FAILURE;}// use our cosine functionprintf("cos(2.0) = %f\n", (*cosine)(2.0));// cleanup and exitdlclose(handle);return EXIT_SUCCESS;
}

其中LoadLibraryA\(\), GetProcAddress\(\)以及FreeLibrary\(\)分别代替了dlopen()dlsym()dlclose()

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.toml[dependencies]区域配置Cargo,使其依赖于不同的crates,例如在crates.io中的crates。还可以通过多种方式配置crates的依赖,例如,如果您依赖serde并启用该crates,则derive的特征将如下所示:

serde = { version = "1.0", features = ['derive'] }

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

serde1 = { version = "1.0", features = ['derive'], package = "serde" }

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

serde1 = { version = "1.0", features = ['derive'] }

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

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

阅读原文了解更多

使用Rust构建Azure IoT Edge安全防护程序

Azure IoT Edge是Microsoft Azure IoT团队的开源跨平台软件项目,旨在解决从云管理到本地网络边缘的计算分发管理问题。

该安全防护程序引导Azure IoT Edge的运行。它充当Azure IoT Edge运行时与许多主机服务(例如容器运行时和基于硬件的加密设备,硬件安全模块(HSM)和受信任的平台模块(TPM))之间的通信代理。

了解更多: 网站原贴 GitHub

Cyclone的深远影响

2001年,Trevor Jim(AT&T的研发公司)和Greg Morrisett(康奈尔公司)发起了一个联合项目,以开发C编程语言的安全方言,这是早期的有关Typed Assembly Language的成果 。经过五年的努力和参阅了一些已发表的论文,该团队(包括Dan Grossman,Michael Hicks,Nik Swamy和其他人)发布了Cyclone 1.0。随后,开发人员继续开展了一系列工作。

阅读原文了解更多

【招聘】在日本的RUST实习

关于我们:Tsuru Capital是总部设在东京的权益基金。这家公司规模虽小但实力雄厚,专门开发自动期权交易。公司文化宽松,员工有很大的个人自由。目前大多数软件都是用Haskell编写的,但是一些新组件是用Rust编写的。

关于工作:通常,实习生会在公司待上3~6个月。您将住在东京(我们将帮助您找到公寓并安顿下来)。与大多数实习不同,这里薪水高,还可以休假。因此,如果您愿意,您将有足够的时间和金钱来日本做一些旅行。在最后,您有可能获得我们永久性的offer。实习生没有任何与交易相关的岗位,因此实习期的全部时间都是在编写软件。您将使用Rust编写,并且可能会在新的市场模拟环境中工作。办公语言是英语。如果您想在这里学习日语,我们每周会在办公室开设一次课程。如果您想了解Tsuru的实习情况,请在r/haskell中询问。这是我们第一次提供Rust实习。

关于您的背景:从博士学位到大学刚毕业、或是大学一年级的学生、以及从事专业软件编写多年的人都可以。我们并不是专门寻找应届毕业生,对教育、经验、居住国家等没有严格的要求,只要您满足条件能够让我们能帮助您取得日本签证即可。虽然有时这可能是一个问题,但通常情况下都是成功的。您不需要任何先前的财务知识或经验。我们将在前两个星期内举办一系列的讲座来让您快速入门,如果您想更深入地了解我们,我们还提供很多文献。最重要的是您需要具备Rust编程的能力,您还需要能够说一口流利的英语。

如何申请:在Tsuru Capital 的网站上有一个页面描述编程挑战。使用Rust完成它。将您的提交和简历等发送到jobs@tsurucapital.com。如果一切顺利,我们将安排视频聊天面试。


From 日报小组 @Lance

日报订阅地址:

独立日报订阅地址:

  • Telgram Channel

  • 阿里云语雀订阅

  • Steemit

  • GitHub

社区学习交流平台订阅:

  • Rust.cc论坛: 支持rss

  • Rust Force: 支持rss

  • 微信公众号:Rust语言学习交流

【Rust日报】2019-10-01 - Shawl: 一个能够将一切应用程序运行为Windows服务相关推荐

  1. 【Rust日报】2022-03-22 fluent-uri:一个快速、简单和严格的URI解析器

    fluent-uri:一个快速.简单和严格的URI解析器 Announcing fluent-uri: a fast, easy and strict URI parser 简介 一个严格遵守IETF ...

  2. 【Rust 日报】2022-10-23 tachyonix:一个高性能异步计算框架

    tachyonix:异步多生产单消费有界通道 这个库是 Asynchronix 的一个分支,它持续努力地构建用于系统仿真的高性能异步计算框架. 这是一个简洁的异步通道,以快速著称,但也不会在正确性和质 ...

  3. 【Rust日报】2021-10-19 rs-merkle:一个用Rust编写的高级散列树库

    rs-merkle:一个用Rust编写的高级散列树库 rs_merkle: an advanced hash tree library for Rust rs-merkle是一个高级的Rust mer ...

  4. 2019.10.26日常总结兼一码学成普及模拟4比赛选解

    [题目A]: [题目]: 有 n 只袋鼠(题目假设他们都是母的),你需要给他们组建成家庭. 对于第 i 只袋鼠来说,它的大小用一个数字 Si 来表示. 如果第 i 只袋鼠的大小 Si 达到了第 j 只 ...

  5. 新建第一个windows服务(Windows Service)

    首先,请原谅我是一个小白,一直到前段时间才在工作需要的情况下写了第一个windows服务.首先说一下为什么写这个windows服务吧,也就是什么需求要我来写这么一个东西.公司的项目中,需要一个预警功能 ...

  6. 一个完整的Installshield安装程序实例

    一个完整的Installshield安装程序实例-艾泽拉斯之海洋女神出品(一)---基本设置一 前言 Installshield可以说是最好的做安装程序的商业软件之一,不过因为功能的太过于强大,以至于 ...

  7. 一个完整的Installshield安装程序实例—艾泽拉斯之海洋女神出品(四) --高级设置二...

    一个完整的Installshield安装程序实例-艾泽拉斯之海洋女神出品(四) --高级设置二 原文:一个完整的Installshield安装程序实例-艾泽拉斯之海洋女神出品(四) --高级设置二 上 ...

  8. 【Rust日报】 2019-08-01:brpc-rs - X-lab 实验室新推出的一个rpc库

    paperclip - OpenAPI 规范的 Rust 实现 在完成后,它会实现: Rust 中的服务器端.客户端和命令行端的高效的.编译时检查的.类型安全的 HTTP API 的生成: 支持处理. ...

  9. rust主播排行_「Rust日报」2019每周精选 • 第四期

    前言: 从2018年开始,我每天会花1个小时关注Rust社区动态,并且在Rust.CC论坛.tg channel.Steemit.GitHub.语雀订阅都开通了Rust日报,分享我每天的见闻,偶尔也夹 ...

最新文章

  1. Java对异常处理或抛出之后,后面代码会不会再执行?
  2. 阿里云安装JDK1.7
  3. 程序包android.support.annotation不存在_efcore技巧贴也许有你不知道的使用技巧
  4. 飞秋教程:文件断点续传
  5. php preg_match正则匹配中文-有深意
  6. Meta Company在公开信中谴责Facebook改名
  7. Java优雅的记录日志:log4j实战篇
  8. 大数据之-Hadoop3.x_MapReduce_FileInputFormat切片机制---大数据之hadoop3.x工作笔记0106
  9. 简单的php cms,30个很棒的PHP开源CMS内容管理系统
  10. WIN10显示汉字都有问题?
  11. docker中 system limit for_java中的split函数的坑
  12. C/C++[codeup 2003, 2056]图形输出
  13. 用 SwiftUI 实现一个开源的 App Store
  14. FREQCON OVERSPEED 1.2 368U4 204S
  15. 服务器主板内存频率修改,小白也能玩超频 手把手教你将内存频率提升1100MHz
  16. 华为敏捷/DevOps实践:如何开好站立会议
  17. 全排列(下一个排列,算法)
  18. 机器学习中的分类算法
  19. mongodb去除重复的数据(二)
  20. 解决wine 1.35 无法发声问题

热门文章

  1. 超高频工业PDA手持机的应用方案
  2. 【2020算法练习一】笔试选择题 快手2020校园招聘秋招笔试--算法A试卷
  3. 阿里云部署Django项目发送邮件时,端口25,465,587上的坑
  4. matlab半实物仿真,半实物仿真系统及半实物仿真方法
  5. mysql之sql语法
  6. 【Kotlin】学习小记-基础篇
  7. lintcode落单的数
  8. vue中实现Excel导入导出功能
  9. linux驱动之总线详解
  10. form layui 同时提交多个对象_layui实现form表单同时提交数据和文件的代码