Articles of 模块

什么是PHP共享内存(mm,–with-mm)会话模块?

什么是PHP共享内存分配( 毫米 , 编译 – 毫米 )会话模块? 你用过吗? 你testing过了吗? 它工作好吗? 你有会话locking问题吗? 使用文件或自定义会话处理程序(如数据库)时,查看会话数据的内容很容易,但可以使用此模块查看会话数据吗? 想要查看会话数据的个人原因是(1)testingPHP垃圾收集工作是否正常,以及(2)确保不占用所有系统内存。 我认为它曾经是一个单独的(PECL?Zend?)扩展,但现在它在核心。 将它编译成PHP二进制文件的唯一要求是OSSP毫米文件头 ,这是一个小约330k的下载。 $ ./configure –help // –with-mm=DIR SESSION: Include mm support for session storage 我能find的唯一信息是在2006年的一个留言板post中引用了一个现在缺less的Zend会话教程页面[404] ,作者引用这个页面: 如果你需要更高的性能,mm模块是一个可行的select; 它将数据存储在共享内存中,因此不受硬件I / O系统的限制。 我明白其中的两个局限 : (1)请注意,mm的会话存储模块不保证对同一会话的并发访问被正确locking。 使用基于共享内存的文件系统(例如Solaris / Linux上的tmpfs或BSD上的/ dev / md)可能更适合将会话存储在文件中,因为它们已被正确locking。 (2)会话数据存储在内存中,因此Web服务器重新启动将删除它。 我真的很喜欢一个规范的描述,但任何和所有的信息表示赞赏。

eax在pt_regs结构中的位置是什么? 只有斧头是存在的

我试图使用pt_regs结构来获取和设置寄存器,如eax ,但编译错误告诉我, pt_regs没有这样的成员eax 。 但是,我能够得到ax登记册。 有谁可以告诉我发生了什么? 我使用的是3.0.0内核的32位Ubuntu Linux。 再次感谢你。

通过netlink发送一个从内核到用户空间的结构

我试图发送一个结构从一个LKM到userland,基于这个答案: Netlink套接字在C使用3.X的Linux内核 答案本身的代码是完全可编译的,但是当我尝试发送一个struct而不是char * ,我在用户空间中得到了segfaults。 这是我改变的: netlinkKernel.c 我加: typedef struct test{ int a; char *b; } s_test; 并更换 char *msg = "Hello from kernel"; — msg_size = strlen(msg); — strncpy(nlmsg_data(nlh),msg,msg_size); 同 s_test x; xa = 42; xb = "The answer"; — msg_size(sizeof(x)); — memcpy(nlmsg_data(nlh), &x, msg_size); netlinkUser.c 我添加相同的结构并replace printf("Received message payload: %s\n", (char *)NLMSG_DATA(nlh)); 同 […]

Linux内核模块编译

我尝试编译简单的linux内核模块: #include <linux/module.h> #include <linux/kernel.h> int init_module(void) { printk("Hello world 1.\n"); return 0; } void cleanup_module(void) { printk(KERN_ALERT "Goodbye world 1.\n"); } 我的makefile: obj-m = testmodule.o KVERSION = $(shell uname -r) all: make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules clean: make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean 现在我没有在我的.c文件中的错误。 但是,当我尝试在terminal进行:使:没有什么可以做的“全部”。 怎么了? 谢谢。

我怎样才能从proc文件读取大数据?

我试图编写一个内核模块,将一些数据写入proc文件。 我试图写的东西像5000个字符,但是当我说$>猫/ proc / myentry我只能读取1000个字符。 int procfile_read(char *buffer, char **buffer_location, off_t offset, int buffer_length, int *eof, void *data){ int ret; static char my_buffer[4096]; if (offset > 0) { ret = 0; } else { ret = sprintf(my_buffer, LARGE STRING HERE); } *buffer_location=my_buffer; return ret; } 这是我的代码。 提前致谢。

通用netlink中的策略和属性的概念是什么?

我是netlink编程新手。 我正在写一个generic netlink程序来创build一个netlink协议族。 我在互联网上search了很多文档,并且发现了一些“属性和策略”,就像定义一个netlink系列一样。 我完全和这些东西混淆了。 我在linux/netlink.h发现了一些类似于bellow的属性 <——- NLA_HDRLEN ——> <– NLA_ALIGN(payload)–> +—————————+- – -+- – – – – – – – – -+- – -+ | Header | Pad | Payload | Pad | | (struct nlattr) | ing | | ing | +—————————+- – -+- – – – – – – – – -+- […]

在LKM中使用ELF部分

我在C中拥有这个POC,它在自定义节中保存了一些结构,然后遍历这些结构,显示它们的内容。 #include <stdio.h> char a, b, c; struct counter_info { int counter; char *name; } __attribute__((packed)); #define __PUT_STUFF_IN_SECTION(_name) \ do{ \ static struct counter_info __counter_info_##_name \ __attribute((__section__("counters"))) \ __attribute((__used__)) = { \ .name = #_name, \ .counter = 0, \ }; \ }while(0) extern struct counter_info __start_counters; extern struct counter_info __stop_counters; int main(int argc, char […]

Linux内核模块 – 安全风险?

Linux内核模块有多大的安全风险? 我记得读过,如果有人能够访问,那么他们所要做的就是加载一个rootkit模块。 它是否正确? 有什么办法可以防止这个吗? 内核的哪些部分通过模块接口实际暴露出来,程序员可以访问哪些函数,这些函数可以用于恶意软件的目的?

为什么在Linux内核升级后需要重新编译vmware内核模块?

Linux内核升级后,我的VMWare服务器不能启动,直到使用vmware-config.pl做一些重新configuration工作(包括build立一些内核模块)。 如果我用最新的Windows Service Pack更新我的Windows VMWare主机,我通常不需要做任何事情来运行VMWare。 为什么VMWare在Linux和Windows之间的工作方式不同? 这个重新编译的行为是否会在Windows平台上带来任何好处?

search隐藏的模块读取虚拟内核内存?

我目前正在研究一个小型的LKM,它可以像在一些内核级别的Rootkit中那样,将自己隐藏在内核空间中。 导致模块的内核空间是通过vmalloc()分配的find_module_list()迭代vmap_area_list所有条目并调用check_module(): void find_module_list(void) { count = 0; spin_lock(lock); list_for_each_entry(va,l, list) { if (!(va->flags & VM_VM_AREA)) continue; vm = va->vm; vaddr = (unsigned long) vm->addr; if((vaddr < VMALLOC_START) || (vaddr > VMALLOC_END)) break; size = vm->size; printk(KERN_INFO"ADDRESS: %lx\n",vaddr); printk(KERN_INFO"SIZE: %lu\n",size); count++; printk(KERN_INFO"NUMBER: %lu\n",count); unsigned char *i =(unsigned char*)vm->addr; unsigned char *max = (unsigned char*)(vaddr+size); check_module(i,max-PAGE_SIZE); […]