[原创]Android沙盒开发之系统libc库定制修改

2013-7-29 22:29

11525

[原创]Android沙盒开发之系统libc库定制修改

2013-7-29 22:29

11525

标 题: 【原创】Android沙盒开发之系统libc库定制修改

作 者: 蟑螂一号

时 间: 2013-07-29,21:52:11

android系统中libc是c层中最基本的函数库,libc中封装了io、文件、socket等基本系统调用。所有上层的调用都需要经过libc封装层。以Android4.2.2源码为例分析java socket的调用流程。

Android4.2.2中,java层中的socket、bind、connect、send、recv、sendto、recvfrom等socket函数功能和C层socket的socket、bind、connect、send、recv、sendto、recvfrom等 是通过JNI方式实现java层socket到c层socket的调用。

在源码目录libcore/luni/src/main/native/libcore_io_Posix.cpp中实现了java层socket功能的native函数。在该文件中,可以发现java层的socket发送和接收使用的是sendto和recvfrom函数,并没有使用系统调用send和recv。 n

在源码目录bionic/libc/unistd目录下,可以看到send和recv系统调用实现是直接调用sendto和recvfrom。然而sendto和recvfrom函数实现文件并不好找。原来sendto和recvfrom是通过汇编代码实现,在汇编代码中通过swi调用中断号实现功能。那么如果我想把sendto或者recvfrom直接独立成c源文件该如何做?

实现方法(以sendto为例):

1.找到sendto.S文件,android4.2.2中文件路径bionic/libc/arch-arm/syscalls/目录下。

2.将sendto.S改为__sendto.S并在汇编代码中将sendto改为__sendto.

3.在bionic/libc/arch-arm/目录中修改后缀mk文件中的sento.S为__sendto.S。

4.在bionic/libc/include/sys/socket.h中修改socketcall为前缀的sendto函数声明,将socketcall改为extern关键字。

5.在bionic/libc/unistd中增加sendto.c文件,在文件中增加如下代码:

#include

#include

extern  ssize_t  __sendto(int,const void *,ssize_t ,unsinged int ,struct sockaddr*,socketlen_t);

ssize_t    sendto(int fd,const void * buf,ssize_t len,unsinged int flags ,struct sockaddr* addr,socketlen_t slen)

{

return __sendto(fd,buf,len,flags,addr,slen);

}

6.修改bionic /libc目录中的android.mk文件,在该文件中找到send.c所在位置,并增加一行unistd/sendto.c。

定制修改libc库作用:

在android系统用户空间中libc是用户空间通向内核空间的一扇门。因此,能在此门设立关卡,就可以监控程序的各种数据流信息,对分析应用灰常有用。

android盒子开发招聘,[原创]Android沙盒开发之系统libc库定制修改相关推荐

  1. iOS开发10-iOS SandBox(沙盒或沙盘)介绍、路径获取

    iOS开发10-iOS SandBox(沙盒或沙盘)介绍.路径获取 代码下载(Xcode7.0.1)  有问题请联系博主,邮箱:nathanlee1987@aliyun.com 1.沙盒路径的获取 & ...

  2. Unity设计模式之-Unity3d游戏开发设计模式之子类沙盒模式

    ** 请关注微信公众号获取最新消息 ** 原文链接:http://blog.csdn.net/u013108312/article/details/52208635 本篇文章我们来看下Unity3d游 ...

  3. 环境加密--SDC沙盒防泄密系统

    近年来,电脑以及互联网应用在中国的普及和发展,已经深入到社会每个角落, 政府,经济,军事,社会,文化和人们生活等各方面都越来越依赖于电脑和网络.电 子政务,无纸办公.MIS.ERP.OA 等系统也在企 ...

  4. Win10沙盒功能,系统自带免费免安装

    Win10沙盒功能,系统自带免费免安装 最新版本的Windows 10(版本1903)新增加了一个名为Windows沙盒的内置功能.Windows沙盒允许Windows 10 专业版和Windows ...

  5. SharePoint 2010 沙盒开发

    前言 本文期图阐述在SP2010里面Sandboxed的原理极其相关使用.写这篇文章的时候正好遇到一个用户的case,这个case需要在某个列表里输入数据点击保存后数据能按照一定的格式插到Calend ...

  6. 游戏开发设计模式之子类沙盒模式(unity3d 示例实现)

    积累提供所有操作(的实现)来定义子类的行为 用一个最简单的例子来讲解这个模式 玩家操纵的英雄也就是这个游戏的主角会有许多技能,我们想定义许多不同的技能,来让玩家使用. 首先我们定义一个skillBas ...

  7. iOS开发-缓存图片到沙盒--思路

    1.图片存储到沙盒中 ? 1 2 3 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDo ...

  8. python前端开发招聘_【天津前端开发招聘_最新天津前端开发招聘信息】-前程无忧...

    天津卓众信息技术有限公司天津-西青区0.6-1万/月11-23 学历要求:本科|工作经验:3-4年|公司性质:民营公司|公司规模:少于50人 1.根据产品设计实现产品的页面交互和数据逻辑展示,负责前端 ...

  9. 树莓派+android+盒子,树莓派3安装Android TV系统图文教程

    树莓派3 Android TV系统怎样安装?树莓派3一个重要用途就是当智能机顶盒,那么安装Android系统肯定是大家的首选,但目前支持树莓派3的Android系统都是第三方移植的,各种问题不断,最重 ...

最新文章

  1. python mysql
  2. 细说Android事件传递
  3. 左侧固定右侧自动填充_办公小技巧:解决Excel公式自动填充问题
  4. Zabbix监控Mysql数据库性能
  5. Yii2 的 redis 应用
  6. 算法导论——基本的图算法
  7. java map统计学生名单_Java含自己的总结:集合,学生,遍历,ArrayList,Set,Map,泛型,班级,发牌—诗书画唱...
  8. lamp和php,[LAMP]Apache和PHP的结合
  9. java集成jpush实现客户端推送
  10. 怎么提前体验鸿蒙,鸿蒙OS手机版明天发布,开发者提前体验,上手操作毫无难度...
  11. 28. PHP 文件上传
  12. 智慧社区电商后台管理系统
  13. java判断时间日期是否等于当前日期
  14. android移除fragment,Fragment 的创建、替换与移除
  15. 并非都完美,笔记本8大致命缺陷曝光
  16. 数据结构 —— ADT(抽象数据类型)
  17. 360搜索推出致敬女性专题 董卿咪蒙领衔十大杰出女性
  18. android dataBinding 与ObservableField实现双向绑定
  19. 早期RA获超声缓解的基线预测因素
  20. [JVM]了断局:内存模型与线程

热门文章

  1. 【R语言】pps采样
  2. python中列表、元组和字典、字符串的方法汇总
  3. Boost.Asio初步(一)
  4. 170-路飞11-分布式异步框架Celery的使用
  5. CSS3 loading效果全
  6. Java 遍历枚举值
  7. win10 mmcv-full mmdection 安装 问题解决方案
  8. 如何利用「心理账户」提高用户付费和留存?
  9. 义乌江东货运市场托运指南
  10. html页面元素ccs文字对中,CCS及HTML语法.doc