Articles of pipe理员

如何使用C / C ++将代码注入正在运行的进程

我正在寻找关于如何通过在运行时直接将代码注入内存来操作函数的build议。 目标是最终运行一个外部应用程序,该应用程序能够操作正在运行的进程以达到优化目的。 到目前为止,我已经走下了使用GDB操纵内存的路线,按照这个教程: http://www.codeproject.com/Articles/33340/Code-Injection-into-Running-Linux-Application?fid=1534990&df=90&mpp=10&sort=Position&spc=Relaxed&tid=4678205 但是,现在已经相当过时了,我似乎无法在64位体系结构上工作…我将不胜感激任何有关此主题的build议。 干杯

使用fifos和链接来控制网页的远程过程(Linux)

我在linux服务器上使用mpg123,我试图通过网页(apache)控制它,使用链接发送不同的控件。 mpg123有-C标志,所以你可以发送字符到它。 “s”键=开始/停止,“f”键=下一首曲目…等等。 我想我可以用fifo发送mpg123这些密钥,将mpg123 stdin改为fifo stdout,但是我不知道如何在这种情况下使用fifo(如何让mpg123“听”另一个stdin)。 我所做的是: mkfifo myfifo myfifo | mpg123 -C -@ musiclist.txt And then I've created keys.txt adding some keys to the file: echo "f" >> keys.txt echo "s" >> keys.txt 然后: cat keys.txt >> myfifo.fifo 这不起作用。 有人可以解释我可以使用fifos将消息传递给正在运行的mpg123吗? 我GOOGLE了,但无法find我想要的。 这个问题似乎给了我一些亮点,但是我仍然不知道如何让mpg123听取fifo的输出。 先谢谢你,

一个用户级进程可以在linux下处理OOM错误吗?

假设我已经禁用了所有的OOM相关function(没有OOM杀手)。 一个进程占用了所有可用的内存,并且仍然试图从mmapped磁盘文件中读取一些不在任何页面caching中的字节。 这个过程是否会得到一个OOM信号,这样它可以被动地释放一些内存并在以后重试?

限制一个程序的内存使用限制

我想限制一个程序的内存使用情况。 我在网上search,发现ulimit -v可以用来做到这一点。 使用该命令后,我可以看到使用ulimit -a的限制。 但是,我的程序仍然使用相同数量的内存。 我在程序运行时用top命令检查了内存使用情况。 我没有看到限制发生。 有什么不对的吗? 我正在使用CentOS Linux版本7.1.1503(核心)。

Linux堆分配

在FreeRTOS ,堆只是一个全局数组,在用户可以修改的H文件中定义了一个大小(让call是heapSize )。 这个数组是一个非初始化的全局数组,它使它成为图像的BSS部分的一部分,因此在加载时它被填充为零,然后从该数组中取出每个内存分配,并且分配的内存的每个地址是这个数组的偏移量。 因此,为了最大限度地利用内存大小,我们可以近似计算整个程序的Data , Text和BSS区域的大小,并将堆大小定义为heapSize = RAM_size – Text_size – Data_size – BSS_size 。 我想知道什么是Linux操作系统的等价实现。 Linux可以扫描给定的RAM并在运行时决定其大小吗? linux有一个等同的数据结构来pipe理堆? 如果是这样的话,首先如何为这个数据结构分配内存?

连续的内存块如何减less内存访问时间?

当我们使用kmalloc()时,这个函数返回连续的物理内存块(如果有的话)和vmalloc(),我们得到非连续的内存块(如果有的话)。 进一步地说,与不连续的存储器块[源链接]相比,连续存储器块的存取速度更快。 具体来说,可以考虑两种情况: 设1个物理帧= 4 KB,页面大小= 4 KB 案例1:在我的模块代码中,我使用kmalloc()为char数组分配20 KB内存; 调用成功。 案例2:我使用vmalloc()完成了上述请求,调用成功。 我的问题是: a)与vmalloc()相比,kmalloc()完成请求需要多less时间? b)与非连续分配相比,连续分配如何导致内存的快速访问? 在每种情况下,CPU产生虚拟地址,给MMU(如果TLB未命中),进行页面遍历,识别帧号,然后将虚拟地址转换为物理地址。 如果地址是连续的或不连续的,它们有什么关系?

为什么只读内存映射区域有脏页面?

执行(例如)以下命令以获取内存映射页面的列表: pmap -x `pidof bash` 我得到这个输出: 为什么一些只读页面被标记为“脏”,即写入需要回写? 如果它们是只读的,则进程不应该能够写入它们(在提供的示例中,脏页总是4 kB,但是我发现了具有不同值的其他情况) 我也检查了/ proc / pid / smaps,页面被描述为“Private Dirty”。

在linux内核中断

我已经采取了我的omap4基于自定义板gpio作为inputgpio。 当我连接任何端口上的任何外部h / w然后inputgpio得到拉下来,我得到该gpio中断。 现在,当我运行Linux内核2.6的工作正常,并获得该GPIO的中断,但是当我使用Linux内核3.0,它不会在该GPIO上创build中断。 该gpio的值不会改变,中断处理程序不会被调用。 那么在Linux内核中创build中断的电源设置有什么不同?

在Linux上直接从内核访问用户内存

我有一个用户模式的进程和内核模块。 现在我想从内核读取usermode进程的某些区域,但是有一个问题:没有复制用户模式内存和VA简单访问。 所以我们有:task_struct的目标进程,其他相关的结构(如mm_struct,vma_struct)和虚拟地址,如0x0070abcd,我想要读取或更确切地映射到我的内核模块。 我可以使用get_user_pages获取所需内存区域的页面列表,但接下来呢? 我应该将页面以某种方式映射到内核中,然后尝试将它们作为连续内存区域读取,还是有更好的解决scheme?

如何findinheritance类的分配地址

我尝试创build一些通用的create / delete函数,这些函数用于embedded式环境,其中普通的new / delete函数不可用,并且在分配内存时必须使用module_id。 完整的代码是在审查: https : //codereview.stackexchange.com/questions/33858/implementing-create-and-destroy-functions-to-replace-new-and-delete-oper 在使用多个固有类时,我在代码中发现了一个问题: #include <stdlib.h> #include <stdint.h> #include <iostream> #include <utility> #include <new> using namespace std; template<typename T_, typename …Args> T_ *create(uint32_t module_id, Args&&… args) { // use module_id T_ *p = (T_ *)calloc(1, sizeof(T_)); std::cout << "calloc: " << sizeof(T_) << " -> " << (void *)p […]