我想探索一个正在运行的进程的内存,当我这样做时,该进程一定不能被打扰-因此,将gdb附加到该进程(这将停止它)是不可行的。因此,我想从/ proc /
kcore获取此信息(如果您知道执行此操作的另一种方法,请告诉我)。所以我做了一个小实验。我创建了一个名为TEST的文件,其中仅包含“
EXTRATESTEXTRA”。然后我用更少的时间打开它
$ less TEST
我得到了这个过程的PID
$ ps aux | grep TEST
user 7785 0.0 0.0 17944 992 pts/8 S+ 16:15 0:00 less TEST
user 7798 0.0 0.0 13584 904 pts/9 S+ 16:16 0:00 grep TEST
然后,我使用此脚本创建了所有文件的转储:
#!/bin/bash
grep rw-p /proc/$1/maps | sed -n 's/^\([0-9a-f]*\)-\([0-9a-f]*\) .*$/\1 \2/p' | while read start stop; do gdb --batch --pid $1 -ex "dump memory $1-$start-$stop.dump 0x$start 0x$stop"; done
(我在这个网站上找到它https://serverfault.com/questions/173999/dump-a-linux-processs-
memory-to-file)
$ sudo ./dump_all_pid_memory.sh 7785
之后,我在所有转储文件中寻找“ TRATESTEX”:
$ grep -a -o -e '...TRATESTEX...' ./*.dump
./7785-00624000-00628000.dump:HEXTRATESTEXTRA
./7785-00b8f000-00bb0000.dump:EXTRATESTEXTRA
./7785-00b8f000-00bb0000.dump:EXTRATESTEXTRA
因此,我得出结论,该字符串必须在0x00624000和0x00628000之间出现。因此,我将偏移量转换为十进制数,并使用dd从/ proc /
kcore获取内存:
$ sudo dd if="/proc/kcore" of="./y.txt" skip="0" count="1638400" bs=1
令我惊讶的是,文件y.txt充满了零(我没有在其中找到要查找的字符串)。
令我惊讶的是,我同时使用不同的测试文件运行了类似的测试,发现我正在使用的其他测试字符串(两个同时运行较少的进程)应该在同一位置找到(转储和greping给出了相同的偏移量)。所以肯定有些我不明白的东西。
/ proc / pid / maps是否应该显示内存的偏移量(即:如果说“ XXX”位于偏移量0x10处,则另一个程序不能使用相同的偏移量,对吗?-这是我第二个惊喜的来源)
我如何读取/ proc / kmap以获得属于我知道的pid进程的内存?
对于进程1234,您可以通过顺序读取/proc/1234/maps
(文本伪文件)来获取其内存映射,并通过对稀疏伪文件的适当段进行read(2)
-ing或mmap(2) -ing来读取虚拟内存/proc/1234/mem
。
但是,我相信您无法避免某种同步(也许与ptrace(2)一样gdb
),因为进程1234可以(并且确实)随时更改其地址空间(使用mmap
&相关的系统调用)。
如果受监视的进程1234不是任意的,则情况有所不同,但是如果可以改进它以某种方式与监视进程进行通信,则情况会有所不同。
我不确定您为什么要问这个。并且gdb
能够在watch
不停止进程的情况下到达某个位置。
我正在寻找一种方法来读取PHP会话的内容,而无需实际替换当前请求的运行会话。 假设我有一个正在运行的会话(之前使用session_start()启动,使用默认会话处理程序和PHPSESSID cookie提供的session_id),现在我有了另一个(有效的)session_id,我想读取该会话中存储的一些数据。 我能想到的唯一方法是用$old会话=session_id()替换当前会话,用sess
问题内容: 当我写这篇文章时,我尝试使用Pandas处理大型CSV文件。 它会引发“ pandas.parser.CParserError:错误标记数据。C错误:内存不足” wc -l表示有13822117行,我需要在此csv文件数据帧上进行汇总,有没有办法处理其他然后拆分CSV成几个文件,并编写代码以合并结果?有什么建议吗?谢谢 输入是这样的: 所需的输出是这样的: 如果数据集较小,则可以使用下
问题内容: 如何在不冻结程序的情况下用Java执行进程?我已经尝试过使用SwingWorker,但是我还不太了解它是如何工作的。 我还有其他方法可以做到这一点吗?我想在我的JDroidLib中使用类似的东西。有关完整的源代码,请查看GitHub:http : //github.com/Team-M4gkBeatz/JDroidLib 提前致谢! 编辑: 感谢您的回答。但是我有一个带有几种方法的类(
我在这里找到了一些关于使用Android阅读NFC标签的最近帖子。我得到的结论是,执行NFC读取动作会触发一个分离的意图。 那么第一个问题:在我的清单中列出意图过滤器是否必要? 我认为这是没有必要的,因为我不想推出我的应用程序通过NFC标签事件,对吗? 第二个问题:我如何保持我的NFC阅读逻辑/功能与我的app/活动相关? 例如,在iOS中,在VC中需要时有一个简单的NFC会话。
我有一个过滤器视图,在关闭后,我想做两件可访问性的事情: 宣布“$listSize列表中的项目”,因为应用过滤器将更改列表大小 将焦点设置为“添加过滤器”按钮 我尝试了以下方法: 我希望TalkBack按顺序阅读: “列表中的 20 个项目” “过滤器按钮” 但是,它通常会跳过第一次读出,只读取上的文本。有时它会在跳到第二个之前只读取第一个的一部分。 如何强制TalkBack读出两个辅助功能事件?
问题内容: 我正在编写我的第一个烧瓶应用程序。我正在处理文件上传,基本上我想要的是读取上传文件的数据/内容而不保存它,然后将其打印在结果页面上。是的,我假设用户始终上传一个文本文件。 这是我正在使用的简单上传功能: 现在,我正在保存文件,但是我需要的是一个’a’变量来包含文件的内容/数据。 问题答案: 包含字段。该对象必须扩展IO或文件对象,因此它必须包含read和其他类似方法。还扩展了strea