问题标签 [pycparser]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
711 浏览

python - 使用 Pycparser 解析变量依赖

我目前正在开展一个项目,以在给定的 I/O 函数中查找变量依赖项,并选择使用 Pycparser。我现在的代码主要是一个访问者类和几个节点类。它的作用是遍历 AST 并为每个变量赋值、声明、输入、输出和 If 语句创建节点。这些节点具有存储其依赖项的列表属性,例如:

将创建一个名为“a”的节点,并将其连接到“b”和“c”的最新节点。

我的问题来自这里:关于如何连接输出变量有一个大致的想法吗?

除了可能是“b”的最新实例之外,此代码没有向我们提供有关它具有哪些依赖项的任何信息。但是,我能想出的所有解决方案也会添加“b”的先前节点。例子:

我不希望这两个“b”节点都用于我的输出依赖项。但是,如果从 If 语句中获取多个路径,我会想要多个节点,但每个路径中只有最近的一个。如果您发现问题含糊不清,是否有任何关于查找变量依赖关系的方法或来源可以推荐?简而言之,这个项目应该实现的是输出 x(可能有多个输出)我希望能够找出它依赖于哪些输入。这又可能是多种情况,具体取决于其他变量。不同依赖的例子:

0 投票
1 回答
317 浏览

python - 查找函数输出的输入依赖关系

我一直在使用 pycparser 开发一个 python 程序,该程序应该生成一个 JSON 文件,其中包含给定函数及其输出的依赖关系。对于示例函数:

在这里,我希望b依赖于testInput。但是,当然,结构和 if 语句等可能会变得更加复杂。我正在测试的文件还具有特定形式的函数,这些函数被视为输入和输出,如下所示:

这里c将依赖于VariableInDatabaseb和以前一样。我在 pycparser 中进行了这种分析,因为大多数结构和指针对我来说真的很难处理,而且似乎有更好的方法。我已经阅读了 AST 和 CFG,以及其他分析工具,如 Frama-C,但如果这是一件事,我似乎无法找到明确的答案。

有没有一种已知的方法来进行这种分析,如果有,我应该研究什么?它应该包含数千个文件,并且能够将这些依赖项输出到 JSON 中,因此编辑器插件似乎不是我想要的。

0 投票
1 回答
691 浏览

python - 复杂结构上的 pycparser.plyparser.ParseError

我试图用来pycparser解析这个 C 代码:

https://github.com/nbeaver/mx-trunk/blob/0b80678773582babcd56fe959d5cfbb776cc0004/libMx/d_adsc_two_theta.c

带有最小示例和 Makefile 的 repo 在这里:

https://github.com/nbeaver/pycparser-problem

在 Debian Jessie 上使用pycparserv2.14(来自 pip)和 gcc 4.9.2。

我尝试过的事情:

  • -nostdinc将标志传递到gcc并包含该fake_libc_include文件夹。
  • 用于-D'__attribute__(x)='取出 GCC 扩展
  • 使用假标题,例如<sys/param.h>
  • -std=c99如果代码与 C99 不兼容,请使用。
  • 重现redis 示例,以防我的机器出现异常情况。

这是回溯的样子:

回溯指向这一行:

https://github.com/nbeaver/mx-trunk/blob/0b80678773582babcd56fe959d5cfbb776cc0004/libMx/d_adsc_two_theta.c#L63

这又指向这个#define宏:

https://github.com/nbeaver/mx-trunk/blob/0b80678773582babcd56fe959d5cfbb776cc0004/libMx/mx_motor.h#L484

0 投票
2 回答
206 浏览

python - 使用 GnuCParser 查找指针参数?

我正在尝试解析这段 C 代码:

使用GnuCParser, 部分pycparserext

基于这个答案,我希望看到一些PtrDecls,但这是我从ast.show()生成的解析树中得到的:

请注意baz,“指向的常量指针int”如何const在由ast.show(). 这种差异是因为GnuCParser?

如何baz从 AST 中找出类型?我的实际 C 代码需要 GNU 解析器。我正在使用 pycparserext 版本 2016.1。

更新:我在 GitHub 上创建了一个 pycparserext 问题

0 投票
1 回答
162 浏览

python - 任意 C 项目的预处理

我想在 python 中编写一个好的调用图程序,因此我使用 pycparser。Pycparser 需要预处理 c 文件才能正确创建抽象语法树。我的第一种方法是仅在-E文件上使用 gcc 选项,然后将其传递给 pycparser。但是对于不同的项目,我会得到“ No such file or directory”错误,因为 gcc 没有找到特定的标头。如果我尝试用它来预处理 linux 内核,gcc -E `find | grep "\.c"\`它会丢失一些头文件,比如那些带有 Linux/ 前缀的头文件,因为没有这样的文件夹。在我看来,我需要一些额外的标志来让 gcc 传递头文件的位置并正确预处理。是否有一种预处理任意 C 项目的通用方法?

另外,我想如果我让它正确预处理,那么不同文件中有相同函数的多个副本。有没有办法确定函数的原始文件?

0 投票
0 回答
724 浏览

python - pip安装pyopenssl时权限被拒绝错误

当我试图强制重新安装pyopenssl时,我在尝试安装时遇到了以下错误pycparser。我使用以下命令在带有 Python 2.7 的 Windows 7 64 位上执行此操作:

这是回溯:

这是我注意到的:

  • 它只发生在_cffi_backend.pyd- 其他软件包安装和卸载正常。
  • 我可以pip uninstall cffi重新安装它,但只要它存在,就会出现_cffi_backend.pyd权限错误。这意味着任何调用cffi(例如pyopenssl)的安装都将失败。

这是我尝试过的:

  1. 卸载重装cffi:没有效果
  2. 成功使用icalcs设置_cffi_backend.pyd为完全访问,大家:没有效果
  3. 调用:没有pip效果python -m pip install pyopenssl --ignore-installed
  4. 安装前关闭所有应用程序并检查正在运行的进程:没有效果
  5. 重启。大多数情况下都是巫毒教,但只是为了彻底:没有效果
0 投票
3 回答
5988 浏览

python - python pycparser设置错误

通过 pip 在 CentOS 7 上设置 pyparser 时,我看到以下错误

p>

0 投票
1 回答
1459 浏览

python - 如何使用 pycparser 在函数声明中查找函数名?

我找到了以下示例来搜索特定的函数名称,例如malloc,但我想在 C 源文件的函数声明中查找所有函数名称。所以在ReturnCode HashCreate(Hash** hash, unsigned int table_size)我正在寻找 HashCreate 和行号的情况下。由于我不喜欢 Python,而且它看起来很复杂,我问我该怎么做?

0 投票
1 回答
177 浏览

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

pycparser/utils/fake_libc_include我为找到的每个头文件创建了假头文件kernel/sched/core.c并放入

进入他们。其他一些缺少的头文件,例如 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

但它给了我错误:

我究竟做错了什么?我已经尝试了博客条目中的 redis 示例,并且成功了。

0 投票
1 回答
222 浏览

python - 如何存储 AST 儿童信息(python)

我对 python 和 pycparser 比较陌生。我已经使用来自https://github.com/eliben/pycparser的 c-to-c.py 文件将 c 文件解析为 AST 。我现在正在尝试使用 AST 制作 CFG,但我无法将 .show() 中的信息作为字符串存储。我该如何存储这个 .show() 信息,我尝试使用test=ast.children()[0][1].show()但是当我尝试打印test它时显示“无”。那么还有其他存储方式吗?或者是否有另一种方法可以用来读取 .show() 信息。谢谢你。