关于android 调用自己编译的su文件报错的问题

问题描述

关于android 调用自己编译的su文件报错的问题

百度加google,自己弄了一个zlsu执行文件,放到system/bin/目录下后,调用它的时候,报错:
java.io.IOException: write failed: EPIPE (Broken pipe)。

解决方案

su文件代码如下:

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <sys/stat.h>

#include <unistd.h>

void executecmd(char* c);
int exe(int argc, char* argv[]);
int main(int argc, char* argv[])
{
    char* c;
    char* d;
    c = argv[0];
    d = "export CLASSPATH=/data/app/com.zl.movetest-2.apk && export LD_LIBRARY_PATH=/vendor/lib:/system/lib && exec app_process /data/app com.zl.movetest/MoveUtil com.zl.hw 2";
    puts("print cmd: start");
    puts(argv[1]);
    puts(argv[2]);
    puts("print cmd: end");
    printf("%s
",argv[1]);
    printf("%s
",argv[2]);
    /*
    puts(c);
    puts(d);
    argv[1] = "-c";
    argv[2] = d;
    executecmd(d);
      return 0;
        return exe(argc,argv);
    */
    return exe(argc,argv);
}

void executecmd(char* c){

        /*
                char Com[80];
        strcpy(Com,"netsh wlan set hostednetwork mode=allow ssid=");
        strcat(Com,u.c_str());
        strcat(Com," key=");
        strcat(Com,k.c_str());
        */
        system(c);

        return;
    }

static int executionFailure(char *context)
{
        fprintf(stderr, "su: %s. Error:%s
", context, strerror(errno));
        return -errno;
}
static int permissionDenied()
{
        // the superuser activity couldn't be started
        printf("su: permission denied
");
        return 1;
}

int exe(int argc, char* argv[]){
 struct stat stats;
        struct passwd *pw;
        int uid = 0;
        int gid = 0;

        if(setgid(gid) || setuid(uid))
                return permissionDenied();

        char *exec_args[argc + 1];
        exec_args[argc] = NULL;
        exec_args[0] = "sh";
        int i;
        char stra[256];
        sprintf(stra,"%d",argc);
        char coma[80];
                strcpy(coma,"main cmd num : ");
                strcat(coma,stra);
                puts(coma);
        for (i = 1; i < argc; i++)
        {
                exec_args[i] = argv[i];
                char Com[80];
                strcpy(Com,"main cmd: ");
                strcat(Com,exec_args[i]);
                puts(Com);

        }
        execv("/system/bin/sh", exec_args);
        return executionFailure("sh");

}

解决方案二:

http://bbs.csdn.net/topics/391017555
http://www.xue163.com/588880/39101/391017555.html
http://stackoverflow.com/questions/22907189/java-io-ioexception-write-failed-epipe-broken-pipe

解决方案三:

据我亲测和看雪上一些大神的帖子,这种方法在一些高版本的Android上已经失效了,Google利用了Linux的一个草案,将所有应用的父进程app_process程序运行时限制了权能,使由应用exec出来的Linux程序没有使用setuid和setgid的权限,也就是说,即使你把su加上了s位,那么运行后只有euid是root,uid和gid设置不上,就没有root权限,比如我这里的Android4.4就是这样,现在的root软件都是利用系统漏洞实现开机时启动一个root守护进程,su程序只完成进程通信,只是一个空壳。

解决方案四:

android编译报错问题
Android R文件报错问题
关于.pc文件编译报错不准问题

时间: 2024-10-31 01:30:04

关于android 调用自己编译的su文件报错的问题的相关文章

c#调用delphi编写的dll文件报错,尝试读取或写入受保护的内存

问题描述 c#调用delphi编写的dll文件报错,尝试读取或写入受保护的内存 delphi函数原型 Procedure invoke(params :PChar; result : PChar) ; 解决方案 把这个delphi的原型改一下,改为 Function Pchar invoke(params :PChar) ; 再试试 解决方案二: Function invoke(params: PAnsiChar): PAnsiChar ;

android:我的代码目录里没有 drawable-hdpi-v4这个文件夹,在编译的时候总是报错

问题描述 android:我的代码目录里没有 drawable-hdpi-v4这个文件夹,在编译的时候总是报错 请问这是什么原因呢,根本就没有drawable-hdpi-v4这个文件夹 解决方案 找到错误了,是因为三方jar包导致~ 解决方案二: 检查下你的资源文件,你的资源文件出错了, 解决方案三: 或许是你的编程工具,或者环境,出现了错误,重新装一次. 解决方案四: 你的jar包引用出问题了 解决方案五: 我也遇到了这个问题,请问如何解决的?

界面-Android 调用系统文件管理器 进行文件储存

问题描述 Android 调用系统文件管理器 进行文件储存 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); 用这段代码跳转到系统文件管理器了. 但是没有保存按钮该怎么保存?能不能在跳转的界面上添加个保存按钮 想要的效果!图片说明实际效果 解决方案 文件保存 为什么 调用文件管理器? 直接写

library-请教大神帮忙解决一下eclipse里面android_NDK编译.c文件报错

问题描述 请教大神帮忙解决一下eclipse里面android_NDK编译.c文件报错 "D:Androidandroid-ndk-r9dndk-build.cmd" all 系统找不到指定的文件. [armeabi-v7a] Compile thumb : hello-jni <= hello-jni.c jni/hello-jni.c:31:1: fatal error: opening dependency file ./obj/local/armeabi-v7a/objs

ndroid项目 文件报错-Android项目R文件报错

问题描述 Android项目R文件报错 Android新建项目R.java文件报错求大神帮忙! 解决方案 试试重新build一下 解决方案二: 是因为没有找到定义的padding的属性,看看是否取到

eclipse安装反编译工具jad打开.class文件报错

问题描述 eclipse安装反编译工具jad打开.class文件报错 /*jadclipse*/ /* DECOMPILATION REPORT Decompiled from: D:mavenrepositoryorgspringframeworkspring-webmvc3.2.4.RELEASEspring-webmvc-3.2.4.RELEASE.jar Total time: 0 ms Jad reported messages/errors: Exit status: 0 Caugh

android合并两个app,构建过了编译不通过,报错如下

问题描述 android合并两个app,构建过了编译不通过,报错如下 公司要求合并两个app,基本上构建过了,就是编译的时候报出这个错误.纠结了好久,又大神指导什么原因吗? 解决方案 我已经解决了谢谢啊.参考文献http://blog.csdn.net/t12x3456/article/details/40837287 解决方案二: 你是怎么合并的?能把代码架构截个图么?

axis1 调用axis2 的服务上传pdf文件.报错

问题描述 axis1 调用axis2 的服务上传pdf文件.报错 axis1 调用axis2 的服务上传pdf文件.报错org.apache.axis2.AxisFault:invalid reference:cid:******的错误 解决方案 Axis2数据绑定报错 解决方案二: http://download.csdn.net/detail/dongf800/5187102

android studio values文件报错

问题描述 android studio values文件报错 这种情况该怎么办?新建一个项目就这样.clean project和project struction还有tools-Android-sync project都试过了,是版本的问题吗?还是缺了什么东西?初学,望各位大神能解答!谢谢! 解决方案 http://bbs.csdn.net/topics/391812641 解决方案二: Android studio R文件报错android studio R文件报错解决办法关于Android