gcc相关内容
有没有人告诉我如何阻止程序中的一些特定的系统调用,好吗?我建立一个系统,它采用了一块C源$ C $ C的,用gcc编译并运行它。为了安全起见,我需要prevent从调用一些系统调用编译后的程序。有没有办法做到这一点,从源头code级(例如剥离GCC的头文件,检测恶意外部调用,...)的可执行程度? 的编辑#1:的加入有关恶意呼叫的详细信息。 的编辑#2:的我的系统是GNU / Linux的
..
这将在下面定义为在get_cpu_var marcro 29的#define get_cpu_var(VAR)(*({\\ 30的extern INT simple_identifier _ ## VAR(无效); \\ 31 preempt_disable(); \\ 32安培; __ get_cpu_var(VAR); })) 似乎INCOM prehensible到be.I我假
..
我想要做的是找到所有类型显式转换双重或浮动到任何其他类型的一些源文件,我有。是否有一个内置的海湾合作委员会的方式来做到这一点? 语言是C. 谢谢! 解决方案 由于强制转换有明确的法律,并执行怪异的转换以正确的方式,这是极不可能的,GCC将包含一个选项,以警告他们。 相反,这取决于你的来源是如何巨大,你也许能蒙混过关: 的grep'\\(双|浮动\\)“* 给你所有的双重或浮
..
我想不写行内assembly.The的原因,我想这样做阅读栈指针寄存器的值,因为我想栈指针寄存器的值赋给数组的元素,我觉得它繁琐的访问数组使用内联汇编。所以,我想要做这样的事情。 注册“RSP”长rsp_alias; < ---我怎样实现类似的东西在GCC? 长current_rsp_value [NUM_OF_THREADS]current_rsp_value [TID = rsp_al
..
如果你想调用从内联汇编一个C / C ++的功能,你可以做这样的事情: 无效被叫方(){} 无效调用者() { ASM(“呼叫*%0”:“R”(被调用者)); } GCC将发出然后code看起来像这样: MOVL $被调用,EAX% 电*%eax中 这可能是问题的,因为间接调用会破坏旧CPU的流水线。 由于被叫方地址是最后一个常数,可以想见,这将有可能使用 I 约束。从GCC在
..
我也遇到过这样code: 结构试验 { UINT32 num_fields; 烧焦array_field []; }; 如何理解array_field?这是C语言的一个gcc的扩展? 解决方案 这是一个C99的功能,名为灵活的数组成员的这通常是用来创建一个可变长度的数组。 它只能被指定为最后一个成员的结构的没有(在 array_field []作为; )指定的大小。 例如,你可以做
..
我尝试建立它使用的pthreads和SSE __m128类型的应用程序。据GCC说明书,默认栈对齐为16个字节。为了使用__m128,要求是16字节对齐。 我的目标CPU支持SSE。我使用GCC编译器不支持运行时堆栈调整(例如-mstackrealign)。我不能使用任何其他GCC编译器版本。 我的测试应用程序是这样的: 的#include< xmmintrin.h> #包括LT
..
考虑以下浓缩code: / *编译:GCC -pthread -m32 -ansi x.c * / #包括LT&;&stdio.h中GT; #包括LT&;&inttypes.h GT; #包括LT&;&pthreads.h中GT;静态挥发uint64_t中V = 0;void *的FUNC(无效* X){ __sync_add_and_fetch(安培; V,1); 返回X; }诠释主
..
我在code基地,主要是下用一点点C ++和大多与海湾合作委员会建立,但有时它需要与MSVC建造工作。微软的C编译器仍然是pretty多C89有一些小的扩展,它仍然不支持混合code和变量定义的单的C ++ / C99。所以,我需要从写找到一种方法,prevent开发商乱序code /而他们正在与海湾合作委员会的工作,否则构建随后与MSVC打破变量定义。如果我使用的gcc -std = C89 然
..
在C,我有一个任务,我必须做乘法,倒置,trasposition,此外等等等等是庞大分配为2维数组矩阵(数组的数组)。 我已经找到了gcc标志 -funroll-全循环。如果我理解正确的话,这将自动解开所有回路,而不由程序员的任何努力。 我的问题: ) GCC是否包含这类的各种优化标志优化为 -O1 , -O2 等。 B)我必须使用任何编译是我的code内利用循环展开或正在循环自动识别?
..
在我的经验中,有很多code明确使用内联函数,这是有代价的: 的code变得越来越简洁,少了几分维护。 有时,内联能大大提高运行时的性能。 内联在固定时间点决定,也许没有它的用途的一个十分良好的预知,或者没有考虑到所有(未来)周围的情况。 现在的问题是:是否链接时优化(例如,在GCC)渲染手动内联,例如,在C99声明一个函数“内联”,并提供一个实现,过时了吗?这是真的,我们并不
..
在3.0.4 Linux内核,毫米/ filemap.c有这一行code的: RETVAL RETVAL =?desc.error; 我试过编译类似最小测试用例用gcc -Wall并没有得到任何警告;的行为似乎相同的: RETVAL RETVAL =? RETVAL:desc.error; 综观C99标准,我想不出有什么正式介绍了这种行为。这是为什么好? 解决方案 随着其他几个人都
..
让 N 是一个编译时无符号整数。 GCC可以优化 无符号的总和= 0; 对(无符号I = 0; I< N;我++)之和+ =一个; //一个是无符号整数 简单地 A * N 。这可以理解,因为模运算称(A%K + B%K)%K =(A + B)%K 。 但是GCC不优化浮动总和= 0; 对(无符号I = 0; I< N;我++)之和+ =一个; // a是一个浮动 到 A
..
我用了fflush()在Linux中GCC,但没有奏效。是否有该功能的其它方法吗?这里是我的code: #包括LT&;&stdio.h中GT; 无效的主要() { 焦炭CH ='Y'; 而(CH =='Y') { int类型的; 的printf(“请输入某个值:”); scanf函数(“%d个”,&安培; A); fflush(标准输入); 的
..
我有一堆的静态库(* .a)中,我想建立一个共享库(* .a)中,以对那些静态链接库(* .a)中。我怎样才能在gcc / g ++的这样做呢?谢谢! 解决方案 您可以(只提取所有的.o 文件和将它们链接-shared 作的.so ),但无论它的工作原理,以及它如何工作的,取决于平台以及是否静态库是编译成的与位置无关的code 的(PIC)。在某些平台上(如x86_64的),非PIC co
..
我学习C和我要在我的笔记本电脑上安装的MinGW。 MinGW的安装程序是一个的 Web的安装程序的,它要求电脑安装时能够访问互联网。但问题是,我的电脑没有连接到互联网。因此它不能被安装。 所以,我想我下载的智能手机上的完整的离线安装,并通过蓝牙它转流到我的电脑。 我已经尝试TDM-GCC,但即使这样要求我下载的财产以后。 那么,有没有离线安装程序MinGW的?如果是的话我在哪里可以得到它呢
..
的#include< my_global.h> #包括LT&;&mysql.h中GT;INT主(INT ARGC,字符** argv的) { 的printf(“MySQL的客户端版本:%S \\ n”,mysql_get_client_info()); } 〜$ gcc的-o的mysql-测试MySQL-TEST.C 我尝试从终端执行该测试程序,但得到以下错误消息:
..
我试图优化计算密集型算法和我种停留在一些缓存问题。我有其在应用程序的结束偶尔和随机写入和读取一次一个巨大的缓冲器。很显然,写入缓冲区产生大量高速缓存未命中,此外污染这是事后又需要计算缓存。我试图用非临时移动instrinsics,但高速缓存未命中(由Valgrind的报道和运行时的测量支持)仍时有发生。然而,进一步调查非临时的移动,我写了一个小的测试程序,它可以见下图。顺序存取,大的缓冲,只写。
..
..
在gcc手册它被赋予了“C标准库本身 存储在“/usr/lib/libc.a'。”我已经安装了GCC,但无法找到该位置的libc.a,很想知道在什么位置。 我发现许多.so文件在/ usr / lib目录位置。那些是什么? 解决方案 有几件事情: gcc和glibc的是两个不同的东西。 GCC是编译器,glibc的是运行时库。 pretty太多一切都需要glibc的运行。 .A
..