“ 反馈驱动:通过监控样本触发的代码覆盖率,进而改进输入样本以提高代码覆盖率,增加发现漏洞的概率。”
CVE-2022–21907 HTTP 协议栈远程代码执行漏洞,通读关键、蠕虫等描述词引起了我的兴趣。
在Rust源代码中,instsimplify.rs这个文件的作用是实现一系列用于简化MIR(Mid-level Intermediate Representation,中间级中间表示)指令的转换器。
最近利用智能合约代码中的错误进行的攻击造成了严重后果,修复错误并及时部署补丁合约具有很大的挑战性。即时修补尤为重要,因为由于区块链系统的分布式特性,智能合约始终在线,它们还管理着相当数量的资产。这些资产正处于危险之中,并且通常在攻击后无法收回。现有的升级智能合约的解决方案取决于手动过程。本文提出了一个名为EVMPATCH的工具(https://github.com/uni-due-syssec/evmpatch-developer-study ),该工具可立即自动修补错误的智能合约。 EVMPATCH具有用于流行的以太坊区块链的字节码重写引擎,并且透明/自动地将常见的现成合约重写为可升级合约。
Gcov是一个测试C/C++代码覆盖率的工具,伴随GCC发布,配合GCC共同实现对C/C++文件的语句覆盖、功能函数覆盖和分支覆盖测试。
基本块的定义:是指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句。
正如之前看到的,C1的HIR是一个基于静态单赋值的图IR,由基本块构成控制流图,由静态单赋值指令构成基本块,如图8-1所示。
随着业务的迅速发展,业务代码逻辑的复杂度增加。QA 测试的质量对于产品上线后的稳定性更加重要。一般 QA 测试的工作流程分为两大项:自动化测试和人工测试。这两种测试后都需要得到代码覆盖率。自动化测试的覆盖率,在双端都有比较成熟的方案。
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说编译原理笔记(七)之代码优化「建议收藏」,希望能够帮助大家进步!!!
基本块是连续三地址状态的最大序列,其中控制流只能在块的第一个语句中输入,并在最后一个语句中停留,而不会停止或分支。
本文主要介绍如果使用 qemu 和 unicorn 来搜集程序执行的覆盖率信息以及如何把搜集到的覆盖率信息反馈到 fuzzer 中辅助 fuzz 的进行。
为了减少编译时间,C1在抽象解释生成HIR期间,每生成一条SSA指令,都会调用append_with_bci努力尝试若干局部优化。除此之外,HIR构造完成之后,C1还会执行若干轻量级全局优化。本节将详细描述这些优化的执行过程。这些优化都位于build_hir()。
中间表示(Intermediate Representation,IR)是编译器内部用到的表示源码的数据结构。根据它的表达能力,又可以分为高级中间表示(HIR),中级中间表示(MIR)和低级中间表示(LIR)。正如之前提到的,控制流图也是一种相对高级的中间表示,对它的分析和优化无须考虑机器架构的细节,只需要关注控制流本身的意义。
LIR类似于三操作数的实现,但多了一些诸如对象分配和加锁的高级指令。C1遍历HIR的每个基本块,为每个基本块的每条SSA指令生成对应的LIR指令。从HIR到LIR的转换过程由LIRGenerator完成,如代码清单8-15所示。
由于ast的if转成的中间表示的条件跳转是带有两个分支的,因此需要对if后面所跳转到的位置进行重排。
前面提到了经过了词法分析->语法分析->语义分析->中间代码优化,最后的阶段便是在目标机器上运行的目标代码的生成了。目标代码生成阶段的任务是:将此前的中间代码转换成特定机器上的机器语言或汇编语言,这种转换程序便被称为代码生成器。
本文前两节将简要讨论 fuzzing 的基本理念以及 WinAFL 中所用到的插桩框架 DynamoRIO ,而后我们从源码和工具使用角度带你了解这个适用于 Windows 平台的 fuzzing 利
stat命令用于显示文件或文件系统的详细信息。在显示文件信息时,比ls命令更加详细。
首先,on_disk_cache.rs文件位于Rust编译器的compiler/rustc_middle/src/query目录下,其作用是实现Rust编译器的磁盘缓存功能。
并行性是指计算机系统具有可以同时进行运算或操作的特性,在同一时间完成两种或两种以上工作。并行性等级可以分为作业级或程序级、任务级或程序级、指令之间级和指令内部级。
LLVM是lowlevel virtual machine的简称,它诞生于2003.10伊利诺伊大学香槟分校,创始人是ChrisLattner,它是一个完整的编译器框架,它兼容大部分主流开发语言例如:C, C++, Objective-C等等,它也兼容大部分主流的平台:x86, x86-64, PowerPC, PowerPC-64,ARM,Thumb等等。
在Rust编译器的源代码中,文件rust/compiler/rustc_mir_build/src/build/expr/as_place.rs的作用是用于处理表达式的转换为L-value的过程。L-value是指那些可接受赋值操作的表达式,如变量、数组元素或字段等。
能够分析数以百万计自动描述的基本块(计算指令的基本片段),来确切了解不同的芯片机构如何执行计算。
例如上面的%6 = call noundef i32 @_Z9factoriali(i32 noundef 2)函数调用语法,如何找到call的全部使用方法?
与近年来大规模视觉transformers(ViTs)的巨大进步相比,基于卷积神经网络(CNNs)的大规模模型仍处于早期状态。
在Rust源代码中,rust/compiler/rustc_mir_transform/src/simplify.rs文件是Rust编译器中一系列进行MIR(中间表示)简化的转换的实现。MIR是Rust编译器中用于进行优化和代码生成的中间表示。
目前流行的fuzzing(如AFL)通常使用较为简单的coverage information,这种覆盖的不准确和不完整给fuzzing带来了严重的局限性。首先,它会导致路径冲突,从而影响fuzzing挖掘出导致新崩溃的潜在路径。更重要的是,它也会影响fuzzing的最优决策。此外,学术界的大部分研究的是Coverage-guided fuzzing,很少有目光真正的投在Coverage上,所以CollAFL做了这一块的内容。
麻省理工学院的研究人员建立了一个新的基准测试工具,可以准确预测给定代码在计算机芯片上执行所花费的时间,这可以帮助程序员调整代码以提高性能。
今天分享的研究者提出了一种新的基于CNN的大规模基础模型,称为InternImage,它可以从增加参数和训练数据(如ViTs)中获得增益。
本文介绍了对iOS覆盖率检测算法的研究,分享一种可以嵌入到现有开发流程中,并对开发透明的增量代码测试覆盖率工具的实现。
Intel® Processor Trace (Intel® PT) 是在i5/i7 5000以上型号上加入的功能,由于它是硬件级的特性,相比Qemu或Boch,在性能上和代码工作量会占有一定优势。在Linux上可以通过perf来使用PT,可以先简单看是否支持PT:
为了让代码尽可能快地运行,开发人员和编译器(将编程语言转换为机器可读代码的程序)通常使用性能模型,通过模拟给定的芯片体系结构来运行代码。
该系列文章将系统整理和深入学习系统安全、逆向分析和恶意代码检测,文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。漫漫长征路,偏向虎山行。享受过程,一起加油~
在了解集成测试覆盖率实现原理之前,先看看单测覆盖率是如何实现的:go语言采用的是插桩源码的形式,而不是待二进制执行时再去设置breakpoints。这就导致了当前go的测试覆盖率收集技术,一定是侵入式的,会修改目标程序源码。对于下面一段代码
OLLVM(Obfuscator-LLVM)是瑞士西北应用科技大学安全实验室于2010年6月份发起的一个项目,该项目旨在提供一套开源的针对LLVM的代码混淆工具,以增加逆向工程的难度, 只不过Ollvm仅更新到llvm的4.0,2017年开始就没再更新。
神经网络架构和训练、自学习、棋盘对称性、Playout Cap Randomization,结果可视化
对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久。如果在开发、测试阶段能够提前暴露问题,就有助于避免线上事故的发生。代码覆盖率检测正是帮助开发、测试同学提前发现问题,保证代码质量的好帮手。
近几年有赞零售业务快速发展,为了满足日益增多的业务需求,2019年起零售客户端发版改成了每周一次,在质量保障方面,技术团队要面对更大的挑战。故此我们团队做了很多研究,希望通过技术工具来提升移动端测试的质量和效率,这是我们研发移动端精准测试平台的初衷。
导语 | 本文尝试在系统级的编译软件层面,挖掘云应用的性能提升空间。以C/C++应用的反馈优化技术为例,介绍业务和编译技术深度整合后产生的收益和价值,希望给相关业务的探索提供参考。 一、现代云应用特征 云应用特征梳理是一个非常庞大的系统工程,只有云厂商才有机会做全局剖析。一些特征沉淀成专用芯片或专用指令,比如AI芯片和新一代ARM64 CPU中的Matrix乘累加指令,或者一些RISC-V中的Protobuf加速尝试,一些特征驱动系统级的OS/编译软件优化获得普适收益。本次我们主要以典型C/C++应用展开分
当解释器发现热点方法时会调用 CompilerBroker::comple_method()向编译任务队列投递一个编译任务(Compile Task),C1编译器线程发现队列有编译任务时会被唤醒,并拉取编译任务然后进入JIT编译器的世界。目光转向C1编译线程(C1 Compiler Thread),它最开始阻塞在编译任务队列,发现编译任务后被唤醒,经过代码清单8-1所示调用链后开始编译。
最近看到一篇有意思的技术文章:《抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15%》。
C2编译器即Op to Compiler,又叫Server Compiler,它的定位与C1相反:C1面向客户端程序,需要快速响应用户请求;C2面向长期运行的服务端程序,它允许在编译上花更多时间,以此换取程序峰值执行性能。本章将详细讨论大名鼎鼎的C2编译器(后面简称C2)。
论文标题:Toward Fast, Flexible, and Robust Low-Light Image Enhancement
如前所述,VMProtect 2 使用 XOR 操作解密并随后加密推送到堆栈上的相关虚拟地址。特定加密相对虚拟地址的选择是通过移动给定标志使其值为 0 或 8 来完成的。然后,添加VSP到结果移位计算加密的相对虚拟地址所在的地址。
标题:YOLOv10: Real-Time End-to-End Object Detection 论文:https://arxiv.org/pdf/2405.14458et=https%3A//arxiv.org/pdf/2405.14458.zhihu.com/?target=https%3A//arxiv.org/pdf/2405.14458 源码:https://github.com/THU-MIG/yolov10hhttps://github.com/THU-MIG/yolov10ttps://
跟其他常见的编程语言不同,Java将编译过程分成了两个部分,这就对性能带来了一定的影响。而即时(Just In Time, JIT)编译器能够提高Java程序的运行速度。
它构成了选择和菜单组件的基础。 MaterialListComponent类充当提供样式和收集项事件的能力的列表的根节点。
uniFuzzer是一款基于Unicorn和LibFuzzer的闭源模糊测试工具,该工具当前支持对ARM/MIPS架构的32位LSB ELF文件进行模糊测试,而这样的系统架构和平台一般常见于物联网设备上。因此,广大研究人员可以利用uniFuzzer来对物联网设备进行模糊测试。
领取专属 10元无门槛券
手把手带您无忧上云