首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Gdb gcore“未实现此目标的命令”

Android Gdb gcore“未实现此目标的命令”
EN

Stack Overflow用户
提问于 2014-07-10 16:35:20
回答 3查看 1.4K关注 0票数 2

我使用gdb来转储android进程的核心文件。我在tcp端口上的设备上运行gdbserver,桌面上运行gdb客户端。当我在客户端上做gcore时,我会得到以下错误。有没有人知道我为什么会犯这个错误,任何帮助我都很感激。

(gdb)没有为这一目标实现gcore命令。

我之所以这么做是为了转储进程内存,并使用核心文件从内存中提取Classes.dex文件。我试过使用/proc/pid/mem和proc/pid/map并转储内存来完成这个任务,但是由于映射区域太多,我找不到Classes.dex文件所在的区域。任何其他替代办法也是受欢迎的。谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-13 15:54:22

首先,您只能从内存中转储odex (因为dex编译为odex以执行)。但是,用baksmali将odex转换成dex并不是什么大事。

要在内存中找到odex,可以使用gdb检查映射内存的每个起始地址(proc/pid/maps第一列)的魔术号:

代码语言:javascript
复制
gdb --batch --pid "pid_task" -ex x/s "mem_start"

因此,当返回的值等于“dey\n 36”时,可以通过gdb转储这个内存区域。试着从文件“proc/pid/map”的末尾开始检查内存地址,这样会快得多。

对不起,我的英语,但希望它会有帮助。

票数 2
EN

Stack Overflow用户

发布于 2014-07-13 17:27:11

@Chris,内存映射的classes.dex文件将不同于磁盘上apk中的dex文件,例如,在打包的dex文件中,部分dex将被清理,问题是通过获取进程内存来转储内存映射的classes.dex文件。

票数 1
EN

Stack Overflow用户

发布于 2017-04-18 04:52:15

为此您可以使用GameGuardian。需要根。

内存编辑器选项卡-菜单-内存转储-输入0-0作为范围和文件夹-按确定-等待吐司Dump end

转到选定的文件夹-打开地图文件-在区域中搜索所需的odex -记住区域的开始地址-打开的GameGuardian -菜单-内存转储-输入两个字段中的记忆地址作为范围-按ok -等待吐司Dump end

现在您的文件夹中有.bin文件和转储的odex文件。

此外,您还可以在GameGuardian UI中的下拉列表中找到地址。按下右下图标与转储范围字段。

下面是一些视频示例,说明如何做到这一点:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24681924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档