Kali Linux 逆向工程工具 clang++ 教程

Kali Linux 逆向工程工具 clang++ 教程
    日期:2017年12月20日
    观看: 3,804 °C 次

clang++是一款LLVM编译器;跟linux下的gcc、gc++编译器差不多。

 

用法:

clang [options] <inputs>

clang [选项] <输入>

 

选项:

- ###  打印(但不要运行)为编译运行的命令

--analyze  运行静态分析器

-arcmt-migrate-emit-errors  即使迁移者可以修复它们,也会发出ARC错误

-arcmt-migrate-report-output <value>  plist报告的输出路径

--cuda-device-only  仅进行设备端CUDA编译

--cuda-host-only  仅进行主机端CUDA编译

--cuda-path = <value> CUDA安装路径

-cxx-isystem <directory>  将目录添加到C ++ SYSTEM包含搜索路径

 

-c  只运行预处理,编译和汇编步骤

-dD  除了正常输出外,还在-E模式下打印宏定义

-dependency-dot <value>  将DOT格式化的头依赖关系写入的文件名

-dependency-file <value>  文件名(或 - )将依赖项输出写入

-dM  在-E模式下打印宏定义而不是普通输出

-emit-ast AST文件的源输入

-emit-llvm  对汇编器和目标文件使用LLVM表示法

-E  只运行预处理器

-faltivec  启用AltiVec矢量初始化程序语法

-fansi-escape-codes  使用ANSI转义码进行诊断

-fapple-kext  使用Apple的内核扩展ABI

-fapple-pragma-pack  启用Apple gcc兼容的#pragma pack处理

-fapplication-extension  将代码限制为可用于App Extensions的代码

-fblocks  启用“块”语言功能

-fborland-extensions  接受Borland编译器支持的非标准结构

 

-fbuild-session-file=<file>  使用<file>的上次修改时间作为构建会话时间戳

-fbuild-session-timestamp = <时间以秒为单位的时间>  当前构建会话开始的时间

-fcolor-diagnostics  在诊断中使用颜色

-fcomment-block-commands=<arg>  将<arg>中的每个逗号分隔参数视为文档注释块命令

-fcoverage-mapping  生成覆盖映射以启用代码覆盖率分析

-fcxx-exceptions  启用C ++异常

-fdata-sections  将每个数据放在它自己的部分(仅限ELF)

-fdebug-prefix-map=<value>  在调试信息中重新映射文​​件源路径

-fdebug-types-section  将调试类型放在它们自己的部分(仅限ELF)

-fdeclspec  允许__declspec作为关键字

-fdelayed-template-parsing  在翻译单元的末尾解析模板化的函数定义

-fdiagnostics-parseable-fixits  打印修复 - 它在机器可解析的形式

-fdiagnostics-print-source-range-info 打印源范围以数字形式跨越

-fdiagnostics-show-note-include-stack 显示包括诊断说明的堆栈

-fdiagnostics-show-option  用可映射的诊断程序打印选项名称

-fdiagnostics-show-template-tree 打印不同模板的模板比较树

-fdollars-in-identifiers  在标识符中允许“$”

 

-femit-all-decls  即使未使用,也会发出所有声明

-femulated-tls  使用emutls函数来访问thread_local变量

-fexceptions  启用对异常处理的支持

-ffast-math  启用*前端*的“快速数学”模式。这对优化没有任何影响,但提供了一个预处理宏__FAST_MATH__和GCC的-ffast-math标志一样

-ffixed-r9  保留r9寄存器(仅限ARM)

-ffixed-x18  保留x18寄存器(仅限AArch64)

-ffp-contract = <value>  表单融合的FP操作(例如FMA):fast(everywhere)|上(根据FP_CONTRACT编译指示,默认)|关(永远不会熔断)

-ffreestanding  断言汇编发生在独立的环境

-ffunction-sections  将每个函数放在它自己的部分(仅ELF)

-fgnu-keywords  允许使用GNU扩展关键字,而不考虑语言标准

-fgnu-runtime  生成与标准GNU Objective-C运行时兼容的输出

-fgnu89-inline  使用gnu89内联语义

-fimplicit-module-maps  隐式搜索文件系统的模块映射文件。

-finstrument-functions  生成对仪器功能进入和退出的调用

-fintegrated-as  启用集成汇编器

-flto = <value>  将LTO模式设置为“完整”或“细化”

-flto  在“全”模式下启用LTO

-fmath-errno  要求数学函数通过设置errno来指示错误

 

-fmax-type-align=<value>  指定在缺乏明确对齐的指针上执行的最大对齐

-fmodule-file = <file>  加载这个预编译的模块文件

-fmodule-map-file=<file> 加载这个模块映射文件

-fmodule-name = <name>  指定要建立的模块的名称

-fmodules-cache-path=<directory>  指定模块缓存路径

-fmodules-decluse  要求声明模块内使用的模块

-fmodules-ignore-macro=<value>  在构建和加载模块时,忽略给定宏的定义

-fmodules-prune-after=<seconds> 指定之后的时间间隔(以秒为单位),模块文件将被视为未使用

-fmodules-prune-interval=<seconds>  指定尝试修剪模块缓存的时间间隔(以秒为单位)

-fmodules-search-all  搜索甚至非导入的模块来解析引用

-fmodules-strict-decluse  像-fmodules-decluse,但要求所有头文件在模块中

-fmodules-user-build-path <directory>  指定模块用户构建路径

-fmodules-validate-once-per-build-session    如果在此构建会话期间模块已成功验证或加载,则不要验证模块的输入文件

-fmodules-validate-system-headers  验证加载模块时模块依赖的系统头

-fmodules  启用“模块”语言功能

-fms-compatibility-version=<value>  表示要在_MSC_VER中报告的Microsoft编译器版本号的点分隔值(0 =不定义它(默认值))

-fms-compatibility 启用完整的Microsoft Visual C ++兼容性

-fms-extensions  接受Microsoft编译器支持的一些非标准结构

-fmsc-version = <value>  要在_MSC_VER中报告的Microsoft编译器版本号(0 =不定义它(默认值))

-fno-access-control  禁用C ++访问控制

-fno-assume-sane-operator-new  不要认为C ++的全局运算符new不能混淆任何指针

 

-fno-autolink  为自动库链接禁止生成链接器指令

-fno-builtin- <value>  禁用特定函数的隐式内建知识

-fno-builtin  禁用隐含的内建知识的功能

-fno-common  像常规定义一样编译通用全局变量

-fno-constant-cfstrings  禁止创建CodeFoundation类型的常量字符串

-fno-coverage-mapping  禁用代码覆盖率分析

-fno-declspec  __declspec作为关键字

-fno-diagnostics-fixit-info 不要在诊断中包含fixit信息

-fno-dollars-in-identifiers  在标识符中不允许使用“$”

-fno-elide-constructors  禁用C ++拷贝构造函数elision

-fno-elide-type  在打印诊断信息时不要忽略类型

-fno-gnu-inline-asm  禁用GNU风格的内联asm

-fno-integrated-as  禁用集成汇编器

-fno-lax-vector-conversions  禁止具有不同数量的元素或不同的元素类型的向量之间的隐式转换

-fno -lto  禁用LTO模式(默认)

-fno-math-builtin  禁用数学函数的隐含的内建知识

-fno-merge-all-constants  不允许合并常量

-fno-objc-infer-related-result-type 不要推断基于方法族的Objective-C相关结果类型

-fno-operator-names  不要将C ++运算符名称关键字视为运算符的同义词

-fno-profile-instr-generate  禁用生成配置文件。

-fno-profile-instr-use  禁止使用检测数据进行配置文件引导优化

-fno-reroll-loops  关闭循环reroller

-fno-rtti  禁止生成rtti信息

-fno-sanitize-blacklist  不要使用黑名单文件进行消毒

-fno-sanitize-cfi-cross-dso  禁用交叉DSO调用的控制流完整性(CFI)检查。

-fno-sanitize-coverage=<value>   禁用卫生洗涤剂覆盖仪器的指定功能

-fno-sanitize-memory-track-origins  在MemorySanitizer中禁用原点跟踪

-fno-sanitize-recover=<value> 禁用指定消毒剂的恢复

-fno-sanitize-trap=<value>  禁用指定消毒剂的捕获

-fno-short-wchar  强制wchar_t是一个无符号整数

-fno-show-column  不要在诊断中包含列号

-fno-show-source-location  不要在诊断中包含源位置信息

 

-fno-signed-char  Char是无符号的

-fno-signed-zeros  允许忽略浮点数零的符号的优化

-fno-spell-checking  禁用拼写检查

-fno-stack-protector  禁止使用堆栈保护器

-fno-standalone-debug  限制生成的调试信息以减少调试二进制文件的大小

-fno-threadsafe-statics  不要发出代码来使本地静态线程的初始化安全

-fno-trigraphs  不处理三字符序列

-fno-unroll-loops  关闭循环展开程序

-fno-use-cxa-atexit  不要使用__cxa_atexit来调用析构函数

-fno-use-init-array  不要使用.init_array而不是.ctors

-fobjc-arc-exceptions  在合成-fobjc-arc中的保留和释放时使用EH安全代码

-fobjc-arc  合成保留并释放对Objective-C指针的调用

-fobjc-exceptions  启用Objective-C异常

-fobjc-gc-only  将GC专门用于Objective-C相关的内存管理

-fobjc-gc  启用Objective-C垃圾回收

-fobjc-runtime = <value>  指定目标Objective-C运行时类型和版本

-fobjc-weak  在Objective-C中启用ARC风格的弱引用

-fpack-struct = <value>  指定默认的最大结构打包对齐

-fpascal-strings  识别并构造Pascal风格的字符串文字

-fpcc-struct-return  重写默认的ABI以返回堆栈中的所有结构

-fplugin = <dsopath>  加载指定的插件(动态共享对象)

 

-fprofile-generate=<directory>  生成检测代码以将执行计数收集到<directory> /default.profraw(由LLVM_PROFILE_FILE env var覆盖)

-fprofile-instr-generate=<file>  生成检测代码以将执行计数收集到<file>中(由LLVM_PROFILE_FILE env var覆盖)

-fprofile-instr-generate 生成检测代码以将执行计数收集到default.profraw文件中(由'='选项或LLVM_PROFILE_FILE env var覆盖)

-fprofile-instr-use=<value>  使用仪器数据进行配置文件指导优化

-fprofile-sample-use=<value>  启用基于样本的配置文件指导优化

-fprofile-use=<pathname>  使用仪器数据进行配置文件指导优化。如果pathname是一个目录,它从<pathname> /default.profdata中读取。否则,它从文件<路径名>中读取。

-freciprocal-math 允许分工操作重新关联

-freg-struct-return  重写默认的ABI以返回寄存器中的小结构

-freroll-loops  打开循环reroller

-fsanitize-address-field-padding=<value>  AddressSanitizer的字段填充级别

-fsanitize-blacklist=<value>  杀菌剂的黑名单文件的路径

-fsanitize-cfi-cross-dso   启用交叉DSO调用的控制流完整性(CFI)检查。

-fsanitize-coverage=<value>  指定卫生洗护者的覆盖范围的类型

-fsanitize-memory-track-origins=<value>  在MemorySanitizer中启用原点跟踪

-fsanitize-memory-track-origins  在MemorySanitizer中启用原点跟踪

-fsanitize-memory-use-after-dtor 在MemorySanitizer中启用破坏后检测

-fsanitize-recover=<value>  启用指定消毒剂的恢复

-fsanitize-trap=<value>  为指定的卫生处理程序启用陷阱

-fsanitize = <check>  打开运行时检查各种形式的未定义或可疑行为。查看用户手册查看可用的检查

-fshort-enums  仅为声明的可能值范围分配一个枚举类型所需的字节数

-fshort-wchar  强制wchar_t是一个简短的unsigned int

 

-fshow-overloads=<value>  超载解决失败时显示哪些超载候选:best | all;默认为全部

-fsized-deallocation  启用C ++ 14大小的全局释放函数

-fslp-vectorize-aggressive  启用BB矢量化过程

-fslp-vectorize  启用超级字符级并行矢量化过程

-fstack-protector-all  强制所有功能使用堆栈保护器

-fstack-protector-strong  使用强大的启发式将堆栈保护器应用于函数

-fstack-protector  启用堆栈保护器,以实现可能易受堆栈粉碎的功能

-fstandalone-debug  为程序使用的所有类型发出完整的调试信息

-fstrict-enums  根据枚举值范围的严格定义启用优化

-fstrict-vtable-pointers  根据覆盖多态C ++对象的严格规则启用优化

-fthinlto-index=<value> 使用提供的函数摘要索引执行ThinLTO导入

-ftrap-function = <value>  调用指定的函数而不是陷阱指令

-ftrapv-handler=<function name>    指定要在溢出时调用的函数

-ftrapv  整数溢出陷阱

-ftrigraphs  处理三元组序列

-funique-section-names  对文本和数据部分使用唯一名称(仅限ELF)

-funroll-loops  打开循环展开程序

-fuse-init-array  使用.init_array而不是.ctors

-fveclib=<value> 使用给定的矢量函数库

-fvectorize  启用循环矢量化遍

-fvisibility-inlines-hidden   默认提供内联C ++成员函数的默认可见性

 

-fvisibility-ms-compat  默认情况下,提供全局类型的“默认”可见性和全局函数和变量“隐藏”可见性

-fvisibility = <value>  设置所有全局声明的默认符号可见性

-fwrapv  将有符号整数溢出视为二进制补码

-fwritable-strings  将字符串文字存储为可写数据

-fzvector  启用System z矢量语言扩展

-F <value> 将目录添加到框架包含搜索路径

--gcc-toolchain = <value> 在给定目录下使用gcc工具链

-gcodeview  生成CodeView调试信息

-gdwarf-2  用矮版本2生成源代码级调试信息

-gdwarf-3  使用矮版本3生成源代码级调试信息

-gdwarf-4  使用矮版本4生成源代码级调试信息

-gdwarf-5  使用矮版本5生成源代码级调试信息

-gline-tables-only  仅发出调试行号码表

-gmodules  使用外部引用生成调试信息到叮当声模块或预编译头

-g  生成源代码级调试信息

-help  显示可用选项

-H 显示标题包含和嵌套深度

-idirafter <value> 将目录添加到AFTER包含搜索路径

-iframework <value> 将目录添加到SYSTEM框架搜索路径

-imacros <file>  在解析之前包含来自文件的宏

-include-pch <file>  包含预编译头文件

-include <file>  在解析之前包含文件

-index-header-map  使下一个包含的目录(-I或-F)成为索引器标题映射

-iprefix <dir>  设置-iwithprefix / -iwithprefixbefore前缀

-iquote <directory>  将目录添加到QUOTE包含搜索路径

-isysroot <dir>  设置系统根目录(通常为/)

-isystem <directory>  将目录添加到SYSTEM包含搜索路径

-ivfsoverlay <value>  将文件描述的虚拟文件系统覆盖在真实文件系统上

-iwithprefixbefore <dir>  设置目录以包含带前缀的搜索路径

 

-iwithprefix <dir>  将目录设置为SYSTEM包含带前缀的搜索路径

-iwithsysroot <directory>  将目录添加到SYSTEM包含搜索路径,绝对路径相对于-isysroot

-I <value>  添加目录以包含搜索路径

-mabicalls  启用SVR4风格的与位置无关的代码(仅限Mips)

-mcrc  允许使用CRC指令(仅限ARM)

-MD  编写一个包含用户和系统标题的depfile

-meabi <value>  设置EABI类型,例如4,5或gnu(默认取决于三重)

-mfix-cortex-a53-835769  解决方法Cortex-A53纠错835769(仅适用于AArch64)

-mfp32  使用32位浮点寄存器(仅限MIPS)

-mfp64  使用64位浮点寄存器(仅限MIPS)

-MF <file>  将-MMD,-MD,-MM或-M的depfile输出写入<file>

-mgeneral-regs-only  生成仅使用通用寄存器的代码(仅限AArch64)

-mglobal-merge  启用全局合并

-MG  将缺少的标题添加到depfile

-mhvx-double  启用六角形双矢量扩展

-mhvx  启用六角形向量扩展

--migrate 运行迁移器

-mincremental-linker-compatible  (integrated-as)发出可用于增量链接器的目标文件

-mios-version-min=<value>  设置iOS部署目标

-mllvm <value>  转发到LLVM的选项处理的其他参数

-mlong-calls  生成一个间接跳转来启用跳跃超过64M

-mmacosx-version-min=<value>   设置Mac OS X部署目标

-MMD  编写一个包含用户标题的depfile

-mms-bitfields  将默认结构布局设置为与Microsoft编译器标准兼容

-mmsa  启用MSA ASE(仅限MIPS)

-MM  和-MMD一样,但也暗含-E,并默认写入stdout

-mno-abicalls  禁用SVR4风格的与位置无关的代码(仅限Mips)

-mno-fix-cortex-a53-835769  不要解决方法Cortex-A53勘误表835769(仅适用于AArch64)

-mno-global-merge  禁用全局合并

-mno-hvx-double  禁用六角形双向量扩展

-mno-hvx  禁用六角形矢量扩展

-mno-implicit-float  不生成隐式浮点指令

-mno-incremental-linker-compatible  (integrated-as)发出不能与增量链接器一起使用的目标文件

-mno-long-calls  恢复不生成长时间调用的默认行为

-mno-movt  不允许使用movt / movw对(仅适用于ARM)

-mno-ms-bitfields  不要将默认结构布局设置为与Microsoft编译器标准兼容

-mno-msa  禁用MSA ASE(仅限MIPS)

-mno-restrict-it  允许为ARMv8生成不推荐的IT块。 ARMv8 Thumb模式默认关闭

-mno-unaligned-access  强制所有内存访问对齐(仅AArch32 / AArch64)

-mnocrc  不允许使用CRC指令(仅限ARM)

-module-dependency-dir <value>  目录转储模块依赖关系

 

-momit-leaf-frame-pointer   忽略叶函数的帧指针设置

-MP  为每个依赖项创建假目标(除了主文件)

-mqdsp6-compat  启用hexagon-qdsp6向后兼容性

-MQ <value>  指定在depfile中引用的主文件输出的名称

-mrelax-all(integrated-as)  放松所有机器说明

-mrestrict-it  不允许为ARMv8生成已弃用的IT块。它默认为ARMv8 Thumb模式。

-mrtd  使StdCall调用约定成为默认值

-msoft-float  使用软件浮点

-mstack-alignment=<value>   设置堆栈对齐

-mstack-probe-size=<value>  设置堆栈探针大小

-mstackrealign Force  在进入每个函数时重新对齐堆栈

-mthread-model <value>  要使用的线程模型,例如posix,单(默认为posix)

-MT <value>  在depfile中指定主文件输出的名称

-munaligned-access  允许内存访问未对齐(仅限AArch32 / AArch64)

-MV  使用NMake / Jom格式作为depfile

-M  像-MD,但是也暗示了-E,并且默认写入到标准输出

--no-system-header-prefix=<prefix>  将所有以<prefix>开头的#include路径视为不包含系统标题。

-nobuiltininc  禁用内建的#include目录

-nostdinc ++  禁用C ++标准库的标准#include目录

-ObjC ++  将源输入文件视为Objective-C ++输入

-objcmt-atomic-property  使迁移到“原子”属性

-objcmt-migrate-all  启用迁移到现代的ObjC

-objcmt-migrate-annotation  启用迁移到属性和方法注释

-objcmt-migrate-designated-init  启用迁移以推断初始化方法的NS_DESIGNATED_INITIALIZER

-objcmt-migrate-instancetype   启用迁移来推断方法结果类型的实例类型

-objcmt-migrate-literals  启用迁移到现代的ObjC文字

-objcmt-migrate-ns-macros  启用迁移到NS_ENUM / NS_OPTIONS宏

-objcmt-migrate-property-dot-synta    启用setter / getter消息到属性点语法的迁移

-objcmt-migrate-property  启用迁移到现代ObjC属性

-objcmt-migrate-protocol-conformance   启用迁移以在类上添加协议一致性

-objcmt-migrate-readonly-property   启用迁移到现代ObjC只读属性

-objcmt-migrate-readwrite-property   启用迁移到现代ObjC readwrite属性

-objcmt-migrate-subscripting    启用迁移到现代ObjC下标

-objcmt-ns-nonatomic-iosonly  启用迁移以使用NS_NONATOMIC_IOSONLY宏来设置属性的“原子”属性

-objcmt-returns-innerpointer-property  启用迁移以使用NS_RETURNS_INNER_POINTER注释属性

-objcmt-whitelist-dir-path=<value> 只修改提供的目录路径中包含的文件名

-ObjC 将源输入文件视为Objective-C输入

 

-omptargets = <value>  指定逗号分隔的三元组列表OpenMP卸载要支持的目标

-o <file> 将输出写入<file>

-pg 启用mcount工具

-pipe  尽可能在命令之间使用管道

-print-file-name = <file>  打印<file>的完整库路径

-print-ivar-layout  启用Objective-C Ivar布局位图打印跟踪

-print-libgcc-file-name  打印“libgcc.a”的库路径

-print-prog-name = <name>  打印<name>的完整程序路径

-print-search-dirs  打印用于查找库和程序的路径

-pthread  在生成的代码中支持POSIX线程

-P  在-E模式下禁用线标记输出

-Qunused-arguments  不要为未使用的驱动程序参数发出警告

-relocatable-pch  是否构建可重定位的预编译头

-rewrite-legacy-objc  将遗留的Objective-C源代码重写为C ++

-rewrite-objc  将Objective-C源码重写为C ++

-Rpass-analysis = <value>  从名称与给定的POSIX正则表达式匹配的优化过程中报告转换分析

-Rpass-missed = <value>  通过名称与给定的POSIX正则表达式匹配的优化过程报告错过的转换

-Rpass = <value>  通过名称与给定的POSIX正则表达式匹配的优化过程执行报告转换

-R<remark>  启用指定的注释

-save-temps = <value>  保存中间编译结果。

-save-temps  保存中间编译结果

-serialize-diagnostics <value>  将编译器诊断信息序列化为一个文件

-std = <value>  要编译的语言标准

-stdlib = <value>  要使用的C ++标准库

--system-header-prefix=<prefix>    将所有以<prefix>开头的#include路径视为包含系统标题。

-S  只运行预处理和编译步骤

--target = <value>  生成给定目标的代码

-time  时间个别命令

-traditional-cpp 启用一些传统的CPP仿真

-trigraphs  处理三元组序列

-undef undef  所有系统定义

--verify-debug-info  验证调试输出的二进制表示

-verify-pch  加载并确认预编译的头文件不是陈旧的

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

-Wa,<arg>  将<arg>中逗号分隔的参数传递给汇编器

-Wl,<arg>  将<arg>中的逗号分隔参数传递给链接器

-working-directory <value>  解析相对于指定目录的文件路径

-Wp,<arg>  将<arg>中的逗号分隔参数传递给预处理器

-W <warning>  启用指定的警告

-w  取消所有警告

-Xanalyzer <arg>  将<arg>传递给静态分析器

-Xassembler <arg>  将<arg>传递给汇编器

-Xclang <arg>  将<arg>传递给clang编译器

-Xlinker <arg>  将<arg>传递给链接器

-Xpreprocessor <arg>  将<arg>传递给预处理器

-x <language>  将随后的输入文件视为键入<language>

-z <arg>  将-z <arg>传递给链接器

 

clang++效果与评价:

它是clang的另一个升级版本,使用方法其实都是一样的。同理于c语言和c++;

clang就好比gcc编译器;

clang++就好比gc++编译器;

clang

 

在线视频:

优酷:http://v.youku.com/v_show/id_XMzI1MDMwMjcyOA==.html

腾讯:https://v.qq.com/x/page/t0521hmbark.html

爱奇艺:http://www.iqiyi.com/w_19rutgif5x.html

乐视:

付杰
  • ¥ 298.0元
  • 市场价:498.0元
  • ¥ 999元
  • 市场价:4999元
  • ¥ 598.0元
  • 市场价:2980.0元
  • ¥ 45.0元
  • 市场价:45.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: