Android深入系统完全讲解(41)

news2024/10/7 6:41:12

我们要学习的是整体逻辑,我们 C 找 Java 的依据是类和对象,参数中 JNIEnv *env, jobject
obj 。 env 代表当前环境上下文,这个当我们多个线程调用的时候,需要
AttachCurrentThread 进行设定,让 env 关联到当前线程,使用后 DetachCurrentThread 解
除绑定。 默认不需要关注,多线程时候,出现调用故障,可以往这个方向思考。
多线程开发,核心是并发下的数据同步。所以我们写代码,就要注意方法的可重用性,也就
是尽量不使用全局变量,如果用,有多个线程竞争的时候,就会出问题。
要解决这个全局变量的问题,就会使用到多线程开发中的同步机制。
相关知识,参考《深入理解操作系统》第三版。快速学习,可以阅读如下网
站:https://github.com/CyC2018/CS-Notes#computer-%E6%93%8D%E4%BD%9C%E7%B3%BB%E
7%BB%9F
17. 参考文档
官方 r8 里面的 docs
官方 r8 里面的 samples,作为学习参考代码
https://developer.android.google.cn/ndk/guides/
https://github.com/googlesamples/android-ndk/tree/master
学习 NDK 这些就足够了,如果你需要继续进阶,课程最后的延伸内容,希望能帮助到你。 异常分析思路
18.1 native-lib.c 写个异常
Java_hellojni_codegg_com_hellojni_MainActivity_myResultFromJNI 方法后面加入如下一段代
码:int *p=NULL;
*p=0; 我们丢个空指针,让应用运行异常,然后打开 Logcat,选中 Error 类别,可以看到如下一
段错误:在这里插入图片描述
Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 2346 (gg.com.hellojni), pid 2346 (gg.com.hellojni)
异常类型 SEGV_MAPERR ,异常地址为 0,在线程 2346 ,报名为 gg.com.hellojni ,进程
为 2346 里面。
Build fingerprint: ‘Android/vbox86p/vbox86p:9/PD1A.180720.031/22:userdebug/test-keys’ 初步
定位版本信息,可以确定下版本是否正确。
ABI: ‘x86’ 这里可以看到我们配置的 ABI 是 x86 。(我们项目使用的是 armeabi-v7a ,这
里我在模拟器演示,模拟器用了 x86 ,于是修改了 build.gradle 中的 abiFilters “armeabi-v7a” 为 abiFilters “x86”) Cause: null pointer dereference 报出了错误信息,空指针引用 eax
00000000 这个指示第一个参数为空,一般是我们引用的直接指针,跟上面的提示一致了。
backtrace: 这个下面是关键,通过这个堆栈信息,去找对应的代码位置。 #00 pc
000007cc /data/app/hellojni.codegg.com.hellojni-dTY8-szLK_JlHlNRLDpEZw==/lib/x86/libnative-li
b.so (Java_hellojni_codegg_com_hellojni_MainActivity_myResultFromJNI+396 ) 这里指出了是
在 Java_hellojni_codegg_com_hellojni_MainActivity_myResultFromJNI 的汇编指令的偏移 396
行。
我们使用的调试 so 库。如果是 Release 版本,只有红色的部分信息。于是我们就要想办法,
通过红色部分的信息,找到代码位置在哪。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/179437.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux常见命令 24 - RPM命名管理-包命名与依赖性

目录 1. RPM包命名规则 2. RPM包依赖性 1. RPM包命名规则 如包全名:httpd-2.2.15-15.e16.centos.1.i686.rpm httpd:软件包名2.2.15:软件版本15:软件发布的次数el6.centos:适合的Linux平台:CentOS 6.xi6…

springboot和nacos整合mybatis-plus实现多数据源管理

文章目录1.依赖2.配置文件3.redis测试3.1redis配置文件3.2controller3.3测试4.mysql测试4.1数据库表和结构4.2实体类和枚举4.3DogMapper.xml4.4DogMapper4.5service和serviceImpl4.6controller4.7测试写了一个小demo,通过mybatis-plus实现多数据源管理使用了mysql和…

【笔记】A simple yet effective baseline for 3d human pose estimation

【论文】https://arxiv.org/abs/1705.03098v2 【pytorch】(本文代码参考)weigq/3d_pose_baseline_pytorch: A simple baseline for 3d human pose estimation in PyTorch. (github.com) 【tensorflow】https://github.com/una-dinosauria/3d-pose-baseline 基本上算作是2d人体…

Python压缩JS文件,PythonWeb程序员必看系列,重点是 slimit

Python 压缩文件系列文章,我们已经完成了 2 篇,具体如下: Python Flask 实现 HTML 文件压缩,9 级压缩 Python 压缩 css 文件,第三方模块推荐 压缩JS学习目录🚩 jsmin 库🎨 库的安装&#x1f3a8…

HackTheBox Stocker API滥用,CVE-2020-24815获取用户shell,目录遍历提权

靶机地址: https://app.hackthebox.com/machines/Stocker枚举 使用nmap枚举靶机 nmap -sC -sV 10.10.11.196机子开放了22,80端口,我们本地解析一下这个域名 echo "10.10.11.196 stocker.htb" >> /etc/hosts 去浏览器访问…

操作系统真相还原_第5章第4节:特权级

文章目录特权级TSS简介CPL和DPL入门处理器提供的从低特权级到高特权级的方法门、调用门和RPL序特权级 保护模式下特权级按照权力大小分为0、1、2、3级 0特权级是操作系统内核所在的的特权级 TSS简介 TSS,即Task State Segment,意为任务状态段&#x…

Modbus协议完整版

第一部分:Modbus协议1 引言1.1 范围MODBUS是OSI模型第7层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。自从1979年出现工业串行链路的事实标准以来,MODBUS使成千上万的自动化设备能够通信。目前&am…

【图卷积网络】03-空域卷积介绍

注:本文为3.1-3.2 空域卷积视频笔记,仅供个人学习使用 1、谱域图卷积 1.1 回顾 上篇博客【图卷积神经网络】02-谱域图卷积介绍讲到了三个经典的谱域图卷积: SCNN用可学习的对角矩阵来代替谱域的卷积核。 ChebNet采用Chebyshev多项式代替谱…

TIA博途中计算多个数据的算术平均值的具体方法示例

TIA博途中计算多个数据的算术平均值的具体方法示例 我们这里采用官方提供的Floating Average功能块来实现多个数据的算术平均值的计算。 此功能块计算最新输入的100个数值的均值(浮动平均值)。采集的数据队列达到100个之后,队列每入栈一个新数值,将去掉一个队列里最早进来的…

高通平台开发系列讲解(GPS篇)gpsONE 系统架构

文章目录 一、系统架构图二、gpsONE系统组成三、gpsONE交互流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢高通的定位系统模块,名称叫gpsONE。 一、系统架构图 二、gpsONE系统组成 GPS系统架构可以分为六个部分: APP层Framework Client端(LocationManager API…

网站被挂马植入webshell导致网站瘫痪案例

一、问题现象 下午两点,刚刚睡醒,就接到了客户打来的电话,说他们的网站挂(这个用词很不准确,但是感觉到问题的严重性)了,询问是怎么发生的,之前做了什么操作,客户的回答…

Bash 脚本实例:获取符号链接的目标位置

我们都熟悉 Linux 中的符号链接,通常称为符号链接或软链接,符号链接是指向任何文件系统中的另一个文件或目录的特定文件。本文将介绍 Linux 中符号链接的基础知识,并创建一个简单的 bash 脚本来获取符号链接的目标位置。符号链接的类型主要有…

【栈和队列】java实现栈和队列以及集合中的栈和队列

前言: 大家好,我是良辰丫🏍🏍🏍,今天我带领大家去学习栈和队列的相关知识,💞💞💞栈和队列在数据结构中是相对简单的,但是应用还是蛮多的&#xff…

分享142个ASP源码,总有一款适合您

ASP源码 分享142个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 142个ASP源码下载链接:https://pan.baidu.com/s/1TxdTrCJpO08rKLCUzIh0hQ?pwdyhka 提取码&#x…

微信小程序+云函数+腾讯云对话机器人API(ChatBot)

文章目录 前言 一、小程序云开发是什么? 二、步骤 1. 在app.js中绑定好云环境id,并且选好当前环境以及选好云文件夹 2. 去到腾讯云API Explorer中选好Region地区和Query这个必填参数,然后进行代码生成 3. 在上面的API Explorer网站点击前往获…

Python局部函数及用法

Python 函数内部可以定义变量,这样就产生了局部变量,有读者可能会问,Python 函数内部能定义函数吗?答案是肯定的。Python 支持在函数内部定义函数,此类函数又称为局部函数。那么,局部函数有哪些特征&#x…

Redis实现好友关注 | 黑马点评

目录 一、关注和取关 二、共同关注 三、关注推送(feed流) 1、Timeline模式的方案 拉模式 推模式 推拉结合模式 总结 2、推模式实现关注推送 需求 feed流分页问题 feed流的滚动分页 实现推送到粉丝的收件箱 …

(学习笔记)opencv和dlib的基础操作

来源:投稿 作者:LSC 编辑:学姐 本篇文章将讲述作者对opencv和dlib基础操作的学习笔记。 首先来看opencv的11种基础操作 (1)imread 读取图片 (2)resize 图片缩放 (3)cvtColor 灰度化 (4)threshold 阈值化 (5)bitwise_not 图像取反 (6)a…

JavaEE-初识网络

目录一、局域网二、广域网三、网络通信基础3.1 IP地址3.2 端口号3.3 协议四、协议分层五、封装和分用一、局域网 局域网,网络种类,覆盖范围一般是方圆几千米之内,其具备的安装便捷、成本节约、扩展方便等特点使其在各类办公室内运用广泛。局…

有序列表标签与无序列表标签

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> </head> <body bgcolor"bisque"> <!-- 在ol有序列表标签和ul无序列表标签…