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

相关文章

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv