<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[LittleFishC的博客]]></title><description><![CDATA[热爱编程]]></description><link>https://blog.youkuaiyun.com/LittleFishC</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; LittleFishC]]></copyright><item><title><![CDATA[08_长调用与短调用]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/159658283</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/159658283</guid><author>LittleFishC</author><pubDate>Tue, 31 Mar 2026 23:54:35 +0800</pubDate><description><![CDATA[短调用：段内跳转，仅保护EIP。同级长调用：平级跨段，保护CSEIP。]]></description><category></category></item><item><title><![CDATA[07_代码间的段间跳转]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/159429271</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/159429271</guid><author>LittleFishC</author><pubDate>Sat, 28 Mar 2026 02:30:12 +0800</pubDate><description><![CDATA[本文探讨了CPU如何通过代码段分类机制防止执行流提权攻击。重点分析了非一致代码段和一致代码段的权限规则：非一致代码段严格禁止跨特权级访问，而一致代码段允许低特权级调用高特权级代码但保持当前特权级不变。通过两个实验验证，即使成功跳转到Ring 0代码段，CPL也不会改变，任何内核数据访问都会被硬件拦截。这证明了CPU硬件层面的执行流隔离机制能有效防御特权提升攻击，维持系统的安全边界。]]></description><category></category></item><item><title><![CDATA[06_段权限检查与双机调试实战]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/159287910</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/159287910</guid><author>LittleFishC</author><pubDate>Tue, 24 Mar 2026 01:05:30 +0800</pubDate><description><![CDATA[在之前的学习中，我们讨论了段描述符各种属性。但现代操作系统的安全架构中，隔离用户态和内核态是基于段权限检查机制。本节我们将深入讨论CPU如何通过CPL、DPL和RPL这三者之间的关系进行权限检查。]]></description><category></category></item><item><title><![CDATA[05_段描述符属性：DB位]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/155573652</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/155573652</guid><author>LittleFishC</author><pubDate>Thu, 04 Dec 2025 19:24:26 +0800</pubDate><description><![CDATA[本文深入解析了段描述符中的D/B位对32位与16位模式的关键影响。对于代码段，D位决定了默认操作数宽度（1=32位，0=16位）；对于数据段，B位控制段上限（1=4GB，0=64KB）。通过WinDbg实验验证：在向上扩展数据段中，B=0不限制偏移量；但在向下扩展段中，B=0会将有效范围限制在64KB内。文章还展示了指令前缀0x66在32位模式下实现16位操作的方法，揭示了CPU模式切换的底层机制。]]></description><category></category></item><item><title><![CDATA[04_段描述符属性：S位与Type域]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/155428874</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/155428874</guid><author>LittleFishC</author><pubDate>Tue, 02 Dec 2025 23:59:20 +0800</pubDate><description><![CDATA[本文深入解析了x86保护模式下的段描述符属性控制机制。重点分析了高32位中的S位与Type域：S位区分代码/数据段与系统段；当S=1时，Type域定义段的执行权限（代码段可读/执行，数据段可读/写）和扩展方向。通过WinDbg构造只读数据段并测试写入操作，验证了CPU会硬件检查段属性，触发保护异常。这展示了段描述符如何作为保护模式的第二道安全屏障，精确控制内存访问权限。]]></description><category></category></item><item><title><![CDATA[03_段权限检查机制]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/155364535</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/155364535</guid><author>LittleFishC</author><pubDate>Sat, 29 Nov 2025 13:07:00 +0800</pubDate><description><![CDATA[本文深入分析了x86架构中段描述符和段选择子的结构及其权限检查机制。段描述符作为GDT表中的基本单元，包含碎片化的基址、界限和关键属性字段，这种设计源于Intel处理器的历史兼容性需求。段选择子通过索引定位描述符，其RPL与当前CPL共同决定访问权限。CPU硬件执行严格的权限检查（MAX(CPL,RPL)≤DPL），确保高权限代码才能访问特权内存区域。通过VC++内联汇编实验验证了Ring3环境下加载用户段选择子的成功案例，阐明了保护模式实现内存隔离的核心原理。]]></description><category></category></item><item><title><![CDATA[02_探测段寄存器]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/155323459</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/155323459</guid><author>LittleFishC</author><pubDate>Fri, 28 Nov 2025 00:24:42 +0800</pubDate><description><![CDATA[本文通过WinDbg静态分析和代码实验验证了x86保护模式下段寄存器的96位结构。研究表明，段寄存器不仅包含16位可见的选择子(Selector)，还包含80位隐藏的高速缓存部分，包括32位基址(Base)、32位界限(Limit)和16位属性(Attribute)。实验证明，当加载段选择子时，CPU会自动从GDT中提取描述符信息填充这些隐藏字段，并基于这些缓存信息执行内存访问控制。通过修改段选择子引发访问异常、比较不同段寄存器基址访问结果以及测试段界限限制等实验，确凿证实了段寄存器96位结构的真实存在及其]]></description><category></category></item><item><title><![CDATA[01_保护模式：搞懂段寄存器]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/154922775</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/154922775</guid><author>LittleFishC</author><pubDate>Tue, 25 Nov 2025 00:40:25 +0800</pubDate><description><![CDATA[摘要： x86保护模式通过段机制实现内存隔离与权限控制。段寄存器存放16位选择子，包含索引、TI标志和RPL特权级。描述符定义段的基址、界限和属性（类型、DPL等），存储在GDT/LDT中。GDT由GDTR寄存器定位，Windows采用平坦模式（4GB线性空间），利用分页机制隔离进程，基本不使用LDT。通过SGDT指令可读取GDTR信息，保护模式解决了实模式的内存访问安全问题。]]></description><category></category></item><item><title><![CDATA[CSAPP_第一章：计算机系统漫游读书笔记]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/149299233</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/149299233</guid><author>LittleFishC</author><pubDate>Sun, 13 Jul 2025 18:41:47 +0800</pubDate><description><![CDATA[计算机系统中的所有信息都以0和1的位序列形式存在，这些信息可以是代码、数据或网络数据包等。它们的区别取决于具体的使用场景（上下文）。例如，0xCC在代码中能够代表int 3指令，而在hello.c的ASCII文本中，字节值35则对应着字符#。这就说明一个问题，程序的可读性是给人看的，计算机只认位序列。这也解释了日常遇到的乱码文件，本质来讲是上下文错误。]]></description><category></category></item><item><title><![CDATA[masm32汇编实现扫雷进程注入]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/148512580</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/148512580</guid><author>LittleFishC</author><pubDate>Sun, 08 Jun 2025 23:34:06 +0800</pubDate><description><![CDATA[进程注入是将代码或者dll插入另一个目标进程的地址空间中，并强制该进程执行注入的代码。与dll注入不同，直接代码注入相对隐蔽，不需要额外的DLL文件。游戏外挂开发安全软件检测进程监控恶意软件分析。]]></description><category></category></item><item><title><![CDATA[Android JNI开发：System.loadLibrary加载机制]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/141562885</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/141562885</guid><author>LittleFishC</author><pubDate>Mon, 26 Aug 2024 17:05:13 +0800</pubDate><description><![CDATA[System.loadLibrary的核心功能是获取.so库的全路径，加载该.so库文件，然后依次调用init、init_array和JNI_OnLoad函数。]]></description><category></category></item><item><title><![CDATA[Android实战：过root检测]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/141440290</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/141440290</guid><author>LittleFishC</author><pubDate>Fri, 23 Aug 2024 18:45:24 +0800</pubDate><description><![CDATA[因此过掉这个这个root检测的方法很简单，只需要将checkSuFile()函数返回false，checkRootFile()函数返回null即可。因此这里的关键函数为SystemUtils.checkSuFile()和SystemUtils.checkRootFile()，继续跟进这两个函数，看看究竟是怎么进行检测root环境的。从堆栈信息中，我们可以看到关键函数为com.hoge.android.factory.welcome.WelcomeActivity$2$1.run()。]]></description><category></category></item><item><title><![CDATA[Frida实战：枚举模块、导入表、导出表与符号表]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/141423208</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/141423208</guid><author>LittleFishC</author><pubDate>Thu, 22 Aug 2024 11:14:41 +0800</pubDate><description><![CDATA[【代码】Frida实战：枚举模块、导入表、导出表与符号表。]]></description><category></category></item><item><title><![CDATA[【LeetCode】和为K的子数组]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/141337692</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/141337692</guid><author>LittleFishC</author><pubDate>Tue, 20 Aug 2024 00:41:40 +0800</pubDate><description><![CDATA[给你一个整数数组nums和一个整数k ，请你统计并返回该数组中和为k的子数组的个数。输入：nums = [1,1,1], k = 2。输入：nums = [1,2,3], k = 3。子数组是数组中元素的连续非空序列。]]></description><category></category></item><item><title><![CDATA[【LeeCode】找到字符串中所有字母异位词]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/141287983</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/141287983</guid><author>LittleFishC</author><pubDate>Mon, 19 Aug 2024 23:51:08 +0800</pubDate><description><![CDATA[滑动窗口的基本思路是维护一个长度为p的窗口，在字符串s中滑动这个窗口，并检查窗口中的子串是否为字符串p的异位词。起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。起始索引等于 0 的子串是 “ab”, 它是 “ab” 的异位词。起始索引等于 1 的子串是 “ba”, 它是 “ab” 的异位词。起始索引等于 2 的子串是 “ab”, 它是 “ab” 的异位词。输入: s = “abab”, p = “ab”]]></description><category></category></item><item><title><![CDATA[【LeetCode】无重复字符的最长子串]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/141286856</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/141286856</guid><author>LittleFishC</author><pubDate>Sat, 17 Aug 2024 21:41:40 +0800</pubDate><description><![CDATA[请注意，你的答案必须是 子串 的长度，“pwke” 是一个子序列，不是子串。给定一个字符串 s ，请你找出其中不含有重复字符的最长子串的长度。解释: 因为无重复字符的最长子串是 “abc”，所以其长度为 3。解释: 因为无重复字符的最长子串是 “wke”，所以其长度为 3。解释: 因为无重复字符的最长子串是 “b”，所以其长度为 1。输入: s = “abcabcbb”输入: s = “pwwkew”输入: s = “bbbbb”]]></description><category></category></item><item><title><![CDATA[【LeetCode】接雨水]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/141286538</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/141286538</guid><author>LittleFishC</author><pubDate>Sat, 17 Aug 2024 21:00:59 +0800</pubDate><description><![CDATA[解释：上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图，在这种情况下，可以接 6 个单位的雨水（蓝色部分表示雨水）。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图，计算按此排列的柱子，下雨之后能接多少雨水。输入：height = [0,1,0,2,1,0,1,3,2,1,2,1]输入：height = [4,2,0,3,2,5]]]></description><category></category></item><item><title><![CDATA[【LeetCode】三数之和]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/141234410</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/141234410</guid><author>LittleFishC</author><pubDate>Fri, 16 Aug 2024 10:46:32 +0800</pubDate><description><![CDATA[给你一个整数数组 nums ，判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ，同时还满足 nums[i] + nums[j] + nums[k] == 0。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。输入：nums = [-1,0,1,2,-1,-4]输出：[[-1,-1,2],[-1,0,1]]输入：nums = [0,1,1]输入：nums = [0,0,0]解释：唯一可能的三元组和为 0。输出：[[0,0,0]]]]></description><category></category></item><item><title><![CDATA[【LeetCode】盛最多水的容器]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/141233133</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/141233133</guid><author>LittleFishC</author><pubDate>Thu, 15 Aug 2024 23:51:49 +0800</pubDate><description><![CDATA[有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。解释：图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下，容器能够容纳水（表示为蓝色部分）的最大值为 49。使用双指针，然后每次选择较短的那条边所对应的指针进行移动，因为移动较短的边有可能增加容器的高度，从而可能找到更大的容积（找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。输入：[1,8,6,2,5,4,8,3,7]输入：height = [1,1]]]></description><category></category></item><item><title><![CDATA[【LeetCode】最长连续序列]]></title><link>https://blog.youkuaiyun.com/LittleFishC/article/details/141202544</link><guid>https://blog.youkuaiyun.com/LittleFishC/article/details/141202544</guid><author>LittleFishC</author><pubDate>Wed, 14 Aug 2024 23:27:08 +0800</pubDate><description><![CDATA[如果当前数字 num 是一个序列的开始（即 num - 1 不在哈希表中），那么从 num 开始逐个检查后续数字 num + 1, num + 2, …是否在哈希表中存在，直到不再连续。给定一个未排序的整数数组 nums ，找出数字连续的最长序列（不要求序列元素在原数组中连续）的长度。解释：最长数字连续序列是 [1, 2, 3, 4]。输入：nums = [0,3,7,2,5,8,4,6,0,1]请你设计并实现时间复杂度为 O(n) 的算法解决此问题。输入：nums = [100,4,200,1,3,2]]]></description><category></category></item></channel></rss>