基础:GCC编译时注入宏
类型1 gcc控制宏的开关
源码main.c
1 |
|
说明
有宏MC控制代码的编译分支,MC宏可以由gcc编译的时候定义。使用 “-D宏名”,开启宏。
编译1-未开启宏
gcc main.c -o main.out
编译2-开启宏MC
gcc main.c -DMC -o main.out
编译3-开启宏MC和DMC
gcc main.c -DMC -DDMC -o main.out
类型2 gcc 注入宏值
源码main.c
1 |
|
编译1-设置宏MC_NUM值
gcc main.c -DMC_NUM=123 -o macro_demo.out
注意:”=”两边不能有空格。
输出:
1 | 145 = 22 + 123 |
编译2-设置宏MC_STR值
gcc main.c -DMC_NUM=123 -DMC_STR=\"Hello\ World\\nWelcome\ c\" -o macro_demo.out
注意:字符需要使用转义字符,双引号和空格都要。
输出
1 | ===DMC 宏开启 |
编译3-注入16进制数据
gcc main.c -DMC_BYTE=0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0xa,0xb,0xc,0xd,0xe,0xf,0xff
输出
1 | =========字节宏========== |
应用:CMakeLists和makefile宏注入
CMakeLists.txt
1 | add_compile_options(-DMC -DMC_NUM=123 -DMC_STR=\"Hello\ World\\nWelcomffe\ c\" -DMC_BYTE=0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0xa,0xb,0xc,0xd,0xe,0xf,0xff) |
makefile
1 | CFLAGS += -DMC |
字节类有如下方式
1 | # 秘钥注入方式1 -成功 |