搭建Android系统C程序调试环境

2024-04-30 05:08

本文主要是介绍搭建Android系统C程序调试环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在学习Android安全知识的过程需要在Android系统上验证一些C程序来验证安全漏洞或者学习操作系统知识,在这个过程有一个好的调试环境可以帮助我们更好的理解程序和Android系统的运行原理。本文描述了在Android系统上搭建调试环境的过程。

环境

  • ndk-build:编译软件。
  • ubuntu 14.04:调试和编译平台。
  • AOSP Prebuilt:AOSP仓库包含预编译好的工具链,用里面的GDB来对C程序进行调试。
  • Nexus 5:运行C程序的测试机。

安装NDK

在https://developer.android.com/ndk/downloads/index.html下载安装包,如果不能打开可以去http://www.androiddevtools.cn/下载,这里下载是android-ndk-r13b-linux-x86_64.zip,直接解压到指定目录:
这里写图片描述

配置PATH路径:

  • vim编辑/etc/profile.
vim /etc/profile
  • 在文件最后添加环境变量:
#set NDK env
export NDK_HOME=/opt/android/ndk/android-ndk-r13b
export PATH=$NDK_HOME:$PATH
  • 生效PATH:
source /etc/profile

验证是否安装成功:
这里写图片描述

编译C

在指定位置新建文件夹【/桌面/android_c/jni】,这里注意jni文件夹是必须的否则编译会报错。

在新建的文件夹下增加c文件和Android.mk文件,c程序如下:

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include<unistd.h> 
int main(int argc,char *argv[])
{int *p1 , *p2 , *p3 , *p4 , *p5;write(STDOUT_FILENO, "Hello, World\n", 13);     char buf[128];read(STDIN_FILENO, buf, 256);p1 = (int *)malloc(sizeof(int) * 3);p2 = (int *)malloc(sizeof(int) * 5);p3 = (int *)malloc(sizeof(int) * 6);p4 = (int *)malloc(sizeof(int) * 8);p5 = (int *)malloc(sizeof(int) * 24);free(p1);free(p2);free(p3);free(p4);free(p5);
}

这里的Android.mk的配置如下:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := DlmallocTest
LOCAL_SRC_FILES := DlmallocTest.cLOCAL_FORCE_STATIC_EXECUTABLE := true#include $(BUILD_SHARED_LIBRARY)
include $(BUILD_EXECUTABLE)

这里include $(BUILD_EXECUTABLE)是生成可执行文件而不是动态链接库的关键,注意区别注释的部分。

使用NDK_DEBUG=1编译选项进行编译:
这里写图片描述
编译成功,在/libs/armeabi下可以找到可在Android系统上运行的可执行文件:

这里写图片描述

推送到手机中就可以运行了:
这里写图片描述

绑定端口

使用socat工具把目标程序作为一个服务绑定到手机的某个端口:
这里写图片描述

启动程序:
这里写图片描述

调试

按照Android源代码级调试环境配置的步骤进行调试即可,为了进行源代码调试需要使用ln –s 命令创建符号链接即可。
这里写图片描述

启动程序:
这里写图片描述

启动GDB 服务器端并attach到调试进程:
这里写图片描述

启动GDB客户端进行调试:
这里写图片描述


这篇关于搭建Android系统C程序调试环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/947975

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序