Articles of 进程

缓冲区溢出在64位

我正在试图用缓冲区溢出做一些有趣的实验。 我正在阅读这个论坛的主题,并试图写我自己的小代码。 所以我做的是一个小的“C”程序,它需要字符参数并运行,直到分段错误。 所以我提供的参数,直到我得到一个消息,我用41代替了返回地址。我的缓冲区字符长度,我复制我的inputstring是[5]。 这是我在gdb中做的。 run $(perl -e 'print "A"x32 ; ') Program received signal SIGSEGV, Segmentation fault. 0x0000000000400516 in main (argc=Cannot access memory at address 0x414141414141412d 然后我发现需要16个'A'来覆盖。 run $(perl -e 'print "A"x16 . "C"x8 . "B"x32 ; ') 0x0000000000400516 in main (argc=Cannot access memory at address 0x434343434343432f ) 这告诉我们8“C”正在覆盖返回地址。 根据在线教程,如果我提供了一个有效的地址,而不是8“C”。 我可以跳到某个地方并执行代码。 所以我在初始的16“A”之后超载了内存。 下一步是执行 run […]

量化内存,CPU在Linux下使用C进程

如何知道,在Linux中有多lessRAM和CPU“吃”了某些过程? 以及如何找出所有运行的进程(包括守护进程和系统进程)? =) UPD:使用C语言

从信号处理程序打印堆栈跟踪

我需要从在Linux上运行的64位multithreadingC ++应用程序的信号处理程序打印堆栈跟踪。 虽然我find了几个代码示例,但是没有一个编译。 我的阻塞点是从ucontext_t结构中获取调用者(生成信号的点)的地址。 我可以find的所有信息都指向EIP寄存器,如ucontext.gregs [REG_EIP]或ucontext.eip。 看起来他们都是x86特定的。 英特尔和AMD处理器都需要符合64位的代码。 任何人都可以帮忙吗?

如何find一个进程在C中运行?

我想知道一个进程是否正在运行。 我不想使用任何系统(“”)命令。 有没有任何基于C的function,让你知道如果一个进程正在运行? 我想提供进程名称,并想知道它是否正在运行。 谢谢,

来自task_struct的完整进程名称

我想从struct task_struct获得完整的进程名称。 comm字段只能存储16个字符,而进程名称可以更长。 有没有办法得到完整的进程名称? 这可以通过从task_struct获取struct vm_area_struct来完成,并进一步获取映射到vm_area的文件,但这是不可靠的。

Linux中每个进程的编程资源监视

我想知道是否有一个有效的解决scheme来监视Linux中的进程资源消耗(CPU,内存,networking带宽)。 我想用C ++编写一个守护进程来监视某些给定的PID。 据我所知,经典的解决scheme是周期性地从/ proc读取信息,但这似乎并不是最有效的方式(涉及很多系统调用)。 例如,为了监视50个进程每秒的内存使用情况,我必须每秒从/ proc打开,读取和closures50个文件(这意味着150个系统调用)。 更不用说在读这些文件时涉及的parsing。 另一个问题是networking带宽消耗:对于我想要监视的每个进程,这是不容易计算的。 NetHogs采用的解决scheme涉及到相当高的开销,我认为它使用libpcap捕获和分析每个数据包,然后为每个数据包确定本地端口并在/ proc中search以find相应的进程。 你知道是否有更有效的替代方法提出这些方法或任何图书馆处理这个问题?

如何使用sched_getaffinity(2)和sched_setaffinity(2)。 请给代码示例在C程序中使用

我在尝试着 并行运行16个副本(处理器固定)(每个内核2个副本) 在处理器固定的情况下(每个内核2个拷贝)同时运行8个拷贝,并在某个函数表示函数1完成后,将处理器内核翻转到最远的内核。 我面临的问题是如何select最远的处理器。 有些朋友build议使用sched_getaffinity(2)和sched_setaffinity,但我没有find任何好的例子。 请帮忙。

收集Linux命令输出

我现在在一台linux机器上。 我有一个Java程序,可以运行一些Linux命令,例如ps , top , list或free -m 。 在Java中运行命令的方式如下所示: Process p = Runtime.getRuntime().exec("free -m"); 我怎么能通过Java程序收集输出? 我需要处理输出中的数据。

multithreading进程的线程ID是否可以与其他正在运行的进程的进程ID相同?

我试图find一种方法来唯一标识多进程环境中的线程。 我有一个服务器,跟踪不同的进程连接到它,其中一些是multithreading的,其中一些不是。 为了从multithreading连接中识别线程,我使用线程ID作为唯一的标识符(在任何给定时间最多连接1个multithreading进程)。 我的问题是:是否有可能其中一个线程的线程ID可能与系统上运行的另一个进程的进程ID相同? 先谢谢您的帮助!

打开一个shell并在java中与其I / O进行交互

我想打开一个shell(xterm)并与之交互(写入命令并读取shell的输出) 这是一个不能工作的代码示例: public static void main(String[] args) throws IOException { Process pr = new ProcessBuilder("xterm").start(); PrintWriter pw = new PrintWriter(pr.getOutputStream()); pw.println("ls"); pw.flush(); InputStreamReader in = new InputStreamReader(pr.getInputStream()); System.out.println(in.read()); } 当我执行这个程序时,打开一个“xterm”窗口并且不input“ls”命令。 只有当我closures窗口,我得到一个“-1”打印,没有任何东西从shell读取 重要- 我知道我可以使用: Process pr = new ProcessBuilder(“ls”)。start(); 要获得输出,但我需要打开其他用途的“xterm” 非常感谢