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

相关文章

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加