#ifdef _WIN32
#define __USE_MINGW_ANSI_STDIO 1
#endif #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#ifdef HAS_STDINT_H
#include <stdint.h>
#endif
#ifdef unix
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#else
#include <direct.h>
#include <io.h>
#endif #define MAGIC 0xF97CFF8A #define S_IFMT 00170000
#define S_IFSOCK 0140000
#define S_IFLNK 0120000
#define S_IFREG 0100000
#define S_IFBLK 0060000
#define S_IFDIR 0040000
#define S_IFCHR 0020000
#define S_IFIFO 0010000
#define S_ISUID 0004000
#define S_ISGID 0002000
#define S_ISVTX 0001000 #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) char *mode_to_string(unsigned int mode)
{
if (S_ISBLK(mode))
return "-b";
else if (S_ISCHR(mode))
return "-c";
else if (S_ISDIR(mode))
return "-d";
else if (S_ISFIFO(mode))
return "-p";
else if (S_ISLNK(mode))
return "-l";
else if (S_ISSOCK(mode))
return "-s";
else if (S_ISREG(mode))
return "--";
else
return "";
} int main(int argc, char *argv[])
{
unsigned int selinux_vers;
unsigned int nothing;
unsigned int i;
unsigned int steams;
unsigned int num_of_regex; char steam[];
char src[];
char context[]; FILE *fp = NULL;
FILE *fpout = NULL; if (argc != ) {
printf("usage: %s BINARY_FILE OUTPUT_TEXT_FILE\n", argv[]);
printf("e.g: %s file_contexts.bin file_contexts\n", argv[]);
return ;
} if ((fp = fopen(argv[], "rb")) == NULL) {
printf("Unable to open %s : ", argv[]);
perror("");
return ;
}
fread(&nothing, , , fp);
if (nothing != MAGIC) {
printf("%s is not a binary!\n", argv[]);
if (fp) fclose(fp);
return ;
} fread(&nothing, , , fp);
selinux_vers = nothing;
fread(&nothing, , , fp);
fseek(fp, (unsigned int)ftell(fp) + nothing, SEEK_SET); fread(&nothing, , , fp);
//printf("num of steams: 0x%x\n", nothing); for (i=; i<nothing; ++i) {
fread(&steams, , , fp);
fread(steam, , steams+, fp);
//printf("%s\n", steam);
} fread(&num_of_regex, , , fp);
//printf("num of regex: 0x%x\n", num_of_regex); if ((fpout = fopen(argv[], "wb")) == NULL) {
printf("unable to open %s for write!\n", argv[]);
if (fp) fclose(fp);
return ;
} //printf("selinux version: %d\n", selinux_vers);
fprintf(fpout, "#context version %d\n", selinux_vers); for (i=; i<num_of_regex; ++i) {
fread(&nothing, , , fp);
fread(context, , nothing, fp);
fread(&nothing, , , fp);
fread(src, , nothing, fp);
//printf("%s %s\n", src, context);
fread(&nothing, , , fp);
fprintf(fpout, "%s\t%s\t%s\n", src, mode_to_string(nothing), context);
fseek(fp, (unsigned int)ftell(fp) + , SEEK_SET);
fread(&nothing, , , fp);
fseek(fp, (unsigned int)ftell(fp) + nothing, SEEK_SET);
fread(&nothing, , , fp);
fread(&nothing, , , fp);
fseek(fp, (unsigned int)ftell(fp) + nothing - , SEEK_SET);
} if (fp) fclose(fp);
if (fpout) fclose(fpout); return ;
}

Android系统file_contexts二进制与文本转换工具的更多相关文章

  1. 我的Android进阶之旅------>Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)

    Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换) 有时候要做出如下所示的展示文件大小的效果时候,需要对文件大小进行转换,然后再进行相关的代码逻辑编写. 下面是一个Java ...

  2. Json:Java对象和Json文本转换工具类

    Json 是一个用于 Java 对象 和 Json 文本 相互转换的工具类. 安装 下载源码 git clone https://github.com/njdi/durian.git 编译源码 cd ...

  3. android px,dp,sp大小转换工具

    package com.voole.playerlib.util; import android.content.Context; /** * Android大小单位转换工具类<br/> ...

  4. Android 系统API实现数据库的增删改查和SQLite3工具的使用

    在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...

  5. android的二进制和十六进制的相互转换工具类(一):

    二进制和十六进制的相互转换工具类: package com.gzcivil.utils; public class BinStr { /** * 将二进制转换成16进制 * @param buf * ...

  6. Android Bitmap与DrawAble与byte[]与InputStream之间的转换工具类【转】

    package com.soai.imdemo; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; ...

  7. 【安卓本卓】Android系统源码篇之(一)源码获取、源码目录结构及源码阅读工具简介

    前言        古人常说,“熟读唐诗三百首,不会作诗也会吟”,说明了大量阅读诗歌名篇对学习作诗有非常大的帮助.做开发也一样,Android源码是全世界最优秀的Android工程师编写的代码,也是A ...

  8. Android 系统工具类

    系统工具类 public class systemUtil { //隐藏ipad底部虚拟按键栏 @RequiresApi(api = Build.VERSION_CODES.KITKAT) publi ...

  9. Android系统源代码——所需工具

    一.概述 众所周知,Android移动操作系统是Google花费了很大的财力.物力及人力的前提下,推广到世界各个角落,以开放源代码的方式(当然也不是完全开放所有),使其在世界范围内迅速漫延开来,到目前 ...

随机推荐

  1. ref:关于JAVA中一些安全漏洞示例说明及如何规避方法代码示例总结分享

    ref:http://www.xwood.net/_site_domain_/_root/5870/5874/t_c268166.html 标签:安全,漏洞,健壮,java,SQL注入,SS及CSRF ...

  2. 牛客练习赛3 F - 监视任务

    链接:https://www.nowcoder.net/acm/contest/13/F来源:牛客网 题目描述

  3. 【基础知识】.Net基础加强第三天

    一. 里氏替换原则--类型转换 1. 里氏替换原则:当需要一个父类类型对象的时候,可以给一个子类类型的对象. 2. 里氏替换原则实际也就是发生了隐身转换 3.  a.>把子类类型赋值给父类类型, ...

  4. 拉格朗日乘子法以及KKT条件

    拉格朗日乘子法是一种优化算法,主要用来解决约束优化问题.他的主要思想是通过引入拉格朗日乘子来将含有n个变量和k个约束条件的约束优化问题转化为含有n+k个变量的无约束优化问题. 其中,利用拉格朗日乘子法 ...

  5. anaconda安装tensorflow后pip安装jieba出错的问题

    安装jieba出错,参考https://www.cnblogs.com/minsons/p/7872647.html TypeError: parse() got an unexpected keyw ...

  6. 下载 ....aar jitpack.io 打不开。

    下载 ....aar aar 是 安卓的 打包. 相对与jar 就是可以打包android的资源 比如res下的 . ------ jitpack.io  打不开. ====== 这个是jcenter ...

  7. 一个".java"的源文件中,是否可以包含多个类?(除了匿名内部类),有什么限制?

    # 二.一个".java"的源文件中,是否可以包含多个类?(除了匿名内部类),有什么限制?   - 可以包含多个类   - 条件:其它类不能用private.public.prot ...

  8. angularjs中如何在异步请求执行完以后再执行其他函数?

    angularjs中如何在异步请求执行完以后再执行其他函数? 之前脑袋回路就是从上到下的执行js,直到有一次我的页面上已经显示了空才走到angularjs里的$http的成功回调函数里,然后才开始正视 ...

  9. 基于springboot的spring JSR validation 后台参数验证

    springboot集成JSR参数校验: 1. 导入maven <dependency> <groupId>org.springframework.boot</group ...

  10. 优化中的subgradient方法

    哎.刚刚submit上paper比較心虚啊.无心学习.还是好好码码文字吧. subgradient介绍 subgradient中文名叫次梯度.和梯度一样,全然能够多放梯度使用.至于为什么叫子梯度,是由 ...