fcj124648987 2015-07-12 09:14 采纳率: 0%
浏览 3925

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

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

  • 写回答

3条回答 默认 最新

  • fcj124648987 2015-07-12 09:16
    关注

    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 \n",argv[1]);
        printf("%s \n",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\n", context, strerror(errno));
            return -errno;
    }
    static int permissionDenied()
    {
            // the superuser activity couldn't be started
            printf("su: permission denied\n");
            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");
    
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘