亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? command_parse.c

?? linux內(nèi)核調(diào)試小工具.可以讀寫指定地址上的數(shù)據(jù)
?? C
?? 第 1 頁 / 共 2 頁
字號:
    if(input_count == 0)
    {
        output_len += sprintf(&output[output_len], "Missed func name, %s\n", ksh_cmd[cmd_index].help_string);
        return output_len;
    }
    
    if(input_count > 5)
    {
        output_len += sprintf(&output[output_len], "Too many args, %s\n", ksh_cmd[cmd_index].help_string);
        return output_len;
    } 
    
    /*解析符號表,找到函數(shù)的地址*/
    func_addr = search_symbol(&func_para[0][0]);
    if(func_addr == NULL)
    {
        output_len += sprintf(&output[output_len],"Undefined symbol '%s'\n", &func_para[0][0]);
        return output_len;
    }else
    {
        output_len += sprintf(&output[output_len],"%s @ 0x%08x\n", &func_para[0][0], (UINT32)func_addr);
    }

    switch(input_count){
        case 1:
            res = (UINT32)((RUNC_FUNC0)(func_addr))();
            break;
        case 2:
            res = (UINT32)((RUNC_FUNC1)(func_addr))(simple_strtoul(&func_para[1][0], NULL, 0));
            break;
        case 3:
            res = (UINT32)((RUNC_FUNC2)(func_addr))(simple_strtoul(&func_para[1][0], NULL, 0), \
                                     simple_strtoul(&func_para[2][0], NULL, 0));
            break;
        case 4:
            res = (UINT32)((RUNC_FUNC3)(func_addr))(simple_strtoul(&func_para[1][0], NULL, 0), \
                                     simple_strtoul(&func_para[2][0], NULL, 0), \
                                     simple_strtoul(&func_para[3][0], NULL, 0));            
            break;
        case 5:
            res = (UINT32)((RUNC_FUNC4)(func_addr))(simple_strtoul(&func_para[1][0], NULL, 0), \
                                     simple_strtoul(&func_para[2][0], NULL, 0), \
                                     simple_strtoul(&func_para[3][0], NULL, 0), \
                                     simple_strtoul(&func_para[4][0], NULL, 0));             
            break;
        default:
            output_len += sprintf(&output[output_len],"Too many args\n");
            break;
    }
    output_len += sprintf(&output[output_len],"func res = %d = 0x%08x\n", res, res);
    return output_len;
    
}

int set_var(int cmd_index, int input_count, char *output)
{
    int output_len = 0;
    void * var_addr = NULL;
    UINT32 width = 0;
    UINT32 value = 0;
    
    if(sym_file == NULL)
    {
        output_len += sprintf(&output[output_len],"Should not run to here %s\n", __func__);
        return output_len;
    }
    
    if(input_count < 2)
    {
        output_len += sprintf(&output[output_len], "Missed var name or value, %s\n", ksh_cmd[cmd_index].help_string);
        return output_len;
    }
    
    if(input_count > 3)
    {
        output_len += sprintf(&output[output_len], "Too many args, %s\n", ksh_cmd[cmd_index].help_string);
        return output_len;
    }

    /*解析符號表,找到變量的地址*/
    var_addr = search_symbol(&func_para[0][0]);
    if(var_addr == NULL)
    {
        output_len += sprintf(&output[output_len],"Undefined symbol '%s'\n", &func_para[0][0]);
        return output_len;
    }else
    {
        output_len += sprintf(&output[output_len],"%s @ 0x%08x\n", &func_para[0][0], (UINT32)var_addr);
    }

    if(input_count == 2){
        /*s var_name value*/
        width = sizeof(UINT32);
        value = simple_strtoul(&func_para[1][0], NULL, 0);
    }else if(input_count == 3){
        /*s var_name width value*/
        width = simple_strtoul(&func_para[1][0], NULL, 0);
        value = simple_strtoul(&func_para[2][0], NULL, 0);
    }

    switch(width){
        case 1:
            *((volatile UINT8*)var_addr) = (UINT8)value;
            output_len += sprintf(&output[output_len],"set %s ok, width %d\n", &func_para[0][0], width);            
            break;
        case 2:
            *((volatile UINT16*)var_addr) = (UINT16)value;
            output_len += sprintf(&output[output_len],"set %s ok, width %d\n", &func_para[0][0], width);            
            break;
        case 4:
            *((volatile UINT32*)var_addr) = (UINT32)value;
            output_len += sprintf(&output[output_len],"set %s ok, width %d\n", &func_para[0][0], width);            
            break;            
        default:
            output_len += sprintf(&output[output_len],"unspport width %d\n", width);
            break;
    }

    return output_len;
    
}


int fill_mem(int cmd_index, int input_count, char *output)
{
    int output_len = 0;
    UINT32 addr = 0;
    UINT32 length = 0;
    UINT8 value = 0;
    UINT32 i = 0;

    if(input_count != 3){
        output_len += sprintf(&output[output_len], "format of cmd error, %s\n", ksh_cmd[cmd_index].help_string);
        return output_len;
    }

    
    addr = simple_strtoul(&func_para[0][0], NULL, 0);
    length = simple_strtoul(&func_para[1][0], NULL, 0);
    value = (UINT8)simple_strtoul(&func_para[2][0], NULL, 0);

    for(i = 0; i<length; i++){
        *((volatile UINT8 *)(addr+i)) = value;
    }

    output_len += sprintf(&output[output_len], "fill addr@%08x, length[%d], value[0x%2.2x]\n",
                                              addr, length, value);

    return output_len;
}
    
#if 1//def DEBUG

void run_func0(void)
{
    printk("run into func %s\n", __func__);
}

void run_func1(UINT32 arg1)
{
    printk("run into func %s, arg1 = %d\n", __func__, arg1);
}

void run_func2(UINT32 arg1, UINT32 arg2)
{
    printk("run into func %s, arg1 = %d, arg2 = %d\n", __func__, arg1, arg2);
}

void run_func3(UINT32 arg1, UINT32 arg2, UINT32 arg3)
{
    printk("run into func %s, arg1 = %d, arg2 = %d, arg3 = %d\n", __func__, arg1, arg2, arg3);
}

void run_func4(UINT32 arg1, UINT32 arg2, UINT32 arg3, UINT32 arg4)
{
    printk("run into func %s, arg1 = %d, arg2 = %d, arg3 = %d, arg4 = %d\n", \
        __func__, arg1, arg2, arg3, arg4);
}

#endif

/*
搜索符號表
返回值:
NULL :沒有找到符號
addr:符號所在的地址, void* 
*/
void * search_symbol(char *input_symbol)
{
    char buff[256] = {0};
    char seps[] = " ,\t\n\r";
    char *token = NULL;
    char *temp = NULL;
    mm_segment_t  oldfs;
    
    oldfs = get_fs();
    set_fs(KERNEL_DS);
    
    if (sym_file->f_op->read == NULL ||
        sym_file->f_op->llseek== NULL){
        /*fs doesn't allow read*/
        printk("fs doesn't allow read or seek\n");
        return NULL;
    }
    
    /*回到文件的起始位置*/
    //sym_file->f_pos = 0;
    sym_file->f_op->llseek(sym_file, 0, 0);
    //rewind(symbol_fd); usr mode
    temp = read_line(buff, sizeof(buff)-1, sym_file);
    while( temp )
    {
        char addr[MAX_ADDR_LEN+2+1] = {0};
        char symbol_name[MAX_SYMS_NAME_LEN+1] = {0};
              
        token = (char*)strtok(buff, seps);
        
        if(token == NULL){
            set_fs(oldfs);
            return NULL;
        }
        
        strncpy(addr+2, token, MAX_ADDR_LEN);
        addr[0] = '0';
        addr[1] = 'x';
        token = (char *)strtok(NULL, seps);
        strncpy(symbol_name, token, MAX_SYMS_NAME_LEN);
        
        if(strncmp(symbol_name, input_symbol, MAX_SYMS_NAME_LEN) == 0){
            set_fs(oldfs);
            return (void*)(simple_strtoul(addr, NULL, 0));
        } 
        
        temp = read_line(buff, sizeof(buff)-1, sym_file);
        
    }
    
    set_fs(oldfs);
    return NULL;
}

char * read_line(char *buf, size_t count, struct file *fp)
{
    size_t i = 0;
    char in_char;
    do
    {
    	in_char = read_char(fp);
		buf[i] = (char)in_char;
    	i++;
    }while( (i < count-1) && (in_char != (char) (-1)) && (in_char != (char) (0)) &&(in_char != '\n') && (in_char != '\r') );

    /*EOF =  0 or -1 ? */
    if(in_char == 0){
        printk("return NULL\n");
        return NULL;
    }
    
	buf[i] = 0; 
    //printk("%s\n", buf);
    return(buf);
}

char read_char(struct file *fp)
{
    char out;
    int bytes_read = 0;
    bytes_read = fp->f_op->read(fp, &out, 1, &fp->f_pos);

    return out;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区四区五区入口| 欧美高清精品3d| 欧美日韩色综合| 国产日韩av一区| 蜜桃视频免费观看一区| 91免费观看视频| 久久精品一级爱片| 美洲天堂一区二卡三卡四卡视频| 91亚洲国产成人精品一区二区三| 欧美精品一区二区三区久久久| 亚洲国产综合色| av不卡在线播放| 中文字幕乱码日本亚洲一区二区| 久久精品国产77777蜜臀| 欧美又粗又大又爽| 亚洲欧美日韩久久| 99视频精品在线| 中文字幕国产一区| 国产黑丝在线一区二区三区| 欧美xxxxxxxxx| 琪琪一区二区三区| 欧美日韩精品专区| 亚洲国产成人va在线观看天堂| 91麻豆精品一区二区三区| 日本一区二区三级电影在线观看 | 中文字幕中文字幕一区| 精品中文av资源站在线观看| 欧美人xxxx| 丝袜美腿亚洲一区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 成人午夜短视频| 国产女主播在线一区二区| 国产成人在线免费| 国产欧美精品一区二区色综合朱莉| 韩国三级电影一区二区| 26uuuu精品一区二区| 国内精品视频一区二区三区八戒| 欧美va在线播放| 精品一区二区免费在线观看| 久久综合国产精品| 国产成人精品三级麻豆| 国产精品久久久久婷婷| 91黄视频在线| 爽好久久久欧美精品| 91精品国产一区二区三区| 日本一区中文字幕 | 欧美精品一区二区三区蜜桃| 韩国精品免费视频| 日本一区二区免费在线| 91色在线porny| 亚洲国产精品天堂| 日韩一二三四区| 国产成人精品免费在线| 亚洲精品一二三| 欧美精品777| 国产精品18久久久久久vr| 亚洲国产精品精华液2区45| 99精品国产99久久久久久白柏 | 91麻豆精品在线观看| 天天综合天天做天天综合| 精品国产乱码久久久久久老虎 | 国产精品综合在线视频| 综合网在线视频| 欧美一区在线视频| 成人动漫av在线| 性做久久久久久免费观看| 久久综合999| 一本大道久久a久久综合婷婷| 免费看日韩精品| 国产精品第四页| 欧美一级片在线观看| 成人国产一区二区三区精品| 爽好多水快深点欧美视频| 国产欧美一区二区精品性| 欧美色电影在线| 国产成人精品亚洲777人妖| 一区二区免费在线| 国产日本一区二区| 欧美久久久久中文字幕| 丁香婷婷深情五月亚洲| 青青草国产成人99久久| 亚洲精品写真福利| 国产欧美日韩视频在线观看| 7777精品伊人久久久大香线蕉 | 国产综合色在线视频区| 亚洲男女一区二区三区| 国产亚洲成年网址在线观看| 91麻豆精品国产91| 色哟哟精品一区| 成人自拍视频在线| 蜜桃av噜噜一区二区三区小说| 亚洲丝袜另类动漫二区| 日本一区免费视频| 久久综合狠狠综合久久综合88| 欧美色精品在线视频| 91丨porny丨最新| 国产成都精品91一区二区三| 欧美a级一区二区| 亚洲国产成人91porn| 亚洲免费观看高清在线观看| 国产精品久久久久久久久免费桃花| 日韩欧美123| 欧美一区二区啪啪| 欧美丰满一区二区免费视频 | 亚洲精品日韩综合观看成人91| 久久久久久夜精品精品免费| 精品少妇一区二区三区| 日韩午夜在线播放| 日韩美女主播在线视频一区二区三区 | 18欧美亚洲精品| 国产精品理论在线观看| 国产精品久久久久婷婷| 国产精品女人毛片| 国产精品久久久久婷婷| 国产精品夫妻自拍| 亚洲黄色片在线观看| 亚洲精品va在线观看| 亚洲综合色噜噜狠狠| 亚洲一区二区三区自拍| 一区二区三区高清| 亚洲成人高清在线| 三级精品在线观看| 日韩国产高清影视| 精品写真视频在线观看| 国产乱码字幕精品高清av| 国产成人aaa| av成人老司机| 欧美日韩在线不卡| 91麻豆精品91久久久久同性| 日韩欧美亚洲国产另类| 精品国精品国产尤物美女| 国产亚洲欧美一区在线观看| 中文字幕av一区二区三区| 自拍偷拍亚洲欧美日韩| 亚洲国产精品一区二区久久恐怖片 | 久久新电视剧免费观看| 国产日韩av一区| 玉足女爽爽91| 老司机午夜精品| 成人黄色软件下载| 欧美日韩国产综合视频在线观看| 日韩一区二区中文字幕| 中文字幕免费不卡| 亚洲成人精品影院| 国产一区二区三区黄视频| 91网页版在线| 欧美一级艳片视频免费观看| 中文字幕欧美三区| 丝袜美腿亚洲色图| 国产精品一二三四| 欧美亚洲图片小说| 精品国产伦一区二区三区观看体验| 中文字幕乱码久久午夜不卡 | 欧美在线不卡视频| 日韩美女一区二区三区四区| 中文字幕中文字幕一区| 日韩精品一二三四| a级精品国产片在线观看| 欧美日韩电影一区| 国产精品国产三级国产专播品爱网| 亚洲国产aⅴ成人精品无吗| 韩国三级电影一区二区| 欧美日韩一区视频| 国产精品第13页| 国产伦精品一区二区三区免费| 色综合久久中文字幕| 久久久精品免费免费| 午夜精品福利一区二区三区av | 免费成人在线观看视频| av激情亚洲男人天堂| 亚洲精品在线观| 丝袜美腿亚洲综合| 色狠狠综合天天综合综合| 久久久综合激的五月天| 美女一区二区在线观看| 欧美性猛片xxxx免费看久爱| 国产精品理论片在线观看| 久久99国产精品久久99 | 亚洲成人手机在线| 99精品视频在线观看| 久久综合国产精品| 久久精品国产网站| 欧美一区二区在线看| 亚洲国产精品一区二区久久| 91丨porny丨中文| 国产精品久久影院| 高清不卡一二三区| 久久日韩精品一区二区五区| 免费高清在线视频一区·| 欧美日本在线看| 久久精品一区二区三区不卡| 久久99久久99小草精品免视看| 欧美一级在线免费| 免费高清成人在线| 欧美电影免费观看高清完整版在 | 午夜私人影院久久久久| 在线免费一区三区| 亚洲影视在线播放| 欧美日本在线视频| 日本在线不卡视频|