首页
学习
活动
专区
工具
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.3K01

Linux 程序编译过程来龙去脉

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

2.9K30

Linux 程序编译过程详解

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

1.8K30

Linux 程序编译过程详解

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

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 ..

19510

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只是临时,退出当前...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

24.4K21

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版本接口 还有一系列针对特定编译目标架构优化 编译安装...支持POSIXshellGNU bash POSIXSVR4 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.6K10

交叉编译概念详解

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

3.7K10

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.6K10

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

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

6.6K10

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.4K31

程序一定要从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.2K30

​在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 reposmake.tcz(3.81版,为什么不使用3.xmake 382接下来会涉及到)和选用3.x reposgcc443 32位(为什么不用4.xgcc471:因为4.x后采用....1,libm.so.6(->libm-2.12.1.so),当然了,这些库都要从新编译出工具链liblib64中找,放到a目录,然后在a目录下写个runa,加起执行权限,内容为: D=$(dirname

82620
领券