首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pycparser获取Linux内核文件的函数名?

如何使用pycparser获取Linux内核文件的函数名?
EN

Stack Overflow用户
提问于 2017-03-27 21:21:54
回答 1查看 171关注 0票数 0

我为在kernel/sched/core.c中找到的每个头文件在pycparser/utils/fake_libc_include下创建了假的头文件,并将

代码语言:javascript
复制
#include "_fake_defines.h"
#include "_fake_typedefs.h"

进入他们。还有一些其他的头文件丢失了,例如,大量的头文件来自kernel/sched/sched.h。所以我也添加了它们。

对整个过程进行预处理

gcc -nostdinc -E -Ipycparser/utils/fake_libc_include ../kernel/sched/core.c > core_pp.c

这没有给出错误。

所以我试着获取函数名

python3 examples/func_defs.py core_pp.c

但它给了我一个错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "examples/func_defs.py", line 46, in <module>
    show_func_defs(filename)
  File "examples/func_defs.py", line 34, in show_func_defs
    cpp_args=r'-Iutils/fake_libc_include')
  File "/usr/local/lib/python3.4/dist-packages/pycparser/__init__.py", line 93, in parse_file
    return parser.parse(text, filename)
  File "/usr/local/lib/python3.4/dist-packages/pycparser/c_parser.py", line 151, in parse
    debug=debuglevel)
  File "/usr/local/lib/python3.4/dist-packages/pycparser/ply/yacc.py", line 331, in parse
    return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
  File "/usr/local/lib/python3.4/dist-packages/pycparser/ply/yacc.py", line 1181, in parseopt_notrack
    tok = call_errorfunc(self.errorfunc, errtoken, self)
  File "/usr/local/lib/python3.4/dist-packages/pycparser/ply/yacc.py", line 193, in call_errorfunc
    r = errorfunc(token)
  File "/usr/local/lib/python3.4/dist-packages/pycparser/c_parser.py", line 1721, in p_error
    column=self.clex.find_tok_column(p)))
  File "/usr/local/lib/python3.4/dist-packages/pycparser/plyparser.py", line 55, in _parse_error
    raise ParseError("%s: %s" % (coord, msg))
pycparser.plyparser.ParseError: ../kernel/sched/cpupri.h:14:2: before: atomic_t

我做错了什么?我尝试过this博客文章中的redis示例,它起作用了。

EN

回答 1

Stack Overflow用户

发布于 2017-03-28 20:09:22

添加头只是解决方案的一部分-这有助于预处理器解析#include语句。

解决方案的另一部分是将解析器期望在那里找到的类型添加到_fake_typedefs。这样,pycparser将知道所标识的是一个类型,并将能够正确地解析代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43047666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档