首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Eureka的技术时光轴

    ring0调用Ring3的代码

    作者:VXK/CVC.GB 时间:2005-02-05 每次上driverdevelop总看到有人问怎么在Ring0下调用Ring3的代码—— Ring3使用Ring0已经是地球人全知道的事情了 ,但是ring0下使用ring3的代码 恐怕很少有人知道,Ratter和Benny这两个高人以及Elzc的作者Elzcor各自提出 过一种方法。 总结起来就是三种方法,Zombie在2004年也提出过一个方法看起 来像是Ratter和Elzcor的方法结合而成~ 当然说其本质都是一种思想把ring3代码搞到ring3的空间去执行,听起来 大家也好像有所明白了吧 ,Benny的方法是在Ring0的向Ring3进程插入代码执行, Ratter则是Hook KAPIZ等待用户层调用发生把ring3代码放回Ring3空间,利用 KeUserModeCallBack (这种方法是我最z发现的阿阿----其实是听erx大哥讲的一个思路~) 再多说就成了教唆犯罪了~ 在ring0调用Ring3的代码的续 利用建立新的APC方法回调代码——原创者不详~

    1.3K10发布于 2019-10-09
  • 来自专栏python3

    Ring0和Ring3权限级

    Intel的x86处理器是通过Ring级别来进行访问控制的,级别共分4层,从Ring0到Ring3(后面简称R0、R1、R2、R3)。R0层拥有最高的权限,R3层拥有最低的权限。

    2.3K10发布于 2020-01-08
  • 来自专栏nginx遇上redis

    PF_RING

    PF_RING针对libpcap的改进方法:将网卡接收到的数据包存储在一个环状缓存中,这个环状缓存有两个接口,一个供网卡向其中写数据,另一个为应用层程序提供读取数据包的接口,从而减少了内存的拷贝次数, 每创建一个PF_RING套接字便分配一个环形缓冲区,当套接字结束时释放缓冲区,不同套接字拥有不同缓冲区,将PF_RING套接字绑定到某网卡上,当数据包到达网卡时,将其放入环形缓冲区,若缓冲区已满,则丢弃该数据包 PF_RING定义了一个处理函数skb_ring_handler(),插入前两个核心函数的起始位置,每当有数据包需要传递时,先经过skb_ring_handler()的处理。 ? (2)非零拷贝的pf_ring(pf_ring noZC): ? (3)零拷贝的pf_ring(pf_ring ZC): ? ; Transparent_mode=2:数据包只由PF_RING模块处理,不经过内核,直接mmap到用户态 后两种模式需要使用PF_RING特殊定制的网卡驱动:pf_ring.ko

    2.5K61发布于 2019-10-15
  • 来自专栏DPDK VPP源码分析

    vppinfra ---ring理解

    代码位置:src\vppinfra\ring.h ring结构体描述 typedef struct { u32 next, n_enq; } clib_ring_header_t; ring 头只有 n_enq : ring中存储的元素数量。 ring队列长度是通过vec_len(ring)来得到的。 ring内存分布 ring内存分布还是比较简单的,如下: ring操作函数 ring操作函数一共就8个,也是非常简洁高效的。 入队时需要注意,因为ring是不支持动态扩展的,所以当前ring满时,会返回NULL。 出队时也一样,当ring队列为空时,也返回NULL。否则返回元素指针。 always_inline void * clib_ring_get_last_inline (void *v, u32 elt_bytes, int enqueue) { clib_ring_header_t

    45510编辑于 2023-03-07
  • 来自专栏黄腾霄的博客

    2020-3-1-什么是ring0-ring3

    大家可能听说过某个代码需要运行在ring 0的说法。但是ring 0究竟是什么,今天就给大家介绍下。 Ring 可以用下面这张图来表示这种权限关系 ? 从内到外依次使用0-3标识,这些环(ring)。越内部的圈代表的权限越大。内圈可以访问,修改外圈的资源;外圈不可以访问,修改内圈的资源。 为什么会有4个ring?因为x86的cpu,在Data segment selector中使用了2个bits来描述权限。 我们最常见的是ring 0(内核态),和ring 3(用户态)。 因为例如windows和unix这些常见的操作系统,只提供了两种权限模式,所以并没有完全使用整个ring架构。 所以我们在一般情况下,完全可以使用ring 0 表示内核态,ring 3表示用户态。 ---- 参考文档: Protection ring - Wikipedia Call gate (Intel) - Wikipedia 系统调用 - 维基百科,自由的百科全书 全局描述符表 - 维基百科

    1.3K40发布于 2020-06-10
  • 来自专栏张善友的专栏

    写入Ring Buffer

    尽管如此,Ring Buffer 还是与消费端一样提供了一个 ProducerBarrier 对象,让生产者通过它来写入 Ring Buffer。 它听起来容易 -“给我 Ring Buffer 里的下一个节点”。 现在生产者想要写入 Ring Buffer 中序号 3 占据的节点,因为它是 Ring Buffer 当前游标的下一个节点。 ProducerBarrier 先等待 Ring Buffer 的游标追上当前的位置(对于单生产者这毫无意义-比如,我们已经知道游标到了 12 ,而且没有其他人正在写入 Ring Buffer)。 因此 Ring Buffer 移动游标到 13,让 ProducerBarrier 戳一下 WaitStrategy 告诉所有人都知道 Ring Buffer 有更新了。

    1.7K60发布于 2018-01-19
  • 来自专栏ADAS性能优化

    Android Audio Ring Buffer

    The definition and initialization of Ring Buffer 2. by reader with read() method. 3) It indicates how many frames reader has already read from the Ring wait reader to read out existing data from Ring Buffer. 2.9 Relationship 3. 1) To get the available frame count to read of Ring Buffer (red=mRear-mFront). When there is no available frame in Ring Buffer, it means Ring Buffer is in UNDERFLOW state, and reader

    1.4K20编辑于 2022-05-13
  • 来自专栏Eureka的技术时光轴

    Ring0和Ring3 HOOK 大检查

    4.IAT HOOK (ring3 用) IAT是可执行文件的导入表,记录可执行文件使用的其它DLL中的函数,通过替换IAT表中的函数地址,可以hook相应DLL中的函数调用。 5、Inline Hook方法 (ring 0和ring3 都可以用) Inline hook的工作流程: 1)验证内核API的版本(特征码匹配)。 2)撰写自己的函数,要完成以上三项任务。 具体情况,我才疏学浅,尚未试验 6.SYSENTRY hook 为了性能的考虑,xp后的系统都改用sysentry命令来进入ring0,去调用SSDT中的服务,不再是通过IDT中的 int 2E。

    1.6K20发布于 2019-07-24
  • 来自专栏Eureka的技术时光轴

    KeUserModeCallback用法详解(Ring0调用Ring3代码)

    ring0调用ring3早已不是什么新鲜事,除了APC,我们知道还有KeUserModeCallback.其原型如下: 代码: NTSTATUS KeUserModeCallback ( OpenProcess(返回后) 这是一个ring3->ring0->ring3的过程。 而KeUserModeCallback的过程是这样的 nt! KeUserModeCallback(调用后) 这是一个ring0->ring3->ring0的过程,在堆栈准备完毕后,借用KiServiceExit的力量回到了ring3,它的着陆点是KiUserCallbackDispatcher 需要注意的地方是: (1) ring3的指令只能访问ring3的内存地址,所以如果需要访问数据,必须放在ring3可以访问到的内存中。 继续执行 现在回到ring3了,ring3下还是习惯用OD,在KiUserCallbackDispatcher处下断(注意使用条件断点,否则无数飞向user32的调用将会把你淹没)。

    2.9K10发布于 2020-03-19
  • 来自专栏施炯的IoT开发专栏

    Ring Tone Manager on Windows Mobile

    搜索到铃声以后,选择”Add to ring tones”的话,是将该文件拷贝到设备的”My Device”->”Application Data” ->”Sounds”文件夹下。

    77360发布于 2018-01-11
  • 来自专栏张善友的专栏

    Ring Buffer 有什么特别?

    首先 - Ring Buffer。我对 Disruptor 的最初印象只有 Ring Buffer。 后来我渐渐明白 Ring Buffer 结构是这个模式的中心,关键之处是 Disruptor 如何控制对它的访问。 Ring Buffer 究竟是什么? 这是刻意的-选择 Ring Buffer 的根本原因是需要支持可靠的消息通信。 Ring Buffer 这么棒是因为...? 我们使用 Ring Buffer 这种数据结构,是因为它给我们提供了可靠的消息传递特性。这个理由就足够了,不过它还有一些其他的优点。 所有这些东西我还没有在 Ring Buffer 一节真正提到。这是因为 Ring Buffer 本身并不负责这些事情,我们把这些问题挪到了数据结构的外部。

    2.3K70发布于 2018-01-29
  • 来自专栏idba

    网卡的 Ring Buffer 详解

    多 CPU 下的 Ring Buffer 处理 因为分配给 Ring Buffer 的空间是有限的,当收到的数据包速率大于单个 CPU 处理速度的时候 Ring Buffer 可能被占满,占满之后再来的新数据包会被自动丢弃 如果在多核 CPU 的服务器上,网卡内部会有多个 Ring Buffer,NIC 负责将传进来的数据分配给不同的 Ring Buffer,同时触发的 IRQ 也可以分配到多个 CPU 上,这样存在多个 Ring Buffer 的情况下 Ring Buffer 缓存的数据也同时被多个 CPU 处理,就能提高数据的并行处理能力。 Ring Buffer 相关命令 在生产实践中,因 Ring Buffer 写满导致丢包的情况很多。当环境中的业务流量过大且出现网卡丢包的时候,考虑到 Ring Buffer 写满是一个很好的思路。 3.4 调整 Ring Buffer 队列大小 查看当前 Ring Buffer 大小: [root@test]$ ethtool -g em1 Ring parameters for em1: Pre-set

    2.6K10编辑于 2023-02-24
  • 来自专栏张善友的专栏

    如何从 Ring Buffer 读取?

    从 上一篇博客​ 我们都明白了什么是 Ring Buffer 以及 它有多棒。遗憾的是,我还没有提到当你实际使用 Disruptor 时,怎样读写数据。 假设一些魔法已经把数据填入 Ring Buffer 了,怎样从 Ring Buffer 读出这些数据? ? (唔,我开始后悔使用 Paint/Gimp​ 了。 就像 Ring Buffer 显然需要序号才能找到下一个可用节点一样,消费者一样需要知道序号——每个消费者都需要找到下一个它要访问的序号。 在上面的例子中,消费者处理完了 Ring Buffer 里序号 8 之前的所有数据,那么它期待访问的下一个序号是 9。 因为这些新的节点的确已经写入(Ring Buffer 本身的序号已经更新),而且消费者对这些节点的唯一操作是读而不是写,因此访问不用加锁。

    2.5K70发布于 2018-01-29
  • 来自专栏王小雷

    storm-core使用gradle打包找不到 ring-cores问题Could not find ring-cors:ring-cors:0.1.5.

    问题storm-core使用gradle打包找不到ring-cors:ring-cors:0.1.5. FAILURE: Build failed with an exception. Could not find ring-cors:ring-cors:0.1.5. Searched in the following locations: https://repo.maven.apache.org/maven2/ring-cors/ring-cors/0.1.5 /ring-cors-0.1.5.pom https://repo.maven.apache.org/maven2/ring-cors/ring-cors/0.1.5/ring-cors-0.1.5.jar

    55810编辑于 2022-05-07
  • 来自专栏Eureka的技术时光轴

    Ring0 注入 Ring3 的一种新方法

    2009/12/29 * * 模块: InjectRing3.c [sys module] * * 平台: Windows XP SP2 * * 描述: * Ring0 注入 Ring3 的一种新方法。 * 挂起ring3线程后,修改其TrapFrame里的eip,再恢复其执行。 NULL; FuncType KeResumeThread = NULL; //////////////////////////////////////////////// // // 被注入到ring3 /////////////////////////////////////////// VOID OnUnload(IN PDRIVER_OBJECT o){ DbgPrint("Fypher's ring3injector

    1.4K10发布于 2019-11-21
  • 来自专栏wym

    Prime Ring Problem hdu 1016

    A ring is compose of n circles as shown in diagram. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely

    46330发布于 2018-08-30
  • 来自专栏全栈程序员必看

    ringbuffer的常规用法_wear ring

    示例 ring_buffer.h ring buffer 封装API testringbuffer.c 测试ring buffer api. *p_ring_buf = (ring_buffer*)malloc(sizeof(ring_buffer)); if (NULL == p_ring_buf) return p_ring_buf item; } static void* ring_buffer_get_head(ring_buffer *p_ring_buf) { if (p_ring_buf->head == p_ring_buf %d, capacity %d\n", ring_buffer_size(ring_buf), ring_buffer_capacity(ring_buf)); item = ring_buffer_get_tail %d\n", ring_buffer_size(ring_buf), ring_buffer_capacity(ring_buf)); } int main(){ ring_buffer *ring_buf

    37810编辑于 2022-09-30
  • 来自专栏模拟版图layout设计

    Virtuoso Fluid Guard Ring 教程(2)

    上篇文章我们介绍了Multipart Path Guard Ring(以下简称:MPP-GR)和Fluid Guard Ring(以下简称:FGR)的区别以及FGR的制作, 本篇我们将介绍如何生成FGR (1)FGR的生成; 打开layout界面,菜单栏点击Create---Fluid Guard Ring…,弹出如下对话框; 可以看到在Create Guard Ring界面中,有4个选项,分别代表着画出 Ring; Polygon:表示可以使用多边形来生成一个Guard Ring; 由于上面4种方式差别不大,这里就以Wrap方式来举例说明,其他3种读者可自己操作。 :表示在对多个器件生成Guard Ring时,是生成单个Guard Ring还是多个Guard Ring,如下图; Place at Minimum Distance Enclose by:表示生成Guard Guard Ring界面设置的参数在Create Guard Ring界面中可以根据需要选择性更改; Tips2:在layout 界面下,可以在工具栏右键选择Guard Ring,这样工具栏中就出现了相关编辑图标

    3.8K12编辑于 2023-11-22
  • 来自专栏ml

    HDUOJ----(1016)Prime Ring Problem

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ) Total Submission(s): 21151    Accepted Submission(s): 9465 Problem Description A ring is compose of Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely

    756100发布于 2018-03-21
  • 来自专栏python3

    运行在“Ring -3” 的 MINIX

    MINIX 运行在你的 CPU 的 “Ring -3”(负数 3) 层上,虽然是你的 CPU,但是你无权访问它。 你能够实际访问的最低的 “Ring” 是 “Ring 0”,你的操作系统(比如 Linux)内核就运行在这一层,而大多数用户程序则运行在 “Ring 3”(正数 3)上。 这个运行在 “Ring -3” 的 MINIX 包括如下功能: 完整网络堆栈、文件系统、许多驱动程序 (包括 USB、网络等),以及一个 Web 服务器! 没错,Web 服务器。 其次,由于你根本没权限访问到“Ring -3”,而这个 MINIX 却能够完全访问你的整个系统——这就是一个巨大的安全风险,运行权限极大,但是从不更新。

    63020发布于 2020-01-14
领券