NDK如何调试系统核心动态库(无系统源码的情况)
版权归薛定諤耗子所有,转载请表明出处。
1,有源码,需要导入符号表
2,没有源码,如何调试
1)运行ndk-gdb:../../ndk-gdb --verbose --launch=com.example.test.MainActivity
2)(gdb) shell adb shell ps:超找出当前apk所在的线程
结果
3)(gdb) shell adb shell cat /proc/2362/maps
结果
我们关心的内容在
4)由上面可以看出,我们需要调试库的加载地址是40a16000,使用IDA Pro打开该库文件,找到我们感兴趣的地址
5)所以,其所在便宜地址应该是0x40a16000+0x59d98=0x40A6FD98,我们去反汇编该内存地方的内容看看,是不是确实是这几条指令
IDA显示的内容是
可见,是一致的。
6)这个方法不行,导致断点下去之后,无法停住,会出现
Program received signal SIGSEGV, Segmentation fault.的错误
7)我们可以在so文件之前,再加上一个简单的库文件,这样就可以借此机会进入so
System.loadLibrary("hello-jni");
Log.e("zcfdebug", "Now we will wait for 5 s");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.e("zcfdebug", "Now we finish waiting for 5 s");
TextView tv = new TextView(this);
// tv.setText( stringFromJNI() );
//this is ladder to make breakpoint in so library
String xxx= stringFromJNI();
System.loadLibrary("sa");
//add here to debug loadLibrary method
8)重启启动调试:../../ndk-gdb --verbose --launch=com.example.hellojni.HelloJni
9)在因子so库里面下断点,然后打开反汇编开关
10)继续运行,单步运行,之后就能进入我们的libdvm.so库
11)打开IDA Pro,找到我们感兴趣的断点,然后重新再下断点
12)然后重新下断点,然后continue停到感兴趣的断点
13)这样就可以debug下去了。
NDK如何调试系统核心动态库(无系统源码的情况)的更多相关文章
- Android FrameWork 学习之Android 系统源码调试
这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会 ...
- Android FrameWork学习(二)Android系统源码调试
通过上一篇 Android FrameWork学习(一)Android 7.0系统源码下载\编译 我们了解了如何进行系统源码的下载和编译工作. 为了更进一步地学习跟研究 Android 系统源码,今天 ...
- Android系统架构与系统源码目录
前言 技术博客终于可以恢复正常的更新速度了,原因是我编写的进阶书籍的初稿已经完成,窃以为它将会是Android应用书籍中最有深度的一本,可以说是<Android开发艺术探索>的姊妹篇.在这 ...
- Android系统源码目录
Android系统源码目录 我们要先了解Android系统源码目录,为后期源码学习打下基础.关于源码的阅读,你可以访问http://androidxref.com/来阅读系统源码.当然,最好是将源码下 ...
- Android 7.1.1系统源码下载、编译、刷机-Nexus 6实战
想成为一位合格的Android程序员或者一位Android高级工程师是十分有必要知道Android的框架层的工作原理,要知道其工作原理那么就需要阅读Android的源代码. 想要阅读Android的源 ...
- Android开发系列之系统源码目录
相信大家对于Google给出的那副经典Android架构图非常的熟悉,从下往上依次是Linux内核层(主要是负责硬件管理调度),HAL层(主要是硬件抽象层),libs层+Runtime,Framewo ...
- 将Android系统源码导入Android studio的方法
Android源码目录结构如下: |-- Makefile|-- abi (applicationbinary interface,应用程序二进制接口,生成libgabi++.so相关库文件)|-- ...
- 一文读懂Spring动态配置多数据源---源码详细分析
Spring动态多数据源源码分析及解读 一.为什么要研究Spring动态多数据源 期初,最开始的原因是:想将答题服务中发送主观题答题数据给批改中间件这块抽象出来, 但这块主要使用的是mq消息的方式 ...
- 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程
原文 http://blog.csdn.net/zhaoxy_thu/article/details/18883015 本文主要对从 ...
随机推荐
- Java发送HTTP POST请求(内容为xml格式)
今天在给平台用户提供http简单接口的时候,顺便写了个调用的Java类供他参考. 服务器地址:http://5.0.217.50:17001/VideoSend 服务器提供的是xml格式的h ...
- sql 时间和字符串 取到毫秒级
(select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')+(Select ri ...
- NSArray的4种遍历方式
前言:NSArray对应的是java的List,不同的是其元素不能更改,不过其派生类NSMutableArray可以更改,遍历的方式跟java的List基本一样 一. for循环 Student * ...
- Binary Tree Preorder Traversal and Binary Tree Postorder Traversal
Binary Tree Preorder Traversal Given a binary tree, return the preorder traversal of its nodes' valu ...
- Java疯狂讲义(二)
- vs2010 调试 调用堆栈 窗口
msdn 如何使用call stack窗口: http://msdn.microsoft.com/zh-cn/library/a3694ts5(v=vs.90).aspx 使用“调用堆栈”窗口可以查看 ...
- perl post 带上请求头
my $url='https://www.zjcap.cn/business/dispatch_post.do?action=submitAdminLogin'; my $res = $ua-> ...
- 一个包含所有c++的头文件的头文件
#include <bits/stdc++.h> 做CF看见别人用这个函数,然后就能直接用vector,set,string那些函数了,摸不着头脑,感觉特神奇就百度了一下,才发现这个是C+ ...
- Python+Django+SAE系列教程11-----request/pose/get/表单
表单request,post,get 首先我们来看看Request对象,在这个对象中包括了一些实用的信息,学过B/S开发的人来说这并不陌生,我们来看看在Django中是怎样实现的: 属性/方法 说明 ...
- vs2013内置IISExpress相关问题
问题描述,以前做的程序迁移到vs2013后出现500.22问题. HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设 ...