减少Rust开发的闭源项目中的调试信息-黑客接单平台

访客5年前关于黑客接单1137
Rust是一门体系编程言语,专心于安全,尤其是并发安全,支撑函数式和指令式以及泛型等编程范式的多范式言语。Rust在语法上和C++类似,可是设计者想要在确保功用的一起供给更好的内存安全。 由于Rust有几千行代码,所以我无论怎么都不能自称是Rust专家,但这并不阻碍我对Rust的了解。我十分喜爱Rust的语法,与其他许多言语比较,Rust的详细语法和C,C++类似,都是由花括号限制代码块,还有相同的操控流关键字,例如if,else,while,和for。可是也并非一切的C或许C++关键字被完成了。某些Rust函数(比方关键字match用于形式匹配)关于那些通晓这些言语的人就没那么了解了。尽管与C/C++极端类似,Rust在深层语法上跟元言语宗族的言语像是Haskell更挨近。根本上一个函数体的每个部分都是表达式,乃至是操控流操作符。 大约两个月前,我开端开发一个指令行项目,需求一个像样的规范库。终究成果有必要是一个本地的、静态链接的可履行文件。实际上,我有C / C ++,Rust或Go几种挑选。关于C++来说,STL是不或许的,由于我以为它很糟糕,并且短少许多必需的功用。Qt是一个美丽的C++库,我本来想运用它,可是静态链接需求一个商业Qt答应。最重要的是,在多个操作体系上进行编译需求在每个操作体系上重建静态Qt库,因而需求进行许多额定的作业。 但除此之外,还有一个事实是这个项目开发起来很无聊,我想让它变得风趣。所以当我简略地比较了一下Go和Rust时,就不再考虑它了。出于简化的意图,Go短少了其他言语中存在的许多重要结构。尽管Go的简洁性令人耳目一新并且有其魅力,但我仍是觉得杂乱的Rust包括许多重要的功用。 需求阐明的是,我不喜爱不必要的杂乱性,这便是为什么我没有运用C ++中的大多数新功用。我的意思,功用有必要要完全,可是运用进程要简略。 Rust为自己设定了许多方针,其间一些方针很杂乱,没有垃圾收集器。Rust不像Go,Java以及.NET Framework那样运用主动垃圾收回体系,不同的是Rust经过RAII来办理内存和资源,还可选引证计数。 说了这么多,Rust在许多方面还不是一种老练的言语,不能用于任何像C / C ++这样的项目。别的,它的库没有Go的那么丰厚,在我看来,它的一些规范库的确十分古怪,编译也或许十分慢。 尽管Rust是一种牢靠且安全的言语,运用起来很风趣。但能够确认地说,我现在还没有看到过Rust的详细用例。相反,我能够看到Go的许多用例,而不是Rust的用例。 以下是以我创立的一个样本: fn foo() { panic!("this is an error"); } fn main() { println!("Hello, world!"); foo(); } 它会打印出来许多元数据: Hello, world! thread 'main' panicked at 'this is an error', srcmain.rs:2:2 note: Run with 'RUST_BACKTRACE=1' environment variable to display a backtrace. 假如将RUST_BACKTRACE设置为1,状况会更糟: Hello, world! thread 'main' panicked at 'this is an error', srcmain.rs:2:2 stack backtrace: 0: std::sys_common::backtrace::print at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858/srclibstdsys_commonbacktrace.rs:58 1: std::panicking::default_hook::{{closure}} at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858/srclibstdpanicking.rs:200 2: std::panicking::default_hook at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858/srclibstdpanicking.rs:215 3: std::panicking::rust_panic_with_hook at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858/srclibstdpanicking.rs:478 4: std::panicking::begin_panic 5: std::panicking::try at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858/srclibstdpanicking.rs:276 6: std::panic::catch_unwind at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858/srclibstdpanic.rs:388 7: std::rt::lang_start_internal at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858/srclibstdrt.r s:48 8: main 9: BaseThreadInitThunk 10: RtlInitializeExceptionChain 11: RtlInitializeExceptionChain 我在GitHub的这个线程中发现了这些与闭源项目相关的隐私问题,可是我没有找到任何现成的解决方案。 因而,清楚明了的仅有解决方案是修正Rust编译器,这正是我以下要做的。尽管我在Windows上描述了怎么履行此操作,可是与构建进程无关的部分在Unix上也是有用的。 为了防止这种费事,我简要地研讨了Go,以检查在Go二进制文件中能够找到多少元数据。没想到,Go会打印出比Rust更多的元数据。并且它乃至比Rust更糟糕,连修正编译器也会杯水车薪。 值得一提的另一个原因是,至少在Windows上,Go经过CGo调用c代码的功用时,需求运用mingw编译器,这会导致一系列新的问题。 构建Rust编译器的之一步是下载源代码,你能够从Rust官网或GitHub来下载。然后,你需求Visual Studio 2019或更高版别。文档说的是,Visual Studio版别要在2013年或以上,但我发现有的当地却提到了版别要在2019年或以上。不过,我在运用Visual Studio 2013构建时遇到了困难。所以,我仍是主张运用Visual Studio 2019。[1][2][3][4][5]黑客接单网

相关文章

根据时延的盲道研讨:受限环境下的内容回传信道

在一次缝隙赏金活动中,挖到个指令注入的洞,我先以时延作为证明向厂商提交该缝隙,厂商以国内网络环境差为由(确实得翻墙)拒收,几回交流,奉告若我能取回指定文件 secret.txt 才认可。方针是个受限环...

自己着手打造Fiddler挖洞插件

关于一个Web开发人员来说,Fiddler并不生疏。作为一款Web调试利器,它具有强壮的调试功用,灵敏的装备以及丰厚的可扩展功用。我在开发工作中,最喜爱的便是它的Inspectors和AutoResp...

为什么干流网站无法捕获 XSS 缝隙?

 二十多年来,跨站脚本(简称 XSS)缝隙一直是干流网站的心头之痛。为什么过了这么久,这些网站仍是对此类缝隙束手无策呢? 关于最近 eBay 网站曝出的跨站脚本缝隙,你有什么主意?为什么会呈现这样的漏...

HTML5 安全问题解析

HTML5 安全问题解析 标签: html html5 web安全 本文参阅: w3school:html5相关基础知识(w3school.com.cn)...

DuckDuckGo的研讨宣称谷歌“匿名形式”并非真实的匿名

Google能够给用户供给定制化的搜索成果,即便在匿名形式下也是相同。但DuckDuckGo的研讨人员标明,Google的搜索成果不只依据用户的地理位置数据以及之前搜索过的内容,并且还会依据用户的登录...

浅谈跨域威胁与安全-黑客接单平台

WEB前端中最常见的两种安全危险,XSS与CSRF,XSS,即跨站脚本进犯、CSRF即跨站恳求假造,两者归于跨域安全进犯,关于常见的XSS以及CSRF在此不多议论,仅议论一些不太常见的跨域技能以及安全...