草庐IT

c - 为什么 gcc 使用 -O0 进行一些优化

我使用gcc4.8.4和-O0标志编译了以下代码:#include#include#includestaticjmp_bufenv;staticvoiddoJump(intnvar,intrvar,intvvar){printf("InsidedoJump():nvar=%drvar=%dvvar=%d\n",nvar,rvar,vvar);longjmp(env,1);}intmain(intargc,char*argv[]){intnvar;registerintrvar;volatileintvvar;nvar=111;rvar=222;vvar=333;if(setjmp(en

c++ - GCC 和 ld 找不到导出的符号......但它们在那里

我有一个C++库和一个试图使用从该库导出的函数和类的C++应用程序。该库构建良好,应用程序编译但无法链接。我得到的错误遵循这种形式:app-source-file.cpp:(.text+0x2fdb):undefinedreferenceto`lib-namespace::GetStatusStr(int)'链接器似乎很好地解析了库中的类,但自由函数和导出的数据(如余弦查找表)总是会导致上述错误。我使用的是Ubuntu8.04(Hardy),它是最新的Ubuntu软件包。链接库的命令是(删除其他库):g++-fPIC-Wall-O3-shared-Wl,-soname,lib-in-q

linux - 如何在确定地址(gcc,linux)的可执行文件中创建 "empty"空间?

我本质上想要做的是让另一个程序将数据写入这个“空白空间”,以便可执行文件在我想过在应用程序上附加一个签名,然后写入数据,稍后搜索它,但这听起来不太对......现在,其他重要的事情......我知道应该可以通过使用如下代码来创建代码洞穴:voidfunction(void){__asm{nopnopnopnop};}然后,即使这实际上是相同的(除了它将在.data部分中,因此不可执行):constchardata[3];问题是其他应用程序没有明确的地址可以写入。 最佳答案 至少对于PE和ELF,您可以将数据附加到可执行文件的末尾,而

linux - cron.hourly 中的这个文件 (gcc.sh) 是恶意软件吗?

我的服务器上遇到了高达1Gbps的峰值,并且一直在寻找病毒和恶意软件。我在/etc/cron.hourly中找到了这个文件:gcc.sh,想知道是否有人见过类似的东西,并且会对代码有一些了解。谢谢!#!/bin/shPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/binforiin`cat/proc/net/dev|grep:|awk-F:{'print$1'}`;doifconfig$iup&donecp/lib/libudev.so/lib/libudev.so.6/lib/l

linux - 没有 gcc 的 gdb

是否可以使用用as组装并用ld链接的程序来运行GDB?使用gcc添加标志-g允许调试,但我得到错误Nosymboltableisloaded。当我尝试向加载的程序添加断点时,使用"file"命令。谢谢!编辑也许我应该明确表示我正在学习和编程汇编。我真正想要的只是堆栈跟踪,但能够使用GDB会很棒。解决方案运行as-g即可。谢谢大家的回答!! 最佳答案 这是可能的。但是,您需要符号才能添加符号断点,符号由调试信息提供;确保您的汇编器和链接器提供这些。编辑对于GNUas,使用as-g。或者只使用gcc-g:如果你给它一个.s文件,它会调用

linux - 如何告诉 "gmake"使用另一个版本的 GCC? (Linux)

我的机器上有常用的gcc(在/usr/bin/gcc),当我为我正在使用的某个框架设置环境时,另一个(更新的)链接了。我想用/usr/bin/gcc上的旧版本编译,而不是使用较新的版本。我必须使用“gmake”命令进行编译(自定义编译设置)。在不更改PATH的情况下,我如何“告诉”gmake使用不同的gcc? 最佳答案 从命令行:gmakeCC=/usr/bin/gcc 关于linux-如何告诉"gmake"使用另一个版本的GCC?(Linux),我们在StackOverflow上找到一

c++ - 如何在 Linux (GCC) 中打印输出(不是标准输出)?

在Windows上有OutputDebugString功能,我如何在Linux上做同样的事情?更新:stderr和stdlog不是我想要的。那些被重定向到标准输出。P.S.和syslog没有区别。 最佳答案 我不确定OutputDebugString确实如此,但标准C++定义了标准错误流std::cerr和标准日志记录流std::clog.两者都在header中声明.它们在Linux中默认绑定(bind)到同一个文件描述符;区别在于cerr是无缓冲的,而clog被缓冲(我相信它是行缓冲的)。Linux中没有“系统调试器”的概念。如果

linux - gcc:错误:选项 ‘-mabi=aapcs-linux’中无法识别的参数

首先安装跨工具,然后构建工具链,然后构建内核,但是在为RAM编译内核2.6.34时,反复出现错误root@kali:~/felabs/sysdev/tinysystem/linux-2.6.34#makeARCH=armCROSS-COMPILE=arm-linux-scripts/kconfig/conf-sarch/arm/KconfigCHKinclude/linux/version.hUPDinclude/linux/version.hCHKinclude/generated/utsrelease.hUPDinclude/generated/utsrelease.hGenera

c++ - 成员: bug in GCC or my thinking?的初始化

我在类(class)的私有(private)部分中定义了一个枚举类型。我也定义了这种类型的成员。当我尝试在构造函数主体中初始化此成员时,我在运行时遇到内存损坏问题。当我通过same构造函数中的初始化列表对其进行初始化时,我没有遇到内存损坏问题。我做错了什么吗?我将简化代码,如果它是GCC错误,我确定它是我正在组合/继承/等的特定类的组合,但我保证这捕获了问题的本质.在初始化之前没有使用这个成员变量,在完全构造之前没有使用新创建的对象。这个成员的初始化确实是我在主体中做的第一件事,当内存损坏发生时,valgrind说它在我初始化变量的行上。Valgrind说这是大小为4的无效写入。相关头

c++ - 我怎样才能阻止 gcc 在较新的 ARM cpu 上发出 swap{b}?

我正在编译DCP-O-Matic在RaspberryPi2上收到以下警告:/tmp/ccu6rDcg.s:Assemblermessages:/tmp/ccu6rDcg.s:4208:Warning:swp{b}useisdeprecatedforARMv6andARMv7我已将“-mcpu=cortex-a8-mfpu=neon”传递给编译器,但我仍然收到警告。我很确定Linux内核中有一些东西使这个警告无关紧要,但我真的很想解决这个问题。这post有很多有用的信息,但我似乎找不到合适的开关来阻止警告。我已经验证没有使用swp{b}的显式汇编代码。谁能推荐清除这些警告的最佳方法?我真