首页 文章 精选 留言 我的

精选列表

搜索[记忆机制],共10000篇文章
优秀的个人博客,低调大师

Mach-O 的动态链接(Lazy Bind 机制)

原文出自【听云技术博客】:http://blog.tingyun.com/web/article/detail/1347 动态链接 要解决空间浪费和更新困难这两个问题最简单的方法就是把程序的模块相互分割开来,形成独立的文件,而不再将它们静态的链接在一起。简单地讲,就是不对那些组成程序的目标文件进行链接,等到程序要运行时才进行链接。也就是说,把链接过程推迟到了运行时再进行,这就是 _动态链接(Dynamic Linking)_的思想。 延迟绑定(PLT) 动态链接比静态链接性能低,主要原因是动态链接下对于全局和静态的数据访问都要进行复杂的GOT定位,间接寻址;对于模块间的调用也要先定位GOT,间接跳转, 程序的运行速度一定会减慢。 另外因为动态链接是在运行时完成链接的工作:在程序开始执行时,动态链接器都要进行一次链接工作,动态链接器会 search 并 load 所需要的 共享对象,然后进行符号查询 地址重定位,这一系列动作会减慢程序的启动速度。 PLT 就是为了优化动态链接性能而存在,基本思想就是 当函数第一次被调用到时才进行绑定(符号查找,重定位),如果没有用到则不进行 bind。 这样在程序执行时,模块间的函数调用都没有进行 bind , 而是需要调用时才由 动态链接器来负责 bind 。这样可以加速程序的启动速度。 Mach-O Lazy Bind Mach-O 文件通过dyld 加载的时候并没有确定每一个函数的具体地址在哪里,而是在真正调用该函数的时候通过 过程链接表(procedure linkage table),简称 PLT,来进行一次lazybind。 结合Mach-O 文件的分析与代码的调试简单的分析一下。 源代码如下: 分别在两个printf函数处下 断点。 第一个调用printf函数 在0x100000f52 \<+34\>行处通过callq 0x100000f76 来调用printf。 执行callq指令 之后代码跳转到这里: 这里的jmpq 要跳转到 0x0000000100000F8C ,这个地址是从 —Data , —la-symbol-ptr 中的Lazy Symbol Pointers 中获取到的。 通过lldb 的命令 查看 0x100001010处的地址 获取了同样的值。 通过—stub—helper进行lazybind 在Mach-O 中每一个Symbol Stub 可能有以下两种行为其中之一:跳转到函数的指令,执行函数体,通过动态动态库链接器查找函数的Symbol,然后执行函数体 查看 —stubs的Section 数据,发现只有一个函数就是 printf 这里的Data 其实就是上面看到的 jmpq 的代码。执行之后代码跳转到了这样的代码片段。 这里就是通过 —stub-helper来调用 dyld-stubbinder函数来计算printf 函数的真是地址。 通过下面的 信息可以看出来,jmpq 0x100000f7c ,就是在压如入参数0x0 (函数的link 的时候给的编号) 之后跳转到Section的起始处,调用 binder(一段汇编代码, 作用就是计算具体的函数地址,并调用printf 函数) 第二次调用printf 函数 执行指令之后发现和第一次调用printf 已经不一样了。 再一次查看 0x100001010 处内存值。已经很第一次不同了,也就是说, —Data, —la-symbol-ptr 中指向printf地址的值已经发生了变化,指向了 printf的指令。 这就证明了,延迟绑定只会在第一次调用的时候发生。整个流程与 linux中的PLT 和GOT 在实现逻辑上基本相同,只是实现代码不同而已。 参考《Mac OS X and iOS Internals》、《链接,装载与库》

优秀的个人博客,低调大师

物联网智能硬件设备身份验证机制

设备身份验证有以下目标: 1,别人的设备不能接入我们的云平台 2,我们的设备,不能接入别人的云平台 3,考虑到设备要批量生产,云平台先生成设备编码再写入每个设备的方法,非常不现实! 那么,标准的设备身份验证应该是: 1,设备上电联网后,需要一个激活过程 2,设备向云平台申请激活,包括 厂商、生产批次、生产密码、芯片唯一编码 等信息 3,云平台判断并通过激活,根据诸多信息生成全局唯一的设备编码,如果是重复激活,需要根据芯片唯一编码查到上一次分配给该设备的设备编码 4,云平台告知硬件设备激活成功,并下发设备编码以及设备密码,设备永久保存设备编码以及设备密码 5,设备多次激活,密码必须改变,编码不变 6,设备激活以后,每一次连接云平台,必须提交设备编码,以及使用设备密码加密一段随机数,不要提交设备密码,以防被拦截窃取 我不相信神话,我只相信汗水!我不相信命运,我只相信双手! 分类: 物联网 本文转自大石头博客园博客,原文链接:http://www.cnblogs.com/nnhy/p/device_auth.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

AI Agent的“记忆革命”:从RAG到GraphRAG,构建企业级认知知识图谱实战

【机器之心/The New Stack综合报道】 2026年4月,微软研究院与LangChain联合发布重磅技术报告《Beyond Vector Search: The Rise of GraphRAG in Enterprise AI》,正式宣告传统向量检索(Naive RAG)在企业级复杂问答场景中的“天花板”已被触及。报告指出,当面对跨文档推理、全局摘要、多跳关联分析等任务时,基于纯向量相似度的RAG系统准确率普遍低于45%;而引入知识图谱结构的GraphRAG架构,在同等数据集上将复杂推理准确率提升至89%以上。与此同时,Neo4j、NebulaGraph等图数据库厂商纷纷推出原生LLM集成层,“图+大模型”正成为2026年企业AI基础设施的标配。

优秀的个人博客,低调大师

反射内存交换机原理与端口转发机制

上一篇讲了反射内存卡如何把一次本地内存写入广播成全网更新。当网络里只有三五个节点时,把节点用光纤首尾连成一个环就足够了;但当节点数量增加到几十上百个、且分布在不同机柜甚至不同楼层时,环型串联会带来布线杂乱、任一节点维护都要动整条环、首尾节点延迟差被拉大等问题。反射内存交换机(Reflective Memory Hub,也常被称为反射内存集线器、交换节点)就是为解决这些工程问题而出现的汇聚设备。本文讲清它在网络中扮演的角色、星型组网下的端口转发逻辑、与环型组网的对比,以及它和普通以太网交换机到底差在哪里。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册