首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用gcc或binutils查找正在消耗.bss的内容

gcc和binutils是开发工具链中常用的工具,用于编译、链接和调试程序。在这个问答内容中,你想要了解如何使用gcc或binutils来查找正在消耗.bss(Block Started by Symbol)的内容。

.bss是一块用于存储未初始化全局变量和静态变量的内存区域。它在程序加载时会被清零,因此不需要额外的存储空间来保存初始值。但是,如果程序中存在大量的未初始化全局变量和静态变量,.bss区域的大小可能会很大,从而占用较多的内存资源。

为了查找正在消耗.bss的内容,你可以使用以下步骤:

  1. 编译程序:使用gcc编译你的程序,并确保启用了调试信息。可以使用以下命令:
  2. 编译程序:使用gcc编译你的程序,并确保启用了调试信息。可以使用以下命令:
  3. 这将生成一个可执行文件your_program
  4. 生成符号表:使用binutils中的nm命令生成程序的符号表。符号表包含了程序中定义的全局变量和静态变量的信息。可以使用以下命令:
  5. 生成符号表:使用binutils中的nm命令生成程序的符号表。符号表包含了程序中定义的全局变量和静态变量的信息。可以使用以下命令:
  6. 这将输出程序的符号表,其中包含了变量的地址和类型等信息。
  7. 分析符号表:查找符号表中的未初始化全局变量和静态变量。这些变量通常以B开头,表示它们存储在.bss区域。你可以根据符号表中的信息来确定哪些变量正在消耗.bss的内容。
  8. 优化和调整:一旦确定了消耗.bss的变量,你可以考虑优化你的程序,减少.bss区域的大小。例如,你可以将一些全局变量改为局部变量,或者使用动态内存分配来延迟变量的初始化。

需要注意的是,以上步骤是一种常见的方法,但具体的实施可能因程序的复杂性和使用的编程语言而有所不同。此外,对于大型项目,可能需要使用更高级的工具和技术来进行性能分析和优化。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体品牌商,我无法提供相关链接。但腾讯云作为一家知名的云计算服务提供商,提供了丰富的云计算产品和解决方案,你可以通过访问腾讯云官方网站来了解更多信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux命令(65)——ld命令

1.命令简介 ld命令是二进制工具集GNU Binutils的一员,是GNU链接器,用于将目标文件与库链接为可执行程序或库文件。...这仅在生成动态链接的ELF可执行文件时才有意义。默认的动态链接器通常是正确的,除非您知道正在做什么,否则不要使用该选项。...此脚本将替换ld的默认链接器脚本(而不是添加到其中),因此脚本必须指定输出文件所需的所有内容。...如果当前目录中不存在脚本文件,“ld”会在-L选项指定的目录中查找 -Ttext=:使用指定的地址作为文本段的起始点 -Tdata=:使用指定的地址作为数据段的起始点 -Tbss=:使用指定的地址作为bss段的起始点 -t,--trace:在处理输入文件时显示它们的名称 -u ,--undefined=:强制指定符号在输出文件中作为未定义符号

17.7K13
  • Linux 程序编译过程详解

    链接器将函数的代码从其所在地(不同的目标文件或静态链接库中)拷贝到最终的可执行程序中。...以Hello World为例: 如果使用命令“gcc hello.c -o hello”则会使用动态库进行链接,生成的ELF可执行文件的大小(使用Binutils的size命令查看)和链接的动态库(使用...Binutils的ldd命令查看)如下所示: $ gcc hello.c -o hello $ size hello //使用size查看大小 text data bss...“gcc -static hello.c -o hello”则会使用静态库进行链接,生成的ELF可执行文件的大小(使用Binutils的size命令查看)和链接的动态库(使用Binutils的ldd命令查看...)如下所示: $ gcc -static hello.c -o hello $ size hello //使用size查看大小 text data bss dec

    1.9K30

    Linux 程序编译过程的来龙去脉

    // GCC的选项-c使GCC在执行完汇编后停止,生成目标文件 //或者直接调用as进行汇编 $ as -c hello.s -o hello.o //使用Binutils中的as将hello.s文件汇编生成目标文件...链接器将函数的代码从其所在地(不同的目标文件或静态链接库中)拷贝到最终的可执行程序中。...以Hello World为例: 如果使用命令“gcc hello.c -o hello”则会使用动态库进行链接,生成的ELF可执行文件的大小(使用Binutils的size命令查看)和链接的动态库(使用...Binutils的ldd命令查看)如下所示: $ gcc hello.c -o hello $ size hello //使用size查看大小 text data bss...“gcc -static hello.c -o hello”则会使用静态库进行链接,生成的ELF可执行文件的大小(使用Binutils的size命令查看)和链接的动态库(使用Binutils的ldd命令查看

    3K30

    Linux 程序编译过程详解

    / GCC的选项-c使GCC在执行完汇编后停止,生成目标文件//或者直接调用as进行汇编$ as -c hello.s -o hello.o //使用Binutils中的as将hello.s文件汇编生成目标文件注意...链接器将函数的代码从其所在地(不同的目标文件或静态链接库中)拷贝到最终的可执行程序中。...以Hello World为例:如果使用命令“gcc hello.c -o hello”则会使用动态库进行链接,生成的ELF可执行文件的大小(使用Binutils的size命令查看)和链接的动态库(使用Binutils...的ldd命令查看)如下所示:$ gcc hello.c -o hello$ size hello //使用size查看大小 text data bss dec hex...“gcc -static hello.c -o hello”则会使用静态库进行链接,生成的ELF可执行文件的大小(使用Binutils的size命令查看)和链接的动态库(使用Binutils的ldd命令查看

    1.9K30

    深入浅出GCC编译器

    一、GCC交叉编译工具链 GCC编译工具链包含了GCC编译器在内的一整套工具,主要包含了GCC编译器、Binutils工具集、glibc标准函数库。...Binutils工具集 (1)链接器与汇编器 binutils(bin utility,GUN二进制工具集),GNU binutils是一组二进制工具集。...大多数情况下,推荐使用 O2 这一级优化选项就足够了。 O3:最高的优化级别,它会使用更多的编译时间,并且会增大二进制文件的体积并让他们更消耗内存。...,每个选项都会完成一定的优化内容,这里就不深入探讨了,只需要了解 O1-O3 的使用即可)。...那么上面问题的解决方法就是加 -I 选项,可以使用相对路径或决定路径: 相对路径 gcc main.c test.c -o main -I ..

    53810

    交叉编译概念详解

    : 整个编译过程是非常消耗资源的,嵌入式系统往往没有足够的内存或磁盘空间; Availability: 即使目标平台资源很充足,可以本地编译,但是第一个在目标平台上运行的本地编译器总需要通过交叉编译获得.../configure make make install)的软件包通常会测试字节序或页面大小等内容,以便在本地编译时可移植。...当目标没有该程序包或版本不兼容时,配置还可以检测主机上是否存在该程序包并包括对该程序包的支持; HOSTCC vs TARGETCC:许多构建过程需要编译内容才能在主机系统上运行,例如上述配置测试或生成代码的程序...2.2 交叉编译链的命名规则 我们使用交叉编译链时,常常会看到这样的名字: ‍ arm-none-linux-gnueabi-gcc arm-cortex_a8-linux-gnueabi-gcc...,对于一些新的 GCC 特性不支持 可以使用自己需要的 GCC 特性的版本 补丁 一般都会打上修复补丁 普通开发者很难辨别需要打上哪些补丁,资深开发者可以针对自己的需求合入补丁 源码溯源 可能不清楚源码版本和补丁情况

    4.3K10

    Linux pwn入门学习到放弃

    linux程序的常用保护机制 先来学习一些关于linux方面的保护措施,操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险,包括DEP、ASLR等。...而动态链接的ELF二进制文件使用称为全局偏移表(GOT)的查找表来动态解析共享库中的函数,GOT就成为了黑客关注的目标之一, GCC, GNU linker以及Glibc-dynamic linker一起配合实现了一种叫做...堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。...释放后使用(Use-After-Free)漏洞是内存块被释放后,其对应的指针没有被设置为 NULL,再次申请内存块特殊改写内存导致任意地址读或劫持控制流。...占位chunk0 和 chunk1,申请的内容覆盖 chunk1-> #调用的是之前留下的chunk1 然后被覆盖 delete(1) # call free -> call _puts

    3.9K10

    Linux 编译安装 GCC 4.9

    详情及变更请参照: Linux 编译安装 GCC 4.9 GCC4.9发布啦,本脚本在之前4.8的基础上做了稍许改进,更新 PS:4.9.0 开始支持C++1y特性 GCC 4.9 的大致变更如下,...多项链接优化(包含对类型合并功能重写、函数体按需加载等)[Debug模式的Firefox内存消耗从15GB降到3.5GB,链接时间从1700秒降到350秒] Inter-procedural优化改进...、多态lambda表达式 支持正则表达式、部分C++14实验性内容 Fortran更新的内容我就无情地忽略啦 Go语言1.2.1版本的接口 还有一系列针对特定编译目标架构的优化 编译安装...支持POSIX的shell或GNU bash POSIX或SVR4的 awk工具 GNU binutils gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org...编译目标: gcc 4.9.X binutils 2.24 python 2.7.8 [按需] gdb 7.7.1 (如果存在ncurses-devel包) 注: (所有的库都会被安装在

    7.7K10

    linux安装gcc命令步骤(centos安装gcc命令)

    ## 验证 gcc -v ## 需要注意的是使用scl命令激活启用gcc只是临时的,退出当前shell环境或重启系统就会恢复为原来的gcc版本。...## 激活gcc 8.3.1 scl enable devtoolset-8 bash ## 验证 gcc -v ## 需要注意的是使用scl命令激活启用gcc只是临时的,退出当前shell环境或重启系统就会恢复为原来的...-4-binutils ## 激活gcc 5.2.1 scl enable devtoolset-4 bash ## 验证 gcc -v ## 需要注意的是使用scl命令激活启用gcc只是临时的,退出当前...-3-binutils ## 激活gcc 4.9.2 scl enable devtoolset-3 bash ## 验证 gcc -v ## 需要注意的是使用scl命令激活启用gcc只是临时的,退出当前...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    25.9K21

    Android对so体积优化的探索与实践

    .data:存放的是初始值不为零的一些可读写变量。 .bss:存放的是初始值为零或未初始化的一些可读写变量。该 section 仅指示运行时需要的内存大小,不会占用 so 文件的体积。....gnu.hash 和.hash:两种类型的哈希表,用于快速查找 .dynsym 中的导出符号或全部符号。...另外,这里应区分符号表项与实现体,符号表项是动态符号表中相应的 Elfxx_Sym 项(见上图),实现体是其在 .text、.data、 .bss、.rodata 等或其他部分的实体。...在项目开发中,使用 static 关键字声明一个函数或变量“仅在本文件可见”是很好的习惯,但是不建议使用 static 关键字控制符号可见性:无法使用 static 关键字控制一个多文件可见的函数或变量的符号可见性...GCC 不支持 Oz 是指 Android 最后使用的 GCC4.9 版本不支持 Oz 参数)。

    2.7K31

    程序一定要从main函数开始运行吗?

    Tips: 现在的程序和库通常来讲都很大,一个目标文件可能包含成百上千个函数或变量,当需要用到某个目标文件的任意一个函数或变量时,就需要把它整个目标文件都链接进来,也就是说那些没有用到的函数也会被链接进去...有一个编译选项叫函数级别链接,可以使得某个函数或变量单独保存在一个段里面,都链接器需要用到某个函数时,就将它合并到输出文件中,对于没用到的函数则将他们抛弃,减少空间浪费,但这会减慢编译和链接过程,GCC...,这段程序不依赖任何链接库就可以打印出字符串内容,读者如果不懂其中的含义也不用担心,只需要了解下面介绍的链接知识就好。...: gcc -c -fno-builtin test.cc 看下输出的test.o的符号: ~/test$ nm -a test.o 0000000000000000 b .bss 0000000000000000.../test hello 上面的tinytext一行是指将.text段、.data段、.rodata段的内容都合并到tinytext段中,使用readelf查看段的信息。

    1.3K30

    GCC、ARM-LINUX-GCC、ARM-ELF-GCC浅析

    一个常见的例子是在PC机上为运行在基于ARM、PowerPC或MIPS的目标机的编译软件。幸运的是,GCC使得这一过程所面临的困难要比听起来小得多。...GCC中的一般工具通常都是通过在命令行上调用命令(如gcc)来执行的。在使用交叉编译的情况下,这些工具将根据它编译的目标而命名。...交叉编译环境的实践的一部分,详细的安装过程请参考原文或GOOGLE搜索之。...好了,不卖关子了,入正题,因为我们知道X86跟ARM所使用的指令集是不一样的,所以所需要的binutils肯定不一样咯;上面提到过gcc-core是依赖于binutils的,自然ARM跟X86所使用的gcc-core...arm-linux-gcc使用GNU的Glibc,而arm-elf-gcc一般使用 uClibc/uC-libc或者使用REDHAT专门为嵌入式系统的开发的C库newlib。

    6.8K10

    ​在tinycolinux32上装tinycolinux64 kernel和toolchain

    b上的gcc,且这个gcc能产生c上运行的代码,这里abc依次即为build,host,target,GCC自举统一使用build平台已有的binutils,kernel,libc,且通常build=host...所以这里我们采取最简单的方法:从同版本的32位GCC bootstrap编译出同版本的GCC,采用本地的32位gcc bootstrap式cross compile出64位的gcc,不再使用外来cross...GCC支持从32到64或反过来的交叉构建。...我们选用2.x repos的make.tcz(3.81版,为什么不使用3.x的make 382接下来会涉及到)和选用3.x repos的gcc443 32位(为什么不用4.x的gcc471:因为4.x后采用....1,libm.so.6(->libm-2.12.1.so),当然了,这些库都要从新编译出的工具链的lib或lib64中找,放到a的目录,然后在a的目录下写个runa,加起执行权限,内容为: D=$(dirname

    84220
    领券