搭建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

相关文章

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按