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

使用objdump查看时,GCC调试选项不考虑预处理器#if

objdump是一个用于查看目标文件(二进制文件)的工具,它可以显示目标文件的各个部分的信息,包括代码段、数据段、符号表等。GCC是一种常用的编译器,它可以将源代码编译成目标文件。

预处理器指令#if是C/C++语言中的条件编译指令,用于根据条件编译不同的代码段。在编译过程中,预处理器会根据#if指令的条件判断结果,决定是否编译相应的代码段。

使用objdump查看目标文件时,GCC调试选项不考虑预处理器#if指令,因为objdump只能查看已经生成的目标文件,而预处理器指令在编译过程中会被解析和处理,不会出现在目标文件中。

总结:

  • objdump是用于查看目标文件的工具,可以显示目标文件的各个部分的信息。
  • GCC是一种常用的编译器,用于将源代码编译成目标文件。
  • 预处理器指令#if是C/C++语言中的条件编译指令,用于根据条件编译不同的代码段。
  • objdump无法查看预处理器指令#if的相关信息,因为它只能查看已经生成的目标文件,而预处理器指令在编译过程中会被解析和处理。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

添加行号和文件标识,以便编译产生调试用的行号及编译错误警告行号。 保留所有的#pragma编译器指令,后续编译过程需要使用它们。...GCC选项-E使GCC在进行完预处理后即停止 hello.i文件可以作为普通文本文件打开进行查看,其代码片段如下所示: // hello.i代码片段 extern void funlockfile...gcc选择链接libtest.a则可以指定gcc选项-static,该选项会强制使用静态库进行链接。...“gcc -static hello.c -o hello”则会使用静态库进行链接,生成的ELF可执行文件的大小(使用Binutils的size命令查看)和链接的动态库(使用Binutils的ldd命令查看...objdump -S将其反汇编并且将其C语言源代码混合显示出来: $ gcc -o hello -g hello.c //要加上-g选项 $ objdump -S hello …… 0000000000400526

2.9K30

Linux 程序编译过程详解

添加行号和文件标识,以便编译产生调试用的行号及编译错误警告行号。 保留所有的#pragma编译器指令,后续编译过程需要使用它们。...使用gcc进行预处理的命令如下: $ gcc -E hello.c -o hello.i // 将源文件hello.c文件预处理生成hello.i // GCC选项-E使GCC在进行完预处理后即停止...gcc选择链接libtest.a则可以指定gcc选项-static,该选项会强制使用静态库进行链接。...“gcc -static hello.c -o hello”则会使用静态库进行链接,生成的ELF可执行文件的大小(使用Binutils的size命令查看)和链接的动态库(使用Binutils的ldd命令查看...objdump -S将其反汇编并且将其C语言源代码混合显示出来: $ gcc -o hello -g hello.c //要加上-g选项 $ objdump -S hello …… 0000000000400526

1.8K30

Linux 程序编译过程详解

添加行号和文件标识,以便编译产生调试用的行号及编译错误警告行号。保留所有的#pragma编译器指令,后续编译过程需要使用它们。...的选项-E使GCC在进行完预处理后即停止hello.i文件可以作为普通文本文件打开进行查看,其代码片段如下所示:// hello.i代码片段extern void funlockfile (FILE *...gcc选择链接libtest.a则可以指定gcc选项-static,该选项会强制使用静态库进行链接。...“gcc -static hello.c -o hello”则会使用静态库进行链接,生成的ELF可执行文件的大小(使用Binutils的size命令查看)和链接的动态库(使用Binutils的ldd命令查看...objdump -S将其反汇编并且将其C语言源代码混合显示出来:$ gcc -o hello -g hello.c //要加上-g选项$ objdump -S hello……0000000000400526

1.8K30

gcc命令使用_c调用cmd并执行命令

添加行号和文件标识,以便编译产生调试用的行号及编译错误警告行号。 保留所有的#pragma 编译器指令,后续编译过程需要使用它们。....debug:调试符号表,调试器用此段的信息帮助调试。...反汇编ELF 由于 ELF 文件无法被当做普通文本文件打开,如果希望直接查看一个 ELF 文件包 含的指令和数据,需要使用反汇编的方法 使用 objdump -S 将其反汇编并且将其 C 语言源代码混合显示出来.../usr/local/lib 这是当初 compile gcc 写在程序内的 动态链接、执行时搜索路径顺序: 编译目标代码指定的动态库搜索路径 环境变量 LD_LIBRARY_PATH 指定的动态库搜索路径...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

1.8K40

linux 编译汇编,linux下的汇编教程

linux下的汇编教程 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作 ARM的协处理器等。...当标号为0~9的数字为局部标号,局部标号可以重复出现,使用方法如下:  标号f: 在引用的地方向前的标号  标号b: 在引用的地方向后的标号 【例2】使用局部符号的例子,一段循环程序 1: subs...Linux汇编程序中的宏定义 格式如下: .macro 宏名 参数名列表 @伪指令.macro定义一个宏 宏体 .endm @.endm表示宏结束 如果宏使用参数,那么在宏体中使用该参数添加前缀...宏定义的参数还可以使用默认值。 可以使用.exitm伪指令来退出宏。...还可以使用-S选项,移除所有的符号信息及重定位信息。

3.4K31

使用VisualGDB开发Keil MDK-ARM项目

前言 本教程展示了如何使用VisualGDB使用Keil MDK-ARM编译器构建项目,使用VisualGDB智能感知包括CodeMap,并使用Visual Studio调试它。...选择一个调试方法。在本例中,我们将使用STM32F411RE核子板中集成了ST-Link的OpenOCD: ? 不要忘记手动选择设备类型。当您手动指定标志,VisualGDB将无法检测它。...指定的选项需要分为3类: 包括目录和预处理器宏。这些选项对于智能感知很重要。 Keil-specific选项。这些选项兼容gcc,并且会产生智能感知错误。 “-c”和“-o”等指定文件名的选项。...arm-eabi-objdump运行。exe -x (objdump工具是GCC工具链的一部分): ? 我们将通过两个步骤来解决这个问题:首先,我们将运行名为fromelf的Keil工具。...重新开始调试您的项目,并验证硬件寄存器现在显示: ? 最后,我们将修复Keil错误消息的解析。由于它们使用的语法与GCC不同,VisualGDB默认不会识别它们。

2.3K30

ELF文件-逆向工具

文件的信息; nm : 查看ELF文件中的符号信息; ldd : 查看ELF文件所依赖的库文件; 2、objdump 用于对ELF文件进行反汇编; objdump -d ;反汇编部分可执行的二进制代码...; objdump -D ;反汇编全部的可执行的二进制代码; objdump -S ;尽量把可执行的二进制代码反汇编成源码; 3、hexdump 以十六进制格式查看ELF格式的二进制可执行文件的内容..., d-十进制,o-八进制; 如果使用-t指定了十六进制格式,则-A选项就不是必须的了; 5、xxd 以十六进制格式查看ELF格式的二进制可执行文件的内容; xxd ;以小写的十六进制格式显示...文件或进程对系统调用的调用(system_call); gdb : 对一个程序进行调试;使用gcc编译该程序时需加上选项-g,让编译器增加一些调试信息; strip : 删除程序中的调试信息;这些调试信息是编译该程序时...,gcc编译器的-g选项添加的; splint: 查看一个程序中对未赋值变量的引用、未使用的函数参数,等情况;(静态检测) lsof : 查看一个进程打开的文件; fuser : 查看正在访问指定的

86220

GCC生成的汇编代码

一、查看GCC生成的汇编代码 在命令行上用“-S”选项,就能看到C编译器产生的汇编代码: #gcc -S code.c  注意:这里是大写的-S,如果用小写gcc会说找不到main函数 会在当前目录下生成...“-O2”选项开启二级优化的效果: #gcc -O2 -S code.c  .file "code.c" .globl _accum  .bss  .align 4 _accum:  .space...二、用GDB查看目标文件的字节表示   首先,我们用反汇编器来确定函数sum的代码长度是19字节。...然后我们在文件code.o上运行GNU调试工具GDB,输入命令: (gdb) x/19xb sum 这条命令告诉GDB检查(简写为"x")19个以十六进制格式表示的字节。 ?...三、反汇编目标文件 在Linux系统中,带 "-d" 命令行选项调用OBJDUMP可以完成这个任务: #objdump -d code.o ?

2K10

linux objdump命令,Linux objdump命令

一、简介 objdump命令是用查看目标文件或者可执行的目标文件的构成的gcc工具。...二、选项 三、实例 1)显示文件头信息 objdump -f test 2)显示Section Header信息 objdump -h test 3)显示全部Header信息 objdump -x test...) objdump -Slj .text obj 10)对任意二进制文件进行反汇编 objdump -D -b binary -m i386 a.bin 【笔记】objdump命令的使用 —恢复内容开始...… linux常用命令–开发调试篇 前言 Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题.本文将简单介绍一下这些命令...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

28.2K31

【专业技术】C语言里面丰富多彩的浮点运算

现在的Linux系统默认编译选择使用hard-float,如果系统没有任何浮点处理器单元,这 就会产生非法指令和异常。因而一般的系统镜像都采用软浮点以兼容没有VFP的处理器。...-mfloat-abi=value -mfloat-abi=soft 使用这个参数,其将调用软浮点库(softfloat lib)来支持对浮点的运算,GCC编译器已经有这个库了,一般在libgcc里面...这时根本不会使用任何浮点指令,而是采用常用的指令来模拟浮点运算。 但使用的ARM芯片不支持硬浮点,可以考虑使用这个参数。...在使用这个参数,连接一般会出现下面的提示: undefined reference to `__aeabi_fdiv' 或者类似的提示,主要因为一般情况下连接器没有去主动寻找软浮点库,这时使用将libgcc...这样要求所有库和应用程序必须采用这同一个参数来编译,否则连接时会出现接口兼容错误。 我们对main.c文件使用硬件浮点重新编译: ? 翻译成的汇编代码如下: ?

1.7K50

GCC 编译器的使用

常用选项 描述 -E 预处理,开发过程中想快速确定某个宏可以使用“-E -dM” -c 把预处理、编译、汇编都做了,但是链接 -o 指定输出文件 -I 指定头文件目录 -L 指定链接库文件目录 -l...常用选项 描述 -E 预处理,开发过程中想快速确定某个宏可以使用“-E -dM” -c 把预处理、编译、汇编都做了,但是链接 -o 指定输出文件 -I 指定头文件目录 -L 指定链接库文件目录 -l...(5)-v 显示制作 GCC 工具自身的配置命令;同时显示编译器驱动程序、预处理器、编译器的版本号。以一个程序为例,它包含三个文件,代码在 02_options 目录下。...在编写程序时,有时候查找某个宏定义是非常繁琐的事,可以使用`-dM –E’选项查看。...2.9 ld/objdump/objcopy 选项 我们在开发 APP ,一般不需要直接调用这 3 个命令;在开发裸机、bootloader ,或是调试 APP 时会涉及,到时再讲。 -end-

3.8K31

S3C2440② | arm-linux-gcc交叉编译工具链

之前我们已经使用gcc编译Linux本地主机的程序(Linux C语言编程(上篇) | gcc使用),而我们现在需要的这个编译器的目标系统是ARM,运行操作系统,仅运行裸机程序,需要在Linux主机上编译出可以运行在...执行arm-linux-gcc查看版本,主要是检查工具链是否可以正常运行: ?...安装完成后再次查看gcc版本,检测是否成功: 3.arm-linux-gcc使用 arm-none-linux-gnueabi-gcc和之前的gcc使用无太大差异,示例如下。...4.嵌入式开发中目标文件的链接 在使用交叉编译工具链,最重要的过程是链接过程: 简单的程序链接可以使用一些参数指定; 复杂的程序链接需要使用链接文件.ld指定。...在嵌入式开发中大部分程序是使用C语言编写的,但是在遇到一些问题的时候,需要将由C语言编译生成的可执行程序反汇编,根据汇编程序排查错误,使用工具arm-linux-objdump,格式如下: arm-linux-objdump

3.9K40

9个基本的GNU binutils 工具【Linux-Command-line】

二进制或可执行文件是编译源代码获得的。 熟练的调试人员通常会通过了解这种差异来获得优势。 汇编101 在深入研究binutils软件包本身之前,最好先了解编译的基础知识。...它使用GNU Compiler Collection (gcc)。 在“hello.i”文件上运行带有“-S”选项gcc命令后,它将创建一个名为“hello.s”的新文件。...objdump:显示目标文件中的信息 可以从二进制文件中转出机器语言指令的另一个binutils工具称为“objdump”。 使用“-d”选项,该选项可从二进制文件中反汇编所有汇编指令。...现在,在可执行文件(a.out)上运行objdump,然后查看得到的结果。...为此编写另一个测试程序; 只有这一次才能确保使用gcc的“-g”标志进行编译,这将为二进制文件添加其他调试信息,并且包含行号(在此处的源代码中提供)也将有所帮助: 屏幕快照 2019-11-20 下午

4.1K50

linux后台开发常用调试工具

其中两种功能强大的工具是objdump和readelf。 readelf工具使用来显示一个或多个ELF格式文件信息的GNU工具。使用不同的参数可以查看ELF文件不同的的信息。...(尽可能反汇编出源代码) objdump –S 尽可能反汇编出源代码,尤其当编译的时候指定了-g参数,效果比较明显。...-pg 编译和链接选项),gcc在你应用程序的每个函数中都加入了一个名为mcount(or“_mcount”, or“__mcount”)的函数,也就是说-pg编译的应用程序里的每一个函数都会调用mcount...使用步骤: 1、使用 -pg 编译和链接应用程序 gcc -pg -o exec exec.c 如果需要库函数调用情况: gcc -lc_p -gp -o exec exec.c 2、执行应用程序使之生成供...gdb查看core: gdb opprofile (查看CPU耗在哪) 常用命令 使用oprofile进行cpu使用情况检测,需要经过初始化、启动检测、导出检测数据

3.8K151

GCC工具链都包含哪些工具

GCC GCC原名为GNU C语言编译器(GNU C Compiler),原本只能处理C语言。...后来随着功能的扩展,支持的语言种类越来越多 ,故更名为GCC(GNU Compiler Collection,GNU编译器套件) 因此 GCC既可以指代C编译器,也可以指代GNU编译套件 其套件囊括了许多子工具...: gcc: C 编译器 g++: C++ 编译器 cpp: C 预处理器 as: 汇编器 ld: 连接器 objcopy: 目标文件翻译器,用于从连接器输出中创建一个ROM 映像 objdump: 目标文件阅读器..., 用于反汇编目标文件 make: make 工具 gdb: 源代码调试GCC工具链 一个程序从代码编译到机器执行,中间需要经历很多步骤,比如从预编译,编译,到汇编和连接, 这一系列环环相扣过程中涉及到的...,需要了解每个工具的作用和具体使用方法

1.5K50

linux常用命令--开发调试

这时候,我们可以使用nm命令来查看。...但是要特别注意的是,“瘦身”之后的elf文件由于没有了符号信息,许多调试命令将无法正常使用,出现core dump,问题也较难定位,因此只建议在正式发布对其进行“瘦身”。...反汇编指定函数--objdump objdump用于展示elf文件信息,功能较多,在此逐一介绍。...有时候我们需要反汇编来定位一些问题,可以使用命令: objdump -d cmdTest #反汇编整个cmdTest程序 但是如果程序较大,那么反汇编时间将会变长,而且反汇编文件也会很大。...core dump将不会生成core文件 ulimit -c unlimited #不限制core文件生成大小 ulimit -c 10 #设置最大生成大小为10kb 调试神器--gdb gdb是一个强大的调试工具

1.5K30
领券