草庐IT

llvm-objcopy

全部标签

[C++] - GCC和LLVM对方法 warning: non-void function does not return a value [-Wreturn-type] 的处理差异

  最近做一个C++开源项目发现一个奇怪问题,通过clang编译链接执行程序每到有一个就崩溃了,gcc下则没有此问题。后来通过调试,发现原因是bool返回的方法是没有return语句!问题是为啥还能通过编译呢?列子如下:#includeclassTest{public:boolyes();};boolTest::yes(){std::cout"yes"std::endl;//returnfalse;};intmain(){Test*t=newTest;boolr=t->yes();std::cout"yes->"std::endl;return0;} 用g++编译得到警告但是通过了,并且执行得

docker容器内安装gcc(trunk 最新版本)以及LLVM

1、docker内部只有wget以及git命令项目需要,得更新docker容器中的gcc和LLVM版本但是由于没有预先安装apt、apt-get以及yum,导致很多安装过程就是鸡生蛋蛋生鸡反应。暂时没有找到合适的解决的方法,如果有大佬知道的话,欢迎留言哈(跪谢😉)目前的解决方案就是绕过常规的shell脚本或者apt命令,直接从github上拉去源码进行本地的编译安装。环境:Win11-WLS2-Ubuntu20.04Docker2、安装gcc(trunk)版本首先在github上克隆下gcc的项目:gitclonehttps://github.com/gcc-mirror/gcc.git接着,

docker容器内安装gcc(trunk 最新版本)以及LLVM

1、docker内部只有wget以及git命令项目需要,得更新docker容器中的gcc和LLVM版本但是由于没有预先安装apt、apt-get以及yum,导致很多安装过程就是鸡生蛋蛋生鸡反应。暂时没有找到合适的解决的方法,如果有大佬知道的话,欢迎留言哈(跪谢😉)目前的解决方案就是绕过常规的shell脚本或者apt命令,直接从github上拉去源码进行本地的编译安装。环境:Win11-WLS2-Ubuntu20.04Docker2、安装gcc(trunk)版本首先在github上克隆下gcc的项目:gitclonehttps://github.com/gcc-mirror/gcc.git接着,

iOS启动优化 —— LLVM编译流程 & Clang插件开发

1.LLVM1.1LLVM概述LLVM是架构编译器的框架系统,以C++编写而成,用于优化任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time)。对开发者保持开放,并兼容已有脚本。目前LLVM已经被苹果IOS开发工具,XilinxVivado,Facebook,Google等各大公司采用。1.2传统编译器设计源码SourceCode+前端Frontend+优化器Optimizer+后端Backend(代码生成器CodeGenerator)+机器码MachineCode,如下图所示前端Fronte

iOS启动优化 —— LLVM编译流程 & Clang插件开发

1.LLVM1.1LLVM概述LLVM是架构编译器的框架系统,以C++编写而成,用于优化任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time)。对开发者保持开放,并兼容已有脚本。目前LLVM已经被苹果IOS开发工具,XilinxVivado,Facebook,Google等各大公司采用。1.2传统编译器设计源码SourceCode+前端Frontend+优化器Optimizer+后端Backend(代码生成器CodeGenerator)+机器码MachineCode,如下图所示前端Fronte

O-MVLL:支持ARM64的基于LLVM的代码混淆模块

O-MVLL介绍O-MVLL的开发灵感来自于另一个著名的基于LLVM的代码混淆项目ollvm,并在其基础上做了创新和改进。O-MVLL的混淆逻辑实现方式也是通过LLVMPass,支持也仅会支持ARM64架构,根据作者所说,这是由于当初的设计选择。此外,作者还使用了pybind11,用户可以使用python脚本来对O-MVLL进行配置,从而灵活的运用作者封装好的各种代码混淆方式。混淆后的可执行文件相比于正常编译的可执行文件来说,抵抗逆向工程的能力增强,但与源代码的功能相同,能够在一定程度上保护源代码和程序,增加逆向工程的分析成本。作者的介绍文档: O-MVLLDocumentation(obfu

O-MVLL:支持ARM64的基于LLVM的代码混淆模块

O-MVLL介绍O-MVLL的开发灵感来自于另一个著名的基于LLVM的代码混淆项目ollvm,并在其基础上做了创新和改进。O-MVLL的混淆逻辑实现方式也是通过LLVMPass,支持也仅会支持ARM64架构,根据作者所说,这是由于当初的设计选择。此外,作者还使用了pybind11,用户可以使用python脚本来对O-MVLL进行配置,从而灵活的运用作者封装好的各种代码混淆方式。混淆后的可执行文件相比于正常编译的可执行文件来说,抵抗逆向工程的能力增强,但与源代码的功能相同,能够在一定程度上保护源代码和程序,增加逆向工程的分析成本。作者的介绍文档: O-MVLLDocumentation(obfu

iOS三方静态库符号冲突的原因以及解决方案

动态库由于二级命名空间,不会符号冲突静态库是.o文件的合集,最终生成macho需要链接,被主app项目符号合并app里的符号会把静态库的符号链接到一起,合并成一张符号表,在链接静态库符号时候,otherlinkerFlags就是对链接静态库的配置deadstrip不被main函数引用,的非导出符号会被干掉,oc默认都是导出符号,加个static就是本地符号了,由于库要暴露一些方法被外界调用,所以导出符号不可以被干掉默认配置otherlinkflags是-noall_loadXlinker-noall_load:deadstrip,默认不加载所有静态库的所有,有一样的类,只加载一个-Xlinke

iOS三方静态库符号冲突的原因以及解决方案

动态库由于二级命名空间,不会符号冲突静态库是.o文件的合集,最终生成macho需要链接,被主app项目符号合并app里的符号会把静态库的符号链接到一起,合并成一张符号表,在链接静态库符号时候,otherlinkerFlags就是对链接静态库的配置deadstrip不被main函数引用,的非导出符号会被干掉,oc默认都是导出符号,加个static就是本地符号了,由于库要暴露一些方法被外界调用,所以导出符号不可以被干掉默认配置otherlinkflags是-noall_loadXlinker-noall_load:deadstrip,默认不加载所有静态库的所有,有一样的类,只加载一个-Xlinke

iOS 编译过程 - LLVM

苹果官方资源opensource相关文献:iOS分析dyld本章节探究:1.了解LLVM架构2.编译流程3.IR与bitcode4.静态链接一、相关概念1.编译器编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码(sourcecode)→预处理器(preprocessor)→编译器(compiler)→目标代码(objectcode)→链接器(Linker)→可执行程序2.传统编译器的设计编译器前端(Frontend)任务是解析源代码。词法分析、语法分析、语义分析、检查源代码是否存在错误、构建抽象语法树AST(Abstr