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

访客5年前关于黑客接单1186
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]黑客接单网

相关文章

某HR业务网站逻辑漏洞挖掘案例以及POC编写思路分享-黑客接单平台

东西预备 BurpSuiteFree (或许咱们最喜爱最常用的抓包神器,需求Java环境); 火狐浏览器(个人比较喜爱的浏览器;360/Chrome等浏览器都能够); SwitchyOmega插件(设...

Web爬虫:多线程、异步与动态署理开始

在收集数据的时分,经常会碰到有反收集战略规矩的WAF,使得原本很简略工作变得复杂起来。黑名单、约束拜访频率、检测HTTP头号这些都是常见的战略,不按常理出牌的也有检测到爬虫行为,就往里注入假数据回来,...

用于浸透测验WordPress的Ruby结构:WordPress Exploit Framework

这个Ruby结构包括一些能够浸透测验WordPress网站和体系的模块,用户也能够自己开发模块扩展其功用。 运转它需求什么条件? 保证体系上装置了Ruby 2.2.x,翻开一个指令行窗口,切换当时目录...

电商安全无小事,怎么有效地抵挡 CSRF 进犯?

 现在,咱们绝大多数人都会在网上购物买东西。可是许多人都不清楚的是,许多电商网站会存在安全缝隙。比方乌云就通报过,国内许多家公司的网站都存在 CSRF 缝隙。假如某个网站存在这种安全缝隙的话,那么咱们...

服务器遇到大流量进犯的处理进程

 事例描述 早上接到 IDC 的电话,说咱们的一个网段 IP 不断的向外发包,应该是被进犯了,详细哪个 IP不知道,让咱们检查一下。 按理剖析及解决办法 首要咱们要先确定是哪台机器的网卡在向外发包,还...

Pastebin Hacking新姿态:运用jQuery替换进行歹意软件传达

跟着各种网络技能不断发展,黑客关于网站进犯也总是不断改换战略以及通过相互之间的交流来改善进犯技能。而事实上就现在网站安全方面,面对的应战首要也正是来自于进犯技能不断的演进,使得防护也需不断晋级。在之...