Perl:linux源代码中的checkstack.pl做了什么?

pra*_*p19 9 linux perl stack linux-kernel

我正在linux内核中做一个项目,我想知道这个checkstack.pl做了什么?我从未学习过perl,因此无法理解该程序.如果我能从概念上理解程序,如果不是逐行理解,那将是很棒的.任何努力赞赏.

来源: 链接文字

假设我想编写自己的调整代码,可以在C程序中编写.我的主要问题是:为什么编写这段代码或者应该用perl编写?

Ada*_*eld 11

它创建了内核中每个函数使用的堆栈框架大小的列表(即每个函数用于局部变量和诸如此类的局部临时空间的总量).

它的方式是通过内核的反汇编并寻找两件事:函数名称和调整堆栈的指令.它通过查找匹配$funcre(qr/^$x* <(.*)>:$/)的行来查找函数名称,并查找匹配的堆栈调整指令$re$dre; 后两者高度依赖于内核编译的体系结构,这是if/else语句检查时的第一个大块. $re搜索以固定量(绝大多数函数)$dre调整堆栈的函数,并搜索以可变量(稀少)调整堆栈的函数.

objdumpbinutils的一部分; objdump -d是反汇编目标文件的命令.此脚本的用法是反汇编内核(objdump -d vmlinux)并将输出通过管道传输到脚本中.脚本的输出是内核中所有函数的列表,按最大堆栈帧大小排序.我假设脚本的目的是让内核维护者能够通过痛苦地确保所有内容的堆栈帧尽可能小来避免堆栈溢出,并且此脚本允许他们验证这一点.