首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    unlink漏洞的原理和利用

    0x2 unlink是什么 unlink说的是linux系统在进行空闲堆块管理的时候,进行空闲堆块的合并操作。一般发生在程序进行堆块释放之后。...介绍unlink之前先的说一下linux系统中的堆块的结构(其实就是一个双向链表): 由于篇幅的问题,这里不再详细说明linux的堆块管理过程,可以参考这篇文章,里面说的十分详细,但是有一些错误,至于哪里错了...这里只说一下linux堆块的结构如如下图所示: unlink的操作可以使用ctf-wiki的图可以很好描述: 其实最终就进行了一个在双向链表中删除节点P的操作,让P堆块和BK堆块合并成一个空闲堆块...\n\n");    chunk0_ptr = (uint64_t*) malloc(malloc_size); //chunk0    uint64_t *chunk1_ptr  = (uint64_...= False\n");    chunk0_ptr[3] = (uint64_t) &chunk0_ptr-(sizeof(uint64_t)*2);    printf("Fake chunk fd

    2.3K20

    uint32 t java_数据类型 — uint32_t 类型「建议收藏」

    如: a> 当某个数据不可能为负数时我们一定要考虑用以下类型: unsigned char, unsigned int, uint32_t, size_t, uint64_t, unsigned long...int, b> 当有些数据你不知道是正负时一定不要用”a>”中的类型, 不然他永远也不可能为负. c> 数据的边界值要多注意, 如: uint32_t a, b, c; uint64_t...m; m = a * b + c; 在该运算中可能出现错误, “a*b”的类型可能超过uint32_t的最大值,这时一定不要忘了类型转换. m = ((uint64_t)a) * b + c; 2>....我们都知道linux C开发中的常见扩展数据类型的定义有:uint8_t, uint16_t, uint32_t, uint64_t, size_t, ssize_t, off_t …....if 0 #include // uint32_t #endif typedef unsigned int uint32_t; typedef unsignedlong long uint64

    1.8K30

    百万并发连接挑战:wrk的高并发测试深度解析

    然而,端口号是一个short类型的2字节变量,其取值范围有限,即使我们放宽操作系统的端口范围限制(在Linux中可通过sysctl调整net.ipv4.ip_local_port_range),端口的数量最多也只能达到..._t complete; uint64_t complete_at_last_batch_start; uint64_t catch_up_start_time; uint64_...t complete_at_catch_up_start; uint64_t thread_start; uint64_t start; char *request; size_t...; uint64_t latest_connect; uint64_t latest_write; } connection; 可以看到,对于发起测试的HTTP请求内容,wrk全局只保存了一份...这些改动配合Linux系统内核的TCP连接内存优化,使得单机wrk测试能够达到C10M,即百万并发级别的性能测试,这为评估高性能系统在极端负载下的并发度提供了一种有效的手段。

    1.2K10
    领券