皮皮网

【登陆dnf源码】【linux源码安装过程】【销客多源码分享】栈迁移源码

时间:2024-11-20 16:47:57 分类:娱乐 来源:最新系统源码

1.Nftables CVE-2023-0179提权利用
2.Spring Cloud 2022 正式发布!栈迁我的移源天,OpenFeign​ 要退出历史舞台了?!栈迁
3.浅析linux 内核 高精度定时器(hrtimer)实现机制(二)
4.购买商城系统时,移源我们是栈迁否要拿到商城系统源码呢?
5.基于升腾AI | Yolov7模型迁移到升腾平台EA500I边缘计算盒子的实操指南
6.全网最细的CMake教程!(强烈建议收藏)

栈迁移源码

Nftables CVE-2023-0179提权利用

       在分析了CVE---Nftables整型溢出漏洞的移源登陆dnf源码成因之后,本文接下来将深入探讨如何利用这一漏洞。栈迁首先,移源了解到payload_eval_copy_vlan函数中存在整型溢出问题,栈迁这使得我们可以将vlan头部结构拷贝至寄存器(NFT_REG_-NFT_REG_)中,移源而该变量位于栈上,栈迁因此可以覆盖到栈上的移源其他变量。

       然而,栈迁观察源码后发现regs变量无法直接覆盖到返回地址。移源进一步分析后发现,栈迁jumpstack变量位于regs变量下方,因此可以利用整型溢出覆盖到jumpstack变量。接下来,我们关注nft_jumpstack结构体,该结构体在nft_do_chain函数中起作用,当状态寄存器被设置为JUMP条件时,程序将跳转至其他chain进行处理。保存完当前chain状态后,程序将跳转至目的chain,即存储在regs.verdict.chain中。

       还原chain的过程涉及通过递减stackptr来取出存储在jumpstack变量中的chain、rule、lastrule,然后进行rule的解析。需要注意的是,在遍历rule时,循环条件为rule < lastrule。因此,在伪造lastrule时,需要确保其值大于rule,否则无法进入循环内部。

       接着,观察nft_rule_dp结构体,发现其中包含用于存储nft_expr结构体指针的八个字节。通过篡改该指针,linux源码安装过程可以劫持程序流程。为了解决这一问题,作者从ctfiot.com/.html中学习了一个技巧:使用ptype /o struct xxx显示结构体信息与偏移。

       构建流程如下:通过漏洞溢出至nft_jumpstack结构体,并修改rule变量指向可控内容的地址。同时,将lastrule值篡改为大于rule的值。接下来,在可控内容中伪造一个nft_rule_dp结构体,篡改第一个八个字节(填充位)和第二个八个字节(函数表指针)的值,使其分别指向可控内容的地址。之后,在该地址处伪造nft_expr,将ops变量指向所需执行的函数。

       分析后得知,通过上述手段可以实现程序流程的劫持。接下来,需要考虑如何伪造上述结构体。在nft_payload_copy_vlan函数中,漏洞点在于将vlan头数据复制到寄存器中,由于vlan头地址低于寄存器地址,导致在复制完vlan头后会覆盖寄存器值。这里,我们可以通过控制NFT_REG_的值来实现对jumpstack结构体的篡改。

       由于可以控制regs变量,首先泄露regs地址,然后在此基础上伪造rule并重新指向jumpstack。这里采用将last_rule设置为函数地址的技巧,以节省八个字节的空间。然而,仅控制八个字节的函数指针不足以构造完整的ROP链,因此需要使用栈迁移。栈迁移的目标是控制一段内存,选择regs作为目标。

       在寻找合适的栈迁移gadget时,作者使用了vmlinux-to-elf工具提取符号表,然后利用ropper工具搜索gadget。但尝试后发现大部分gadget不可用。作者最后尝试使用objdump工具提取gadget,销客多源码分享并通过搜索add rsp.*等指令找到栈迁移的gadget。进一步计算栈顶与regs函数地址的差值,找到相应的栈迁移gadget。

       在提权方面,作者通过覆盖modprobe_path实现提权。选择合适的gadget将rdi设置为modprobe_path,rax设置为覆盖后的路径。然而,在返回到nf_hook_slow函数时,由于设置了rax值导致状态码无法正确设置,程序跳转至NF_DROP分支,导致内核异常。最终,作者在rbp中找到了一个do_softirq函数,并尝试将其作为返回地址。运行后发现程序能够正常返回到用户态。

       最后,验证新用户是否已写入至/etc/passwd文件中,完成提权过程。完整exploit代码可参考github.com/h0pe-ay/Vuln.../poc.c。相关资料参考链接包括github.com/TurtleARM/CV...

Spring Cloud 正式发布!我的天,OpenFeign​ 要退出历史舞台了?!

       大家好,我是栈长。

       今天给大家通报一则框架更新消息,时隔 .x 版本发布一年,Spring Cloud .0.0 最新版发布了,来看下最新的 Spring Cloud 版本情况:

       Spring Cloud 无疑是现在 Java 微服务事实上的标准,完全基于 Spring Boot 构建,依赖 Spring 生态体系,可以很好的与各种 Spring 生态项目无缝对接。

       Maven 依赖先给大家奉上:

       Spring Cloud 依赖管理采用的是 import 导入方式,里面管理了许多依赖,统一引入管理,使用时只需要引入对应依赖的坐标即可,不需要指定版本号。

       Spring Cloud 目前维护着 4 条版本主线:

       关于这些版本线的命名是不是很奇怪?

       另外,还有几天都要 年了,世界怀足球php源码怎么现在才发布 版本?

       其实 Spring Cloud 最新的版本命名方式早已经变更了,以后就是YEAR.x 这种命名方式了,不清楚的可以看下栈长之前写的两篇文章:

       所以说,Spring Cloud .0.0 中的 是指 Spring Cloud .x 版本线,.0.0 则是指 这个版本线的第 1 个版本,而不是指某个年份发布的版本。

       新特性解读

       Spring Cloud .0.0 是一个大版本,更新了太多内容,栈长不打算全部解读,说几个有意思的更新吧。

       完整特性更新参考官方发布文档:

       1、系统环境

       Spring Cloud .0.0 基于以下环境进行构建:

       所以,这也是 Spring Cloud .0.0 的最低依赖要求,升级请小心。

       2、模块升级

       3、Eureka 已经更新到 Eureka 2.0.0

       大家都知道 Eureka 2.x 早已经停止维护了,如该分支最新公告所示:

       github.com/Netflix/eure...

       虽然 Eureka 2.0.0 是 Eureka 的一个新分支,但这个分支与 7 年前的 2.x-archive 旧实验分支无关。

       创建 Eureka 2.x 新分支的目的是为了与 JakartaEE 兼容而已,让 Spring Cloud Netflix 可以兼容 Spring Framework 6.0 和 Spring Boot 3.0,仅此而已。

       4、Spring Cloud OpenFeign 功能完成公告

       由于 Spring 现在提供了自己的 HTTP 接口客户端解决方案,比如在最新的 Spring Boot 3.0 中实现接口调用可以有以下两种解决方案:

       所以,从 Spring Cloud .0.0 版本开始,Spring Cloud OpenFeign 模块已经视为功能完成状态了,这意味着 Spring Cloud 团队将不再向该模块添加新功能。

       虽然 OpenFeign 不会再添加新功能,但还是会继续修复错误和安全问题,并且也还会考虑和审查来自社区的小规模的 pull requests 请求。

       这是不是意味着,在不久的将来,OpenFeign 要退出历史舞台了?

       Spring Cloud 支持版本

       Spring Cloud 支持的版本情况,以及对应的 Spring Boot 版本如下表所示。

       需要注意的是: 正常维护中的版本中有 Spring Cloud + 了,其他的版本已经彻底结束生命周期了,官方不再提供维护支持了,非必要,区块链 挖矿app 源码尽量不要再使用了。

       目前最新的 Spring Cloud Alibaba .0.4.0 还是基于 Spring Cloud .0.4.0,尚未同步更新最新的 Spring Cloud .0.0 版本,这个在栈长的微服务课程中也有说明了,两者的版本不一定完全同步,也可能会跳过。

       总结

       Spring Cloud .0.0 是一个革命性的大版本,依赖的系统环境和模块都有大幅度的更新,特别是 JDK 、Spring 基础框架的最低要求,对于想升级的小伙伴来说无疑是一件难事,国内的应用也都还是以 JDK 8 为主,要迁移到 Spring Cloud 版本恐怕还需要不少的时日。

       Spring Boot 理论和实战源码仓库:

       github.com/javastacks/s...

       你们用的哪个 Spring Cloud 版本呢?欢迎留言分享~

       好了,今天的分享就到这里了,后面栈长我会更新更多好玩的 Java 技术文章和最新的技术资讯,关注Java技术栈第一时间推送,不要走开哦。

       版权声明: 本文系 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,抄袭者一律举报+投诉,并保留追究其法律责任的权利。

浅析linux 内核 高精度定时器(hrtimer)实现机制(二)

       分析linux内核高精度定时器(hrtimer)的实现机制时,首先介绍的是定时器的迁移过程switch_hrtimer_base。该函数会尝试选择一个新的hrtimer_cpu_base结构体,用于定时器的激活。get_target_base函数被用于挑选新的迁移位置,这个函数的代码与分析低分辨率定时器层时的定时器迁移概念相似。timers_migration_enabled变量在切换到NO_HZ模式时变为True,退出NO_HZ模式时变为False,用于判断是否可以进行迁移。只有在切换到NO_HZ模式且定时器未绑定到特定CPU的情况下,才会进行迁移选择。get_nohz_timer_target函数会判断当前CPU是否处于空闲状态,如果不是,则返回当前CPU编号,如果是空闲,则会找到最近一个忙碌的处理器并返回其编号。所有条件不满足时,会直接返回传入的hrtimer_cpu_base结构体指针。

       接下来分析hrtimer_callback_running函数,用于检查要迁移的定时器是否正是当前正在处理的定时器。hrtimer_check_target函数则用于检查定时器的到期时间是否早于要迁移到的CPU上即将到期的时间。如果高分辨率定时器的到期时间比目标CPU上的所有定时器到期时间还要早,并且目标CPU不是当前CPU,那么激活目标CPU会涉及到通知该CPU重新编程定时器,这通常不如直接在当前CPU上激活定时器来得简单。因此,如果迁移操作与实际激活操作没有关系,即使从get_target_base函数获得的base与定时器中指定的base相同,迁移操作也会进行。

       在迁移过程中,内核会临时将定时器的hrtimer_clock_base结构体变量设置为全局变量migration_base的指针。这个全局变量仅用于在获得定时器所属CPU的hrtimer_cpu_base结构体变量时,通过判断base变量是否等于migration_base的指针来判断定时器是否正在迁移。这样的设计可以在未正式加锁之前过滤掉很多情况,从而提高速度。

       文章福利提供Linux内核技术交流群,包含学习书籍、视频资料,前名可额外获得价值的内核资料包(含视频教程、电子书、实战项目及代码)。

       内核资料直通车:Linux内核源码技术学习路线+视频教程代码资料

       学习直通车:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂

       在低精度模式下,高分辨率定时器层通过普通(低分辨率)定时器层驱动。当Tick到来时,其处理函数会调用hrtimer_run_queues函数通知高分辨率定时器层。每次调用该函数时,都会判断是否可以切换到高精度模式。如果可以切换,会调用hrtimer_switch_to_hres完成切换并退出。如果不需要切换,则从时间维护层获得当前时间和各种偏移值,并设置到所有的hrtimer_clock_base结构体中。如果当前时间不早于softirq_expires_next变量的值,表示“软”定时器已到期,需要激活软中断处理程序。在软中断处理程序中,首先调用hrtimer_update_base函数更新当前时间,并在适当时候执行,处理到期的“软”定时器。该处理程序会遍历所有指定类型(“软”或“硬”)的到期定时器,判断定时器的“软”到期时间是否已到,处理到期定时器,并循环取下一个要到期的定时器。最后,会调用hrtimer_reprogram函数对底层定时事件设备进行重编程。

       在高精度模式下,周期处理函数hrtimer_interrupt在定时事件设备到期后调用。处理过程包括激活HRTIMER_SOFTIRQ软中断处理程序,处理所有“软”定时器,并对底层定时事件设备进行重编程。重编程确保设备在到期后能正确触发中断,同时避免在一次中断中处理过多定时器,以防止超时。通过查找和设置到期时间时使用“硬”到期时间,而在处理定时器时使用“软”到期时间,内核能尽量减少中断调用,提高性能。

       低精度模式切换到高精度模式的hrtimer_switch_to_hres函数通过调用tick_init_highres函数实现切换,将定时事件设备切换到单次触发模式,并设置中断处理函数为hrtimer_interrupt。一旦完成切换,底层定时事件设备将始终工作在单次触发模式。切换成功后,必须找到最近到期的定时器,并用其到期事件对定时事件设备进行重编程,确保设备能正确响应到期。

       在高精度模式下,中断处理程序通过直接调用__hrtimer_run_queues函数处理所有“硬”定时器,并激活HRTIMER_SOFTIRQ软中断处理程序来处理所有“软”定时器。在高精度模式下,底层定时事件设备始终处于单次触发模式,因此在到期后必须进行重编程。如果编程失败,重试三次后,适当延迟到期事件后再次尝试编程,并强制执行。

       使用实例展示了高精度定时器在实际应用中的精度,时间戳显示其定时精度可达到ms级别。

购买商城系统时,我们是否要拿到商城系统源码呢?

       当然要,源码对于商城系统的搭建至关重要。

       1、系统体验。为了打造更好的用户体验,我们通常需要做一些相应的调整,这时候就需要修改相应的代码。如果你没有拿到商城系统的源码,那么要修改代码只能找服务商,时效慢,效果差,不利于企业的发展。

       2、功能方面。商城系统在发展的过程中,难免发现需要修改或者添加一个什么功能。自己有源码可以快速操作,没有的话找服务商就要耗费很长一段时间。

       3、数据安全。商城系统的数据对于一个商城系统至关重要,如果一旦数据丢失或者泄露,其代价往往是毁灭性的。如果代码掌握在自己手中,企业就可以自己充分做好数据的管理和备份,保障商城的安全。

       Mall4j是知名的商城源码开发商,他们的商城系统质量绝对杠杠的,而且还会随时更新,购买后会提供全部源码给客户,无封装无加密。

基于升腾AI | Yolov7模型迁移到升腾平台EAI边缘计算盒子的实操指南

       在国产化替代的趋势中,升腾平台凭借其高性能、低功耗、易扩展及成熟的软件栈,已在众多领域展现广泛应用价值。英码科技作为升腾的重要合作伙伴,其边缘计算产品EAI凭借出色性能和特性,助力AI应用低成本高效部署。本文将着重介绍如何基于升腾AI技术,将热门目标检测模型YOLOv7迁移到EAI边缘计算盒子的实际操作指南。

       YOLOv7作为先进的目标检测算法,因其高精度和低延迟在安防监控、自动驾驶和医疗影像分析等领域发挥关键作用。我们以EAI为硬件平台,具体步骤如下:

       在已部署的升腾平台环境下,直接下载Yolov7源码和预训练模型。

       由于Pytorch模型不被Ascend工具直接支持,需将模型转换为ONNX格式,使用deploy配置文件进行转换。

       环境配置包括设置THIRDPART_PATH,安装必要的库如ffmpeg和opencv。

       数据准备后,将模型转换为适配升腾的离线模型。

       执行编译脚本进行模型样例编译,运行脚本运行样例,生成推理结果。

       通过以上步骤,开发者能顺利将YOLOv7模型迁移到升腾EAI,有效提升研发效率,加速项目落地。如需更多技术支持,欢迎随时交流咨询。

全网最细的CMake教程!(强烈建议收藏)

       什么是 CMake?

       CMake 是一个平台无关的编译配置工具,允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程,实现“Write once, run everywhere”。CMake 提供了更高级的编译配置能力,一些使用 CMake 的知名开源项目有 VTK、ITK、KDE、OpenCV、OSG 等。

       入门案例:单个源文件

       通过编写 CMakeLists.txt 文件,配置编译流程,使用cmake . 和 make 命令生成并编译 Demo1 可执行文件。

       多个源文件

       使用辅助目录查找命令,自动化处理多个源文件的编译,简化文件名的添加过程。

       多个目录,多个源文件

       分别在项目根目录和子目录中编写 CMakeLists.txt 文件,实现对多目录多源文件的管理。

       自定义编译选项

       为项目增加编译选项,根据用户环境和需求选择最合适的编译方案,如使用自定义库或标准库。

       修改 CMakeLists 文件和 main.cc 文件,实现根据 USE_MYMATH 选项调用标准库或自定义库。

       编写 config.h.in 文件,由 CMake 自动生成配置文件。

       安装和测试

       CMake 提供安装规则和测试工具,通过 make install 和 make test 命令完成。

       支持 gdb

       通过指定 Debug 模式下的选项,使生成的程序支持 gdb 调试。

       添加环境检查

       检查系统是否具备特定功能,如 pow 函数,根据结果选择使用自定义函数或标准库函数。

       添加版本号

       通过配置文件指定主版本号和副版本号,实现项目版本信息的自动获取。

       生成安装包

       使用 CPack 工具配置生成不同平台的二进制安装包和源码安装包。

       项目迁移

       CMake 可以轻松迁移至不同平台的工程环境,提供自动推导 CMakeLists.txt 的方法。

       类似工具推荐

       了解 Linux 内核网络协议栈、嵌入式开发、Linux 内核总线驱动设备模型等知识,掌握进阶攻略和项目实战。

copyright © 2016 powered by 皮皮网   sitemap