我正在 Linux 内核中做一个项目,我想知道这个 checkstack.pl 是做什么的?我从来没有学过perl所以无法理解这个程序。如果我能从概念上理解该程序(如果不是逐行),那就太好了。
任何努力表示赞赏。
Source:
链接文本
假设我想编写自己的代码,稍微调整一下,我可以用 C 程序编写它吗?我的主要问题是:为什么这段代码是用perl 编写的或者应该用perl 编写?
它创建内核中每个函数使用的堆栈帧大小的列表(即每个函数用于局部变量等的局部暂存空间总量)。
它执行此操作的方式是通过对内核进行反汇编并查找两件事:函数名称和调整堆栈的指令。它通过查找匹配的行来查找函数名称$funcre
(qr/^$x* <(.*)>:$/
),它会寻找匹配的堆栈调整指令$re
or $dre
;后两者高度依赖于内核编译的架构,这就是第一个大块 if if/else 语句正在检查的内容。$re
搜索将堆栈调整固定量的函数(绝大多数函数),以及$dre
搜索以可变量调整堆栈的函数(罕见)。
objdump
是其一部分binutils; objdump -d
是反汇编目标文件的命令。该脚本的用途是反汇编内核(objdump -d vmlinux
)并将输出通过管道传输到脚本中。脚本的输出是内核中所有函数的列表,按最大堆栈帧大小排序。我认为该脚本的目的是让内核维护人员能够通过痛苦地确保所有内容的堆栈帧尽可能小来避免堆栈溢出,并且该脚本允许他们验证这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)