相信很多人对"Hook"都不会陌生,其中文翻译为"钩子”.在编程中, 钩子表示一个可以允许编程者插入自定义程序的地方,通常是打包好的程序中提供的接口....通过Hook,我们可以暂停系统调用,或者通过改变系统调用的参数来改变正常的输出结果, 甚至可以中止一个当前运行中的进程并且将控制权转移到自己手上....$hello表示字符串"Hello"的地址; 32位Linux系统通过0x80中断来进行系统调用....更多关于32位和64位汇编指令的区别可以参考stack overflow的总结, 因为我当前环境是64位Linux,所以下文的操作都以64位系统为例....参考资料 playing with ptrace part I playing with ptrace part II 安卓动态调试之Hook
LInux Hook技术实践 什么是hook 简单的说就是别人本来是执行libA.so里面的函数的,结果现在被偷偷换成了执行你的libB.so里面的代码,是一种替换。...为什么hook 恶意代码注入 调用常用库函数时打log 改变常用库函数的行为,个性化 怎么hook 这个东西在win里面有现成的api,但是在linux里面却要主动修改ELF文件,或者修改动态库链接路径...所以这里提供一种简单的方法来hook 下面直接demo吧 /*myselect.c*/ #define _GNU_SOURCE #include #include <stdio.h...举个例子: 某些系统上select的实现可能与众不同,在没有fd就绪时,并不阻塞,而是忙等,这时便可以通过hook技术,在select中插入usleep,达到释放cpu的作用。
本文记录了对某发行版Linux中一个安全模块(LSM)的逆向过程,该LSM对系统中待运行的程序进行安全校验,数据流穿越内核态与用户态,涉及系统内核及系统服务。...LSM框架简介 Linux安全模块(Linux Security Module,LSM)框架是Linux操作系统内核提供的一种安全机制,它通过内核扩展实现hook函数以完成多种安全检查,通常用于强制访问控制...LSM框架的hook点设置于内核访问关键对象前,通过调用LSM中实现的hook函数,判断是否可以进行访问。如果有多个LSM,则会根据初始化的顺序依次判断,都允许才能进行访问。...上述关键对象包括程序、进程、套接字、文件系统等,可在/usr/src/linux-headers-YOURSYSTEMVERSION/include/linux/lsm_hooks.h中查看详细的hook...LSM开发时,通过如下函数定义安全模块的hook函数,逆向时通过此函数可快速定位具体的LSM以及相关回调函数。 二.
2.其次,在介绍lsm tree的文章中,绝大部分文章都是侧重于告诉读者lsm tree的原理。其实从个人观点来看,lsm是一种思想,一种解决特定工程问题的通用思想。...通过个人一段时间的探索和学习,决定以lsm tree作为切入点,先介绍lsm tree原理(因为只要深刻理解了lsm tree,然后再来看其他类lsm的存储模型,很容易掌握),然后在介绍其他lsm派系的存储模型思想...本系列总共包含三部分内容,分上下篇来介绍: 上篇: 1.用最直观的方式理解lsm tree 2.学术界提出的lsm tree 下篇: 3.lsm派系存储引擎 4.总结 第一部分主要通过个人理解来阐述lsm...例如:lsm派系难道只有lsm tree这一类存储模型吗?如果答案是否定的,那么除了lsm tree存储模型外,还有哪些lsm 模型?这些模型之间又有哪些相同点和差异点?...) LSM-based Storage Techniques: A Survey leveldb原理分析视频教程 3.4 lsm派系存储引擎对比 以上我们介绍了lsm派系的几类存储引擎模型,有基于lsm
# LSM 树 # 什么是 LSM 树 LSM 树具有以下 3 个特点: 将索引分为内存和磁盘两部分,并在内存达到阈值时启动树合并(Merge Trees); 用批量写入代替随机写入,并且用预写日志 WAL...LSM 树的这些特点,使得它相对于 B+ 树,在写入性能上有大幅提升。所以,许多 NoSQL 系统都使用 LSM 树作为检索引擎,而且还对 LSM 树进行了优化以提升检索性能。...因此,LSM 树至少需要由两棵树组成,一棵是存储在内存中较小的 C0 树,另一棵是存储在磁盘中较大的 C1 树。...解决方案就是:LSM 树(Log Structured Merge Trees)。...# 参考资料 检索技术核心 20 讲 数据结构 树 LSM 树
接下来会再写几篇,直到学习完 rocksdb,敬请期待啊~希望大家看完了也可以评论一下,给些反馈哈哈什么是 LSM虽然大家都是叫它 LSM 树,听着很像是一个树状的数据结构,但严格意义上,它是一种存储结构...LSM 使用场景知道了 LSM 树的特点后,基于 LSM 的存储引擎会用来做什么,其实并不难猜出来,即写多读少(相对而言)的场景,比如说:日志系统推荐系统海量数据存储数据分析......这些场景都是会有一定规模的数据量写入...,同时对于数据读取的实时性要求并不高接下来我们继续来了解一下 LSM 的核心原理吧~LSM 的核心原理这部分要分两块来讲,第一块是它如何保证顺序写?...LSM 如何保证顺序写与 InnoDB 不同,LSM 就是围绕追加写来展开的。...更多关于磁盘 IO 的知识,这里就不再展开了,感兴趣的可以自己再去了解一下LSM 的核心模块要想理解 LSM 树的读写原理,要先了解它的一些核心模块。
简介 Log Structured Merge Tree,下面简称 LSM。 2006年,Google 发表了 BigTable 的论文。...这篇论文提到 BigTable 单机上所使用的数据结构就是 LSM。...简单地说,LSM 的设计目标是提供比传统的 B+ 树更好的写性能。LSM 通过将磁盘的随机写转化为顺序写来提高写性能 ,而付出的代价就是牺牲部分读性能、写放大(B+树同样有写放大的问题)。...以 LevelDB 为代表的 LSM 存储引擎给出了一个参考答案。注意,LevelDB 实现的是优化后的 LSM,原始的 LSM 可以参考论文。下面的讨论主要以 LevelDB 为例子。...总结 基于 LSM 数据结构的 LevelDB 的适用场景: 写请求多。 写性能(吞吐+延迟)要求高。
但是,你还知道了另一种工具seccomp(Linux安全计算)。你可能非常想知道,LSM和Seccomp有什么区别?为什么不能将Seccomp设计为LSM模块?什么时候使用Seccomp?...让我们来看一下Linux源码中seccomp测试代码片段,如下所示。...* @nr: 系统调用号 * @arch: 系统调用的约定,跟架构相关,相关定义位于 * linux...LSM一般hook在系统调用底层的内核对象上,不会像seccomp那样减少攻击面。具体的来说,内核在将系统调用的参数映射到内核对象之后运行这些hook,本身这段代码可能就包含缺陷。...LSM实现的MAC强制访问控制策略是你实现系统全局细粒度安全控制策略的工具,而seccomp过滤器是限制非特权进程进行某些系统调用的工具,同时还是常见的进程沙箱技术(如linux container)的重要组件
从上图可以知道,是在 LSM Hook 点出执行的 SELinux 检查,大家可能对 LSM 概念比较陌生。...LSM 全称 Linux Security Module,但其实并不是一个模块,而是一个安全框架,为安全模块提供的一个安全框架。...Linux 源码目录中有个 security 的目录,其下的子目录比如说 apparmor,selinux 等等就是目前 Linux 支持的一些安全模块。...LSM 框架提供的服务之一就是在内核中的关键处埋下了许多 hook 点,在看内核代码的时候,你应该会经常发现类似 security_xxx 的函数,这就是 LSM Hook 点。...是的,这取决于当前系统使能了多少个 LSM 安全模块,如果使能了 A,B,C 三个安全模块,那么每到 security_xxx hook 点,便会将 A、B、C 对应的安全检查函数启动顺序全都执行一遍。
---- Linux中常见的拦截过滤 本文着重介绍Linux平台上常见的拦截: 用户态动态库拦截。 内核态系统调用拦截。 堆栈式文件系统拦截。 inline hook拦截。...LSM(Linux Security Modules) ---- 动态库劫持 Linux上的动态库劫持主要是基于LD_PRELOAD环境变量,这个环境变量的主要作用是改变动态库的加载顺序,让用户有选择的载入不同动态库中的相同函数...对于第二个问题: 如何Hook?这里介绍两种方式: 第一种方式:直接进行二进制替换,将call指令的操作数替换为hook函数的地址。 ? 第二种方式:Linux内核提供的kprobes机制。...---- LSM LSM是Linux Secrity Module的简称,即linux安全模块。是一种通用的Linux安全框架,具有效率高,简单易用等特点。原理如下: ?...LSM,在早期的内核中,只能允许一个LSM内核模块加载,例如加载了SELinux,就不能加载其他的LSM模块,在最新的内核版本中不存在这个问题。
LSM-Tree 的学习总结,附上 PDF 一份。
2.其次,在介绍lsm tree的文章中,绝大部分文章都是侧重于告诉读者lsm tree的原理。其实从个人观点来看,lsm是一种思想,一种解决特定工程问题的通用思想。...通过个人一段时间的探索和学习,决定以lsm tree作为切入点,先介绍lsm tree原理(因为只要深刻理解了lsm tree,然后再来看其他类lsm的存储模型,很容易掌握),然后在介绍其他lsm派系的存储模型思想...本系列总共包含三部分内容,分上下篇来介绍: 上篇: 1.用最直观的方式理解lsm tree 2.学术界提出的lsm tree 下篇: 3.lsm派系存储引擎 4.总结 第一部分主要通过个人理解来阐述lsm...下篇链接如下: lsm派系(不仅lsm tree)存储模型概述(下篇) 1. 用最直观的方式理解lsm tree 这一部分主要介绍三块内容。首先回答一个问题:为什么会有lsm tree。...1.3 lsm tree在工程上的应用 在前面介绍完lsm tree的思想后,我们来看一下,平常工作中接触到的哪些组件都用到了lsm tree呢?
LSM(Log Structured Merged Tree)树一般用在写多读少的场景,比如日志类型的数据,是HBase、 Cassandra、 LevelDB、 RocksDB 以及 ClickHouse...typical LSM backed system ?...SSTable (Sorted String Table) LSM-Tree的优点和缺点 与B-tree系列数据结构相比,LSM的写性能提升10作用倍,读性能降低10倍左右(但是使用布隆过滤器Bloom...Trees: What Powers Write-Heavy Databases LSM 树详解 平衡二叉树、B树、B+树、B*树 理解其中一种你就都明白了 一文了解数据库索引:哈希、B-Tree 与...LSM 深入理解什么是LSM-Tree 日志结构的合并树 The Log-Structured Merge-Tree LSM-tree vs B-tree
结论 我猜,你读这篇文章,说明你已经对Linux安全模块(LSM)有所了解。...意识到它们的差异,才能更好地理解Linux的安全特性。 LSM是什么? 一个LSM模块是直接编译Linux内核的代码,利用LSM框架,它可以拒绝某个进程访问重要的内核对象。...截止到5.4内核,该框架已经包含224个hook点,这些hook点包含一个注册函数的API和为LSM模块保留受保护内核对象所使用的内存的API。...到Linux 2.6版本,LSM框架和SELinux合并到了内核主线中(使用LSM框架,而不是直接在内核代码中修改)。...下图展示了一个文件打开(open())操作的简略调用流程图(假设为3个LSM模块注册了hook钩子函数。
一、前情提要 在前一篇文章《Linux内核跟踪:ftrace hook入门手册(上)》中,我们对部分ftrace hook经典方案中的实现细节进行了优化。本文会深入说明这些优化的原理和目的。...二、内核版本的差异 目前的ftrace hook实现中,总是需要使用大量条件编译以解决Linux内核的版本差异问题。...其中较为关键的一个差异点,就是Linux内核从4.17版本开始修改了系统调用过程中的函数签名,这对ftrace hook的实现造成了较大的困扰。...[nr]: 图2:Linux内核4.17版本do_syscall_64函数实现 而如前一篇文章所述,ftrace hook是通过编译时处理,在各个内核函数实现代码的开头插桩call指令,所以ftrace...hook子程可以直接定义与系统调用函数相同的形式参数来获取系统调用参数值,而返回时也会直接返回到系统调用函数的直接调用方(参考下图[3]): 图5:经典方案中的hook执行流程 然而,由于Linux
而 「Hook」模式带来的好处: 暴露给模板的属性具有明确的来源,因为它们是从 Hook 函数返回的值。 Hook 函数返回的值可以任意命名,因此不会发生名称空间冲突。...二、React Hook 和 Vue Hook 对比 其实 React Hook 的限制非常多: 不要在循环,条件或嵌套函数中调用 Hook 确保总是在你的 React 函数的最顶层调用他们。...与 React Hook 不同,setup 函数仅被调用一次,这在性能上比较占优。 对调用顺序没什么要求,每次渲染中不会反复调用 Hook 函数,产生的的 GC 压力较小。...React Hook 里的「依赖」是需要你去手动声明的。...React Hook解决过时闭包问题的方法: 解决过时闭包的一个有效方法是正确设置 React Hook 的依赖项。 对于过时的状态,使用函数方式更新状态。
本文将从bigtable入手,忽略与分布式相关的知识,从bigtable中看LSM的应用。 ° 原理 LSM ?...图1 LSM中硬盘树与内存树的合并操作 LSM论文中提出一种减少io操作并避免随机存取的表信息存储结构。...区别 总体而言,Bigtable在屏蔽掉分布式条件后的数据存取方式与LSM基本相同。...° 与LSM的异同 TSM中的文件组成结构与ssTable大致相同,且TSM的wal、合并、分级、快照等机制与LSM大致相同。...The log-structured merge-tree (LSM-tree).
LSM tree (log-structured merge-tree) 是一种对频繁写操作非常友好的数据结构,同时兼顾了查询效率。...如下图: LSM tree 在工作过程中尽可能避免随机读写,充分发挥了磁盘连续读写的性能优势。...SSTable LSM tree 持久化到硬盘上之后的结构称为 Sorted Strings Table (SSTable)。...写入数据 LSM tree 的所有写操作均为连续写,因此效率非常高。但由于外部数据是无序到来的,如果无脑连续写入到 segment,显然是不能保证顺序的。...对此,LSM tree 会在内存中构造一个有序数据结构(称为 memtable),例如红黑树。每条新到达的数据都插入到该红黑树中,从而始终保持数据有序。
image.png 目录 第一章:android hook介绍 第二章:hook之替换View.OnClickListener 第三章:HooK之hook Notification HooK Notification...throw e.rethrowFromSystemServer(); } } notifyAsUser 方法中,service 是一个单例,因此,可以想方法 hook...因此 hook 住 service 的 enqueueNotificationWithTag 方法即可....具体思路 Hook Notification,大概需要三步: 第一步:得到 NotificationManager 的 service 第二步:因为 service 是接口,所以我们可以使用动态代理,获取动态代理对象...java.time.format.TextStyle; public class MainActivity extends AppCompatActivity { public static String TAG = "Hello Hook
一、什么是ftrace ftrace(FunctionTracer)是Linux内核的一个跟踪框架,它从2008年10月9日发布的内核版本2.6.27开始并入Linux内核主线[1]。.../posts/linux_rootkits_02/ https://github.com/ilammy/ftrace-hook/ 图2:经典ftrace hook方案中的执行流程[4] 适当建议有余力的读者首先了解一下上述经典方案...#define LIB_FTRACE_HOOK #include linux/version.h> #include linux/ftrace.h> #include linux/kprobes.h...Hooking Linux KernelFunctions, Part 2: How to Hook Functions with FtraceIt [J/OL] 2018, https://www.apriorit.com...linux_rootkits_02/.
领取专属 10元无门槛券
手把手带您无忧上云