Linux kernel scriptes bin2c "\x"

简介: /**************************************************************************** * Linux kernel scriptes bin2c "\x" * 声明: * 早上在阅读Linux kernel scriptes中的源代码的时候发现bin2c的源代码, * 于是打算看一下,结果发现"\x"的写法,于是查了点资料,看了一下它的用法。
/****************************************************************************
 *                    Linux kernel scriptes bin2c "\x"           
 * 声明:
 *     早上在阅读Linux kernel scriptes中的源代码的时候发现bin2c的源代码,
 * 于是打算看一下,结果发现"\x"的写法,于是查了点资料,看了一下它的用法。
 *
 *                                    2015-12-29 深圳 南山平山村 曾剑锋
 ***************************************************************************/


一、参考资料:
    1. \x49\x51\x5a\x56\x54\ 这种是什么编码?
        http://zhidao.baidu.com/link?url=tDpw0M4dsxvnldOAzJg0HiS25vYl3ebTBwJOF0ULHxBGEF-0nYLiewaX29d870N5cro-yv2blYWgG2Kx4xFPXK
    2. \X在C语言里表示什么意思?
        http://zhidao.baidu.com/link?url=HC1lXt3Cv2yE1gQaLchbyhlaAwU9X9hVEQNz_dRqqvP4lTO1dTypMFnKT7rI8mmH9lUsSAjNPgo_fyzJYngcLa

二、Linux内核scripts/bin2c.c
    /*
     * Unloved program to convert a binary on stdin to a C include on stdout
     *
     * Jan 1999 Matt Mackall <mpm@selenic.com>
     *
     * This software may be used and distributed according to the terms
     * of the GNU General Public License, incorporated herein by reference.
     */
    
    #include <stdio.h>
    
    /**
     * 1. 程序将第二个参数作为数组的名字;
     * 2. 程序通过读取标输入数据,并将数据转换成十六进制输出到标准输出;
     * 3. 由于是通过标准入获取数据,那么常用的方式应该是采用管道进行数据传输;
     * 4. 目前没搞懂下面这条语句为什么要转成"\x":
     *     printf("\\x%02x",ch);
     */
    int main(int argc, char *argv[])
    {
        int ch, total=0;
    
        if (argc > 1)
            printf("const char %s[] %s=\n",
                argv[1], argc > 2 ? argv[2] : "");
    
        do {
            printf("\t\"");
            while ((ch = getchar()) != EOF)
            {
                total++;
                printf("\\x%02x",ch);
                if (total % 16 == 0)
                    break;
            }
            printf("\"\n");
        } while (ch != EOF);
    
        if (argc > 1)
            printf("\t;\n\nconst int %s_size = %d;\n", argv[1], total);
    
        return 0;
    }

三、"\x"数据测试代码:
    #include <stdio.h>
    
    int main (int argc, char **argv) {
        printf("%c, %s.\n", '\x30', "\x31\x32");
    }

 

目录
相关文章
|
3月前
|
Linux 调度 Android开发
【系统启动】Kernel怎么跳转到Android:linux与安卓的交界
【系统启动】Kernel怎么跳转到Android:linux与安卓的交界
49 0
|
3月前
|
Linux C语言
Linux内核学习(七):linux kernel内核启动(一):概述篇
Linux内核学习(七):linux kernel内核启动(一):概述篇
64 0
|
3月前
|
Linux 芯片
Linux内核学习(六):linux kernel的Kconfig分析
Linux内核学习(六):linux kernel的Kconfig分析
73 0
|
7月前
|
安全 Ubuntu Linux
Linux Kernel openvswitch模块权限提升漏洞(CVE-2022-2639)
Linux 内核模块Open vSwitch 存在越界写入漏洞,在足够多actions情况下,在为新的flow的新的action拷贝和预留内存时,如果next_offset比MAX_ACTIONS_BUFSIZE大,reserve_sfa_size并不会如期返回 -EMSGSIZE,此时会产生越界写入漏洞。攻击者可以利用该漏洞将普通权限提升至ROOT权限。
69 1
|
7月前
|
安全 Ubuntu Linux
Linux Kernel 权限提升漏洞 (CVE-2023-32233)
Linux Netfilter 是一个在 Linux 内核中的网络数据包处理框架,也称作 iptables,它可以通过各种规则和过滤器,基于数据包的来源、目标地址、协议类型、端口号等信息,控制网络流量和数据包的转发和处理,是 Linux 系统网络安全性和可靠性的重要组成部分
166 1
Linux Kernel 权限提升漏洞 (CVE-2023-32233)
|
7月前
|
Ubuntu Linux 开发工具
嵌入式Linux系列第4篇:Kernel编译下载
嵌入式Linux系列第4篇:Kernel编译下载
|
3天前
|
存储 Linux Android开发
RK3568 Android/Linux 系统动态更换 U-Boot/Kernel Logo
RK3568 Android/Linux 系统动态更换 U-Boot/Kernel Logo
18 0
|
3月前
|
算法 Linux API
一文聊聊Linux Kernel的加密子系统【Crypto Subsystem】
一文聊聊Linux Kernel的加密子系统【Crypto Subsystem】
98 1
|
3月前
|
Linux 调度 Android开发
Kernel怎么跳转到Android:linux与安卓的交界
Kernel怎么跳转到Android:linux与安卓的交界
36 0
|
3月前
|
存储 安全 Linux
UBoot怎么跳转到Kernel:uboot与linux的交界
UBoot怎么跳转到Kernel:uboot与linux的交界
51 0