机密检查不起作用,是否有替代品?

问题描述 投票:0回答:2

我试图让工作人员检查工作,但没有成功。我收到以下错误:

/ tmp / cczxKZzn.s:汇编程序消息:

/ tmp / cczxKZzn.s:48:错误:'push'的指令后缀无效

/ tmp / cc9xD8T3.s:125:错误:'pop'的指令后缀无效

当我的makefile看起来像这样时(使用简单的makefile,一切都可以正确编译):

all: error check

error: error.c
    /usr/local/gcc-4.0.2/bin/gcc -fbounds-checking -g -Wall -pedantic $< -o $@

.PHONY: clean check

clean:
    -rm error

check:  error
    ./error

由于该代码与汇编程序无关,所以我不知道该怎么办。我可以在Google搜索中看到关于汇编程序问题的唯一问题。


您能否提出其他解决方案,例如检查是否在阵列之外?如(这是我的错误。c):

#include <stdio.h>
#include <stdlib.h>
int main()
{
  int a[1][10];
  a[0][11]=42;
  return 0;
}

编辑。可以是版本不兼容吗?安装了gcc 4.4+,我正在通过一些经过修改的gcc 4.0.2的路径来执行此操作?

c makefile bounds-checker
2个回答
1
投票

由于该代码与汇编器无关,所以我不知道该怎么做。做。我只能在Google搜索中看到汇编程序问题关于该主题。

看起来您正在调用错误的汇编器-32位汇编器,试图编译64位目标代码。检查您的PATH和标志。

UPDATE:我从未研究过gcc究竟如何调用其组件。我还是不太清楚。无论如何,看起来它并不像我所相信的那样依赖PATH,而是依赖于它的./configure设置(--prefix,-build等)。

矿井,--prefix=/usr,-build = x86_64-suse-linux,-program-suffix = -4.6, looks for its components in (with respect to the directory where thegcc`二进制文件位于:-../lib64/gcc/x86_64-suse-linux/4.6-../lib64/gcc/-../lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/x86_64-suse-linux/4.6/-../ lib64 / gcc / x86_64-suse-linux / 4.6 /../../../../ x86_64-suse-linux / bin /

((用strace选中)。

是来自其中一个目录中另一个gcc的二进制文件,它将被调用而不是'正确'的二进制文件。

尝试用gcc -v(或用strace检查)以查看正在运行哪个as。>>


0
投票

[如果有人仍然需要使用此古老的gcc版本进行边界检查:最好的办法是告诉它使用-Wa,--32将相关参数传递给汇编器,因此您将需要以下代码:

© www.soinside.com 2019 - 2024. All rights reserved.