美文网首页kali
最新kali之clang

最新kali之clang

作者: 黑战士安全 | 来源:发表于2021-11-26 16:41 被阅读0次

描述:

clang-Clang C,C ++和Objective-C编译器。

clang是一个C、c++和Objective-C编译器,它包含预处理、解析、优化、代码生成、汇编和链接。根据传递的高级模式设置,Clang会在完成完整链接之前停止。尽管Clang是高度集成的,但重要的是了解编译的阶段,了解如何调用它。这些阶段是:

驱动:

clang可执行文件实际上是一个小型驱动程序,它控制其他工具(如编译器、汇编器和链接器)的整体执行。通常您不需要与驱动程序交互,但是您可以透明地使用它来运行其他工具。

预处理:

此阶段处理输入源文件的标记化,宏扩展,#include扩展以及其他预处理程序指令的处理。该阶段的输出通常称为“ .i”(对于C),“.ii”(对于C ++),“.mi”(对于Objective-C)或“ .mii”(对于Objective-C ++)文件 。

解析和语义分析:

此阶段解析输入文件,将预处理器令牌转换为解析树。一旦采用了语法分析树的形式,它就会应用语义分析来计算表达式的类型,并确定代码是否格式正确。该阶段负责生成大多数编译器警告以及解析错误。该阶段的输出是“抽象语法树”(AST)。

代码生成和优化:

此阶段将AST转换为低级中间代码(称为“ LLVM IR”),最终转换为机器代码。此阶段负责优化生成的代码并处理特定于目标的代码生成。该阶段的输出通常称为“ .s”文件或“ assembly”文件。

Clang还支持使用集成汇编器,在该汇编器中,代码生成器直接生成目标文件。这避免了生成“ .s”文件和调用目标汇编程序的开销。

汇编程序:

此阶段运行目标汇编程序,以将编译器的输出转换为目标目标文件。该阶段的输出通常称为“ .o”文件或“ object”文件。

链接器:

此阶段运行目标链接程序,以将多个目标文件合并到可执行文件或动态库中。此阶段的输出通常称为“ a.out”,“。dylib”或“ .so”文件。

clang静态分析器:

Clang静态分析器是一种工具,可扫描源代码以尝试通过代码分析来发现错误。该工具使用了Clang的许多部分,并内置在同一驱动程序中。有关如何使用静态分析器的更多详细信息,请参见<https://clang-analyzer.llvm.org>。

选项:

阶段选择选项:

-E

运行预处理器阶段。

-fsyntax-only

运行预处理器、解析器和类型检查阶段。

-S

运行前面的阶段以及LLVM生成和优化阶段以及特定于目标的代码生成,从而生成一个程序集文件。

-c

运行上述所有程序,再加上汇编程序,生成一个目标”.o”对象文件。

无阶段选择选项:

如果没有指定阶段选择选项,则运行上述所有阶段,并运行链接器将结果合并到可执行库或共享库中。

语言选择和模式选项:

-x <language>

将后续的输入文件视为具有类型语言。

-std=<standard>

指定要编译的语言标准。

C语言支持的值有:c89, c90,iso9899:1990…

-stdlib=<library>

指定要使用的c++标准库;支持的选项是libstdc++和libc++。如果未指定,将使用平台默认值。

-rtlib=<library>

指定要使用的编译器运行时库;支持的选项是libgcc和compiler-rt。如果未指定,将使用平台默认值。

-ansi

与-std = c89相同。

-ObjC,-ObjC++

将源输入文件分别视为Objective-C和object - c++输入。

-trigraghs

启用trigraghs

-ffreestanding

指示该文件应针对独立环境而非托管环境进行编译。

-fno-builtin

禁用strlen()和malloc()等内置函数的特殊处理和优化。

-fmath-errno

指出应该将数学函数视为更新errno。

-fpascal-strings

使用" \pfoo"启用pascal风格的字符串支持。

-fms-extensions

启用对Microsoft扩展的支持。

-fmsc-version=

设置_MSC_VER。在Windows上默认为1300。否则不设置。

-fborland-extensions

启用对Borland扩展的支持。

-fwritable-strings

将所有字符串文字默认设置为可写。这将禁用字符串唯一化和其他优化。

-flax-vector-conversions

允许使用松散的类型检查规则进行隐式矢量转换。

-fblocks

启用“阻止”语言功能。

-fobjc-abi-version=version

选择要使用的Objective-CABI版本。可用版本为1(旧式“脆弱” ABI),2(非脆弱ABI 1)和3(非脆弱ABI 2)。

-fobjc-nonfragile-abi-version=<version>

选择默认使用的Objective-C非脆弱ABI版本。只有当非脆弱ABI被启用时,这个才会被用作Objective-C ABI(通过-fobjc-nonfragile-abi,或者因为它是平台默认值)。       

-fobjc-nonfragile-abi,-fno-obj-nonfragile-abi

启用Objective-C非脆弱ABI。在默认ABI的平台上,可以用-fno-objc-nonfragile-abi禁用它。

目标选择选项:

Clang完全支持交叉编译作为其设计的固有部分。根据您的Clang版本的配置方式,它可能支持许多交叉编译器,或者仅支持本机目标。 

-target <architecture>

指定要为其构建的体系结构。

--print-supported-cpus

打印出给定目标支持的处理器列表(通过-target =<architecture>或-arch<architecture>指定)。如果没有指定目标,将使用系统默认目标。

-mcpu=?,-mtune=?

–print-supported-cpus的别名

-march=<cpu>

指定Clang应该为特定处理器家族成员和更高版本生成代码。例如,如果指定-march = i486,则允许编译器生成在i486和更高版本的处理器上有效的指令,但在较早版本的处理器上可能不存在。

代码生成选项:

-O0, -O1, -O2, -O3, -Ofast,-Os, -Oz, -Og, -O, -O4

指定使用哪个优化级别:

-O0

意味着“无优化”:这个级别编译速度最快,生成的调试代码最多。

-O1

在-O0和-O2之间。

-O2

中等水平的优化,支持大多数优化。

-O3

与-O2相似,不同之处在于它可以使优化执行的时间更长或可能生成更大的代码(以使程序运行更快)。

-Ofast

启用-O3中的所有优化以及可能违反严格遵守语言标准的其他激进优化。

-Os

比如-O2,通过额外的优化来减少代码大小。

-Oz

比如-Os(也就是-O2),但是进一步减少了代码大小。

-Og

像-O1。在将来的版本中,此选项可能会禁用不同的优化,以提高可调试性。

-O

相当于- O2。

-O4 and higher

目前相当于-O3

-g,-gilne-tables-only,-gmodules

控制调试信息输出。注意,Clang调试信息在-O0下工作得最好。当指定多个以-g开头的选项时,最后一个将生效:

-g

生成调试信息

-gline-tables-only

只生成行表调试信息。这允许使用内联信息进行符号化回溯,但不包括关于变量、变量位置或类型的任何信息。

-gmodules

生成包含对Clang模块或预编译头中定义的类型的外部引用的调试信息,而不是将冗余的调试类型信息发送到每个目标文件中。此选项透明地将Clang模块格式切换为将Clang模块与调试信息一起保存的目标文件容器。当编译使用Clang模块或预编译头文件的程序时,此选项将生成具有更快的编译时间和更小的目标文件的完整调试信息。在构建静态库以分发给其他计算机时,不应使用此选项,因为调试信息将包含引用将库中的目标文件建立在机器上的模块高速缓存中。

-fstandalone-debug-fno-standalone-debug

Clang支持许多优化以减少二进制文件中调试信息的大小。它们的工作原理是,调试类型信息可以分布在多个编译单元上。例如,Clang不会为模块不需要的类型发出类型定义,而可以用前置声明代替。此外,Clang将仅在包含该类的vtable的模块中为动态C ++类发出类型信息。

-fstandalone-debug选项关闭这些优化。当使用不带调试信息的第三方库时,这很有用。这是Darwin的默认设置。请注意,对于程序完全未引用的类型,Clang永远不会发出类型信息。

-fexceptions

启用展开信息的生成。这允许通过Clang编译堆栈帧引发异常。在x86-64中默认情况下处于启用状态。

-ftrapv

生成代码以捕获整数溢出错误。C中未定义有符号整数溢出。使用此标志,将生成额外的代码来检测此情况并在发生时中止。

-fvisibility

此标志设置默认可见性级别。

-fcommon,-fno-common

此标志指定没有初始化式的变量具有公共链接。它可以用-fno-common禁用。

-ftls-model=<model>

设置用于线程局部变量的默认线程局部存储(TLS)模型。有效值为:" global-dynamic ", " local-dynamic ", "initial-exec "和" local-exec "。默认是“global-dynamic”。可以使用tls_model属性重写默认模型。如果可能的话,编译器将尝试选择一个更有效的模型。

-flto,-flto=full,-flto=thin,-emit-llvm

生成LLVM格式的输出文件,适用于链接时间优化。与-S一起使用时,将生成LLVM中间语言汇编文件,否则将生成LLVM位代码格式的目标文件(取决于阶段选择选项,可以将其传递给链接器)。

-flto的默认值为“ full”,其中LLVM位代码适用于整体式链接时间优化(LTO),其中链接程序将所有此类模块合并为单个组合模块以进行优化。如果使用“ thin”,则会调用ThinLTO编译。

驱动程序选项:

-###

打印(但不要运行)要为此编译运行的命令。

--help

显示可用的选项。

--Qunused-arguments

不要为未使用的驱动程序参数发出任何警告。

-Wa,<args>

将args中以逗号分隔的参数传递给汇编程序。

-Wl,<args>

将args中以逗号分隔的参数传递给链接器。

-Wp,<args>

将args中逗号分隔的参数传递给预处理器。

-Xanalyzer <arg>

将arg传递给静态分析器。

-Xassembler <arg>

将arg传递给汇编程序。

-Xlinker <arg>

将参数传递给链接器。

-Xpreprocessor <arg>

将参数传递给预处理器。

-o <file>

将输出写入文件

-print-file-name=<file>

打印文件的完整库路径。

-print-libgcc-file-name

打印当前使用的编译器运行时库的库路径(“ libgcc.a”或“ libclang_rt.builtins.*.a”)。

-print-prog-name=<name>

打印名称的完整程序路径。

-print-search-dirs

打印用于查找库和程序的路径。

-save-temps

保存中间编译结果。

-save-stats,-save-stats=cwd,-save-stats=obj

将内部代码生成(LLVM)统计数据保存到当前目录(-save-stats/ " -save-stats=cwd ")或输出文件目录(" -save-state=obj ")中的一个文件中。

-integrated-as,-no-integrated-as

分别用于启用和禁用集成汇编程序的使用。默认情况下,集成汇编程序是否打开取决于目标。

-time

为单个命令计时。

-ftime-report

打印每个编译阶段的时序摘要

-v

显示运行和使用详细输出的命令。

诊断选项:

-fshow-column,-fshow-source-location,-fcaret-diagnostics,-fdiagnostics-fixit-info,-fdiagnostics-parseable-fixits,-fdiagnostics-print-source-range-info,-fprint-source-range-info,-fdiagnostics-show-option,-fmessage-length

这些选项控制Clang如何打印诊断信息(错误和警告)。有关更多信息,请参阅Clang用户手册。

预处理选项:

-D<macroname>=<value>

将一个隐式#define添加到预定义缓冲区中,该缓冲区在对源文件进行预处理之前会被读取。

-U<macroname>

将一个隐式#undef添加到预定义缓冲区中,该缓冲区在对源文件进行预处理之前会被读取。

-include <filename>

将一个隐式#include添加到预定义缓冲区中,该缓冲区在对源文件进行预处理之前已被读取。

-I<directory>

将指定目录添加到包含文件的搜索路径。

-F<directory>

将指定的目录添加到框架包含文件的搜索路径中。

-nostdinc

不要在标准系统目录或编译器内置目录中搜索包含文件。

-nostdlibinc

不要在标准系统目录中搜索包含文件,而要搜索编译器内置的包含目录。

-nobuiltininc

不要在clang的内置目录中搜索包含文件。

相关文章

  • 最新kali之clang

    描述: clang-Clang C,C ++和Objective-C编译器。 clang是一个C、c++和Obje...

  • Kali Linux 2018.2 修复mt7601u驱动

    Kali Linux 2018.2 修复mt7601u驱动 最新Kali下载 https://www.kali.o...

  • 最新kali之cadaver

    描述: cadaver-Unix的命令行WebDAV客户端。 cadaver支持文件上载,下载,屏幕显示,名称空间...

  • 最新kali之cewl

    描述: 自定义单词列表生成器。 CeWL(自定义单词列表生成器)是一个ruby应用程序,它会抓取给定的URL,直到...

  • 最新kali之bully

    描述: 是 WPS 穷举法的一个新实现,用 c 语言编写。它在概念上与其他程序相同,因为它利用了 WPS 规范中的...

  • 最新kali之chntpw

    描述: 覆盖Windows系统密码的实用程序。 chntpw是一个实用程序,用于查看一些信息并重置Microsof...

  • 最新kali之blkls

    描述: 列出或输出文件系统数据单元。 blkls打开命名的映像并复制文件系统数据单元(块)。默认情况下,blkls...

  • 最新kali之blkcalc

    描述: 在未分配的磁盘单元编号和常规磁盘单元编号之间进行转换。 blkcalc在两个映像之间创建磁盘单元号映射,一...

  • 最新kali之arping

    描述: arping实用程序将ARP和/或ICMP请求发送到指定的主机,并显示答复。主机可以通过其主机名,其IP地...

  • 最新kali之binwalk

    描述: 用于搜索二进制图像的嵌入文件和可执行代码的工具 选项: 签名扫描选项: -B,--signature 扫描...

网友评论

    本文标题:最新kali之clang

    本文链接:https://www.haomeiwen.com/subject/qgkxxrtx.html