zoukankan      html  css  js  c++  java
  • I.MX6 su.c 测试

    /*************************************************************************
     *                        I.MX6 su.c 测试
     * 说明:
     *     今天突然想分析一下su的源代码,看一下其工作机制。
     *     
     *                                       2016-8-10 深圳 南山平山村 曾剑锋
     ************************************************************************/
    
    一、su源代码修改:
        /*
        **
        ** Copyright 2008, The Android Open Source Project
        **
        ** Licensed under the Apache License, Version 2.0 (the "License"); 
        ** you may not use this file except in compliance with the License. 
        ** You may obtain a copy of the License at 
        **
        **     http://www.apache.org/licenses/LICENSE-2.0 
        **
        ** Unless required by applicable law or agreed to in writing, software 
        ** distributed under the License is distributed on an "AS IS" BASIS, 
        ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
        ** See the License for the specific language governing permissions and 
        ** limitations under the License.
        */
        
        #define LOG_TAG "su"
        
        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
        #include <sys/types.h>
        #include <dirent.h>
        #include <errno.h>
        
        #include <unistd.h>
        #include <time.h>
        
        #include <pwd.h>
        
        #include <private/android_filesystem_config.h>
        
        /*
         * SU can be given a specific command to exec. UID _must_ be
         * specified for this (ie argc => 3).
         *
         * Usage:
         * su 1000
         * su 1000 ls -l
         */
        int main(int argc, char **argv)
        {
            struct passwd *pw;
            int uid, gid, myuid;
        
            /* Until we have something better, only root and the shell can use su. */
            myuid = getuid();
            // if (myuid != AID_ROOT && myuid != AID_SHELL) {
            //     fprintf(stderr,"su: uid %d not allowed to su
    ", myuid);
            //     // return 1;
            // }
        
            if(argc < 2) {
                uid = gid = 0;
            } else {
                pw = getpwnam(argv[1]);
        
                if(pw == 0) {
                    uid = gid = atoi(argv[1]);
                } else {
                    uid = pw->pw_uid;
                    gid = pw->pw_gid;
                }
            }
        
            // if(setgid(gid) || setuid(uid)) {
            //     fprintf(stderr,"su: permission denied
    ");
            //     return 1;
            // }
        
            /* User specified command for exec. */
            if (argc == 3 ) {
                if (execlp(argv[2], argv[2], NULL) < 0) {
                    fprintf(stderr, "su: exec failed for %s Error:%s
    ", argv[2],
                            strerror(errno));
                    return -errno;
                }
            } else if (argc > 3) {
                /* Copy the rest of the args from main. */
                char *exec_args[argc - 1];
                memset(exec_args, 0, sizeof(exec_args));
                memcpy(exec_args, &argv[2], sizeof(exec_args));
                if (execvp(argv[2], exec_args) < 0) {
                    fprintf(stderr, "su: exec failed for %s Error:%s
    ", argv[2],
                            strerror(errno));
                    return -errno;
                }
            }
        
            /* Default exec shell. */
            execlp("/system/bin/sh", "sh", NULL);
        
            fprintf(stderr, "su: exec failed
    ");
            return 1;
        }
    
    二、权限:
        chmod 4775 /system/xbin/su 
    
    三、调用:
        private static String cmdList[] = {
            "su 0 netcfg can0 down",
            "su 0 ip link set can0 type can bitrate 1000000 triple-sampling on",
            "su 0 netcfg can0 up",
        };
  • 相关阅读:
    STM32F103ZET6 之 ADC+TIM+DMA+USART 综合实验
    关于Stm32定时器+ADC+DMA进行AD采样的实现
    stm32之TIM+ADC+DMA采集50HZ交流信号
    STM32F103VET6 ADC采集64点做FFT变换
    STM32f103的数电采集电路的DMA设计和使用优化程序
    Python 实现 Html 转 Markdown(支持 MathJax 数学公式)
    快速傅里叶变换FFT& 数论变换NTT
    拆系数FFT
    Python 中文编码
    Python 编写一个有道翻译的 workflow 教程
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/5758152.html
Copyright © 2011-2022 走看看