问题标签 [gcc-plugins]

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 回答
137 浏览

gcc - 如何编译 gcc-plugin 以生成共享对象文件?

我已经在我的 Ubuntu 16.10-32 位中安装了 gcc-plugin 并且安装已经正确完成:

但是,当我尝试编译插件时,会收到大量错误、警告和异常... 在此处输入图像描述

我不明白这背后的原因是什么。是编译命令行的错误吗?或者 gcc-plugin 的安装不是正确的方法?

我已经编译了 gcc-plugin 文件如下:

有什么帮助吗?

0 投票
1 回答
238 浏览

c++ - 调试 gcc 插件

我目前正在为 gcc (9.2) 编写一个插件,并且正在寻找一种调试所述插件的方法。为此,我使用这些说明构建了 gcc ,以启用 gcc 的调试符号。然后我尝试通过使用以下命令在 gdb 中调用 gcc 来调试插件:

./xg++ -wrapper gdb,--args -fplugin=plugin_name.so

这导致我能够单步执行 gcc 本身,看到它的符号。但是,我无法访问插件符号。该插件使用 -g 标志编译。

我还需要做什么才能逐步完成插件的代码?

0 投票
1 回答
663 浏览

gcc - 使用带有交叉编译器的 gcc 插件,未定义的符号

我正在尝试查看是否可以在 ARM 交叉编译器(arm-none-eabi-gcc)中使用 gcc 插件。但是,我遇到了编译器错误,并且质疑我正在尝试做的事情是否可行。

我要设置的插件是:https ://github.com/vanhauser-thc/AFLplusplus/tree/master/gcc_plugin

我正在使用该-m32标志在 x86-64 linux 上编译插件,因为交叉编译器是一个 32 位应用程序。但是,当我尝试在交叉编译器中使用插件时-fplugin,我得到一个未定义的符号编译器错误:

cc1plus: error: cannot load plugin ../afl-gcc-pass.so ../afl-gcc-pass.so: undefined symbol: _Z13build_int_cstP9tree_nodel

我查看了插件的符号 usingnm并发现大多数符号是未定义的,包括exitrandom. 我对其中的大部分内容都很陌生,不确定这到底意味着什么。一些在线搜索表明它可能与不正确的库路径有关,但设置LIBRARY_PATHLD_LIBRARY_PATH重建似乎没有帮助。

我尝试过的 gcc 版本设置:

1:x86:5.4.0,arm:ubuntu 16.04 上的 5.4.1

2:x86:5.2.0,arm:CentOS 6.8 上的 5.2.1

是否可以在与编译时不同的 gcc 中使用 gcc 插件,还是我在浪费时间?

0 投票
0 回答
185 浏览

c - 已解决:使用 linux 内核源代码树中的 gcc 插件构建程序时出错

我正在尝试使用我在他们的非官方 linux 内核源代码树(那个respectre_plugin/)上找到的 grsecurity gcc 插件。我的 GCC 版本是 4.7,我进行了修改scripts/gcc-plugins/Makefile以使其编译插件,并使用根 Makefile 构建它,make gcc-plugins没有显示错误。然后,当我尝试编译具有类似 Spectre 缺陷的 C 文件时,出现以下构建错误:

file.c:36:31: error: array_index_mask_nospec is not defined

这个函数在 中定义respectre_plugin/respectre_plugin.c,我不知道为什么会出现这个奇怪的构建错误,如果有人知道的话......我的构建调用如下:

gcc -Wall -Wextra -std=c99 -fplugin=/path/to/respectre_plugin.so -c file.c -o file.o

谢谢你的帮助 !

0 投票
0 回答
238 浏览

c - 如何使用检测代码将汇编代码添加到所有功能的序言和结尾?

每个人。
我正在开发一个 C 项目,我需要一种在源代码中每个函数的序言和结尾添加汇编代码的方法。

让我给你举个例子。

这是源代码:

相对的汇编代码是这样的:

现在我想做的是找到一种方法,在我编译时自动将我的汇编代码添加到序言和尾声中。然后得到这样的情况:

我对此做了很多研究。而且我找不到任何可以解释如何做到这一点的东西。
我知道 gcc 编译器提供了-finstrument-functions检测函数的选项,但这不是我需要的。那是因为该选项涉及添加以下两个功能:

在相关程序集中,结果是对这些函数的调用,这不是我想要的。

我已经通过 gcc 插件阅读过,也许你可以得到这个结果,但是文档真的很差。
我还阅读了一些关于DynamoRio的内容,但我认为我需要的是静态而不是动态的仪表系统。

有人可以指出我正确的方向吗?谢谢大家!

0 投票
0 回答
105 浏览

c++ - GCC 插件:是否可以将一个函数的基本块序列移动到另一个函数的基本块?

我正在尝试为 gcc 创建一个插件,该插件允许您检测函数的序言和结尾。
检测代码插入到两个函数“instrument_entry”和“instrument_exit”中。这两个函数写在一个名为 instrumentation.h 的文件中,该文件包含在我要检测的软件的源代码中。-finstrument-function简而言之,它与gcc 的非常相似

与 gcc 提供的选项不同,通过插件,我想获取函数“instrument_entry”中存在的代码(我检查过,这个函数只包含一个基本块)并将其插入到函数中存在的所有其他序言中软件。

我想将函数“instrument_entry”的基本块中存在的序列插入到要检测的函数的第一个基本块中。

这是代码:

bb_entry_instr是“instrument_entry”函数的基本块

我为 gcc 创建的 pass 在 "cfg" pass 之后调用:

当我尝试使用该插件编译测试程序时,出现此错误:

有人可以帮助我吗?

0 投票
1 回答
268 浏览

gcc - GCC插件编译问题

我正在尝试交叉编译一个自定义内核模块(来自这个 git),它依赖于一个最初在 git 中编译的插件(它在 $git/buildtools/gcc-nexmon-plugin/nexmon.c 中)。

本来这个树是打算直接建在树莓派上的,但是我想把这个特性移植到一个buildroot系统上,也就是说,我的树莓派上没有gcc/g++,我只在树莓派上交叉编译我的笔记本电脑。

我的问题是如何正确创建 nexmon.so (插件文件),以便我以后可以在交叉编译时使用它

生成 nexmon.so 的原始命令行是:

如您所见,它们在树中包含了一些交叉编译器(“../gcc-arm..”)。

现在我明白插件不应该被交叉编译。请记住,他们希望我们在树莓派上运行它,所以“g++”是嵌入的“g++”。在我这边,我必须运行我的笔记本电脑的“g++”。

不幸的是,我似乎无法让它在我的笔记本电脑上工作,这就是我现在正在尝试的:

因为我目前使用的是g++ 8.3.0-6,并且我找到了相应的插件开发头文件。如果我运行它,我会遇到很多问题,

  • “在包含的插件/include/tree.h 文件中:#error Unknown BITS_PER_UNIT”
  • “在包含的插件/include/cpplib.h 文件中:#error 找不到至少 32 位有符号整数类型”

这让我觉得我缺少一些标志来正确定义我的笔记本电脑架构- 但我可能是错的。

这是我的错误的完整 PasteBin:输出日志

我想我确实有构建插件的东西,因为 gcc8/plugin/include 存在。我尝试安装“gcc-multilib,gcc-8-plugin-dev-i686-linux-gnu,gcc-8-plugin-dev-x86-64-linux-gnux32,gcc-8-plugin-dev”。我无法回到以前的 gcc(如 4.8、5、6、7),因为我所有的 debian 升级都删除了它们,它们不再使用

任何帮助将不胜感激,到目前为止,没有人能够帮助我,而且我的想法已经用完了。这一点完全阻碍了我的项目。