欢迎光临散文网 会员登陆 & 注册

C语言代码重构器设计

2023-02-26 20:47 作者:GC_CH  | 我要投稿


前言

    代码重构的目的是让代码更容易被人看懂. 反编译过程中需要大量的代码重构. 随着可执行程序的体积增大, 反编译的工作量成指数趋势增长. 通常, 可手动反编译的程序体积在 1 MB 以下.

    所以, 我打算实现一个代码重构器. 技术上应该是没问题的, 但是能不能实现还取决于时间, 经济(没找到工作)等其他因素. 如果实现不了, 也可以在此提供一个思路.

    主要需要编译原理的知识.

目标

    输入一个符合C99标准的C语言函数的代码文本, 输出一个与该函数等价并且更易懂的函数文本.

    等价是指 : 对于任何参数, 输出的运行函数的结果都与输入函数的运行结果相等, 包括副作用(也就是打印字符串这些不影响结果的操作).

    更易懂是指 : (1) 代码量尽可能减少(特殊情况也可以增大代码量提高可读性) ; (2) 执行流程更加简单, 尽可能去除goto语句; (3) 块的深度尽可能地低, 也就是 {} 的嵌套程度尽可能低.

模块

1. 词法分析模块

    将输入的函数文本转为成单词序列, 所谓单词, 就是英语中的单词的意思. 比如, 以字母或下划线开头的任意多个的字母, 数字或下划线可以构成一个标识符, 标识符就是一类单词. 单词通常分为标识符, 关键字, 分隔符, 运算符四大类.

2. 语法分析模块

    将词法分析模块输出的单词序列组合成语句序列. 只有知道是什么语句, 才能分析代码的语义(要做什么).

    比如 c = a + b; 这个语句的语法是 标识符 = 标识符 + 标识符, 语义是将 = 右边的两个标识符的值相加, 结果赋值给 = 左边的标识符.

3. 数据库模块

    用于保存管理分析出来的数据.

    比如要保存某个变量的名字, 定义位置, 使用位置等信息. 

4. 代码优化模块

    分析数据库中的数据, 执行代码优化.

    也就是判断是否符合某个模式, 如果符合, 就执行相应的优化策略来改写函数代码.

    比如 : 分析出来某个变量没有使用到, 那么就执行去掉这个变量的策略.


C语言代码重构器设计的评论 (共 条)

分享到微博请遵守国家法律