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

对于iOS,__attribute__((构造函数))编译成什么?如何在手写asm中做到这一点?

对于iOS,attribute((构造函数))编译成的是Objective-C的构造函数。在手写asm中实现这一点,可以通过在汇编代码中调用objc_msgSend函数来调用Objective-C的构造函数。具体步骤如下:

  1. 首先,需要在Objective-C类的声明中使用__attribute__((constructor))将构造函数标记为构造函数属性。例如:
代码语言:txt
复制
@interface MyClass : NSObject
@end

@implementation MyClass

__attribute__((constructor))
static void initialize() {
    // 构造函数的代码逻辑
}

@end
  1. 然后,在手写的汇编代码中,可以使用objc_msgSend函数来调用构造函数。objc_msgSend函数是Objective-C运行时库中的函数,用于发送消息给对象。在汇编代码中,可以使用mov指令将构造函数的选择器(selector)加载到寄存器中,然后使用call指令调用objc_msgSend函数。例如:
代码语言:txt
复制
mov r0, #selector(initialize)
ldr r1, =objc_msgSend
blx r1

以上代码将构造函数的选择器加载到r0寄存器中,将objc_msgSend函数的地址加载到r1寄存器中,然后使用blx指令调用objc_msgSend函数。

需要注意的是,以上代码仅为示例,实际使用时需要根据具体情况进行调整。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云移动开发平台:https://cloud.tencent.com/product/mpp
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云音视频处理(VOD):https://cloud.tencent.com/product/vod
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse

以上链接提供了腾讯云相关产品的详细介绍和使用指南,可以根据具体需求选择适合的产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

不重启JVM,替换掉已经加载的类,偷天换日?

Java的对象行为(方法、函数)是存储方法区的。 “方法区的数据从哪来?” “方法区的数据是类加载时从class文件中提取出来的。” “class文件从哪来?”...但是对于没有(或者拿不到,或者不方便修改)源码的文件我们应该怎么办呢?其实对于JVM来说,不管是Java也好,Scala也好,任何一种符合JVM规范的语言的源代码,都可以编译成class文件。...其中最著名的框架应该就是ASM了,cglib、Spring等框架对于字节码的操作就建立ASM之上。...到这里,我们知道了用ASM框架直接操作class文件,类中加一段打印日志的代码,然后retransform就可以了。 BTrace 截止到目前,我们都是停留在理论描述的层面。那么如何进行实现呢?...如果JVM不在本地,远程呢? 如果连ASM都不会用呢?能不能更通用一些,更“傻瓜”一些。 幸运的是,因为有BTrace的存在,我们不必自己写一套这样的工具了。什么是BTrace呢?

39010
  • iOS_ __attribute__

    :声明未非内敛函数 always_inline:声明为内敛函数,不会被编译成函数调用,而是将实现直接 copy 到调用位置 deprecated // 带提示文案 __attribute((deprecated...__ ((packed)); }; constructor、destructor // 确保此函数 main 函数被调用之前调用, +load 之后 main 之前执行 __attribute_...); } visibility visibility 类型有 4 种: default:默认可见性的对象与函数可以直接在其他模块引用,包括动态链接库 ,它属于一个正常,完整的外部连接。...比如某个类构造的时候不想直接通过init来初始化,只能通过特定的初始化方法()比如单例,就可以将init方法标记为unavailable。...函数重载C是通过overloadable属性引入的。例如:你可以重载tgsin函数,写出sin函数入参不同时的不同版本。

    26630

    GCC初始化函数是怎样被处理的?

    本文译至: http://gcc.gnu.org/onlinedocs/gccint/Initialization.html 如我们所知,GCC通过给代码追加__attribute__((constructor...简单的说,就是最常常的情况下,初始函数会被追加到.ctor section,.init会调用相应的函数处理这些初始函数。终止情况类似。...每一个定义一个初始函数的目标文件构造体的section里放置一个word来指向初始函数。链接器累积全部的word到一个连续的‘.ctors’ section。终止函数也按类似的方式处理。...假设init section不能使用,当GCC编译不论什么名为main的函数时(更精确点,不论什么被expand_main_function指定为程序入口点的函数),它在插入一个函数调用__main做为函数...__main 函数 libgcc2.c 里被定义并运行全局的构造体。 不支持随意section的文件格式,相同也有两种变体。

    53110

    Android APM 系列一(原理篇)

    项目中的应用,以及如何开发一个 Gradle Plugin; 实现篇-Javassist/ASM:Javassist、ASM 等字节码操作库的介绍,以及如何使用它们在编译时插入代码来采集各项性能数据;...这也是我为什么会将 APM 作为一个系列来介绍的原因,同时这也能保证后面介绍 APM 的时候能够深入到实现细节,避免泛泛而谈。 二....那么我们到底如何介入打包过程, class 转换为 dex 文件的时候实现对字节码的修改呢?...对于字节码的修改,比较常用的框架有 Javassist 和 ASM。...比如如何插桩采集到页面帧率、流量、耗电量等等。这些具体细节我们放到后面一一介绍。至于为什么放到后面……因为很多东西自己没做过我也不知道啊……? ----

    6.1K51

    Android 性能监控系列一(原理篇)

    项目中的应用,以及如何开发一个 Gradle Plugin; 实现篇-Javassist/ASM:Javassist、ASM 等字节码操作库的介绍,以及如何使用它们在编译时插入代码来采集各项性能数据;...这也是我为什么会将 APM 作为一个系列来介绍的原因,同时这也能保证后面介绍 APM 的时候能够深入到实现细节,避免泛泛而谈。 二....那么我们到底如何介入打包过程, class 转换为 dex 文件的时候实现对字节码的修改呢?...对于字节码的修改,比较常用的框架有 Javassist 和 ASM。...至于为什么放到后面……因为很多东西自己没做过我也不知道啊…… 如果你喜欢我的文章,就关注下我的公众号 BaronTalk 、 知乎专栏 或者 GitHub 上添个 Star 吧!

    1.7K70

    【编译器玄学研究报告】第三期——“-O0” 就能逃出优化的魔爪么?

    让我们来看一个来自Arm Compiler 5的案例吧: 【正文】 ---- 嵌入式系统通过属性weak(实际使用的时候很可能用gcc的兼容写法通过 __attribute__((weak)) 来给函数附加这一属性...到目前为止一切看起来也都还没什么问题。...插入自己的代码就没那么容易了(仍然可以通过特殊手段做到)。...第二步,由于编译器完全掌握用户的函数间调用关系,它完全知道哪个函数是叶子函数还是普通函数,因此它可以一个函数确实要调用别的函数时,先把LR压栈,等从目标函数返回后,再从栈恢复原来LR的值。...且不说中断处理程序的默认函数都是死循环,用户可能无脑拷贝,实际应用可能存在以下的合理情形: 用默认的函数构造“陷阱”,也就是说,正常应用情况下,用户应该是必须要实现一个自己的版本;一旦用户漏了,

    1.6K41

    关于protobuf近期版本(v20v3.20+)和 gRPC v1.54版本某些编译环境下的一些链接和编译问题

    然而这两个版本Linux的ELF ABI和MacOS的Macho ABI下都出现了一些符号未定义的问题(当然也包含Android和iOS)。...无论什么情况都有 ~InternalMetadata() 了,但是C++编译器自动内联一说,。...触发条件比较多: 需要编译成动态库 默认符号隐藏(Windows默认隐藏,Linux默认可见) 使用 dllexport_decl= 来设置导出符号 Windows个,每一个dll和exec都有自己的符号表和堆管理...有一些更严谨更安全防止符号冲突的方式是吧Linux下符号也通过 __attribute__((visibility("hidden"))) 设为默认隐藏,然后对于要导出的符号设置为 __attribute... protobuf 生成的代码,由于 .pb.cc 存在全局变量,我们也不能允许同一个全局变量多个动态库,否则会重复注册和执行构造析构函数

    1.3K20

    不重启JVM,替换掉已经加载的类,偷天换日?

    Java的对象行为(方法、函数)是存储方法区的。 “方法区的数据从哪来?” “方法区的数据是类加载时从class文件中提取出来的。” “class文件从哪来?”...但是对于没有(或者拿不到,或者不方便修改)源码的文件我们应该怎么办呢?其实对于JVM来说,不管是Java也好,Scala也好,任何一种符合JVM规范的语言的源代码,都可以编译成class文件。...其中最著名的框架应该就是ASM了,cglib、Spring等框架对于字节码的操作就建立ASM之上。...到这里,我们知道了用ASM框架直接操作class文件,类中加一段打印日志的代码,然后retransform就可以了。 BTrace 截止到目前,我们都是停留在理论描述的层面。那么如何进行实现呢?...2、如果JVM不在本地,远程呢? 3、如果连ASM都不会用呢?能不能更通用一些,更“傻瓜”一些。 幸运的是,因为有BTrace的存在,我们不必自己写一套这样的工具了。什么是BTrace呢?

    1K10

    把 WebAssembly 用于提升速度和代码重用

    对于名称带有 assembly 的语言,WebAssembly 是低级的。... JS 方言中,TypeScript 显式数据类型方面脱颖而出,这使得这种语言对于编译成 WebAssembly 很有吸引力。(下面的代码示例说明了这一点。)...我 C 和 TypeScript 的代码例子计算了冰雹序列的长度。 Collatz 猜想是一个冰雹序列会收敛到 1,无论初始值 N> 0 恰好是什么。...Emscription工具链还与 JS glue(asm.js)一起创建一个HTML页面,该页面介于 DOM 和计算 hstone 函数的 WebAssembly 模块之间。...要突出显示如何加载 WebAssembly 模块的详细信息,下面的手写 HTML 文件(我的网站上找到(http://condor.depaul.edu/mkalin)的 index.html)包含以下脚本

    97940

    骚操作 | 不重启 JVM,替换掉已经加载的类,偷天换日?

    Java的对象行为(方法、函数)是存储方法区的。 “方法区的数据从哪来?” “方法区的数据是类加载时从class文件中提取出来的。” “class文件从哪来?”...但是对于没有(或者拿不到,或者不方便修改)源码的文件我们应该怎么办呢?其实对于JVM来说,不管是Java也好,Scala也好,任何一种符合JVM规范的语言的源代码,都可以编译成class文件。...其中最著名的框架应该就是ASM了,cglib、Spring等框架对于字节码的操作就建立ASM之上。...到这里,我们知道了用ASM框架直接操作class文件,类中加一段打印日志的代码,然后retransform就可以了。 BTrace 截止到目前,我们都是停留在理论描述的层面。那么如何进行实现呢?...如果JVM不在本地,远程呢? 如果连ASM都不会用呢?能不能更通用一些,更“傻瓜”一些。 幸运的是,因为有BTrace的存在,我们不必自己写一套这样的工具了。什么是BTrace呢?

    66230

    什么将会替代 JavaScript 呢?

    对于许多程序员来说,JavaScript 就是后者的一个例子,每个前端开发人员都需要学习和理解这种语言,但是却没有人喜欢它。 十年前,JavaScript 还没有统治世界的迹象。...如果你团队不使用相同的语言开发,你又将如何与团队合作呢? 如同许多开发案例一样,一个工具的好坏取决于它背后的社区。...他们那时正在寻找一种浏览器运行高性能代码的方法。但与插件不同的是,asm.js 并没有试图与浏览器为邻。相反,它的目标是直达 JavaScript 虚拟机。...但是,意识到这一点的 web 浏览器也可以应用其他方法优化,从而大大提高性能。换句话说,asm.js 遵循了黄金法则 —— 不要破坏 web,同时还提供了未来改进的方法。...如果你想知道 WASM 写起来是什么样的,那么你可以想象一下你有这样一个 C 函数: int factorial(int n) { if (n == 0) return 1; else

    1.5K20

    为超越JVM而生?深入理解Kotlin Native的梦想与可能

    由此可见,这部分编译逻辑对于 Kotlin 的所有目标平台都是通用的。 2.2 后端编译与 LLVM IR Kotlin Native 编译器会将 Kotlin IR 编译成 LLVM IR。...对于可以被实例化的类型,其 vtable 包含以下内容: 父类的 vtable,如果当前类型覆写了父类的函数,将父类对应的函数替换成覆写的函数。 当前类可以被覆写的函数。...C 语言标准没有规定字符串采用什么编码,字符串字面量的编码取决于代码文件的字符编码,字符串的编码则取决于它的来源。...事实上,Objective-C 和 Swift 的类扩展时可以实现协议,这一点 Kotlin 无法做到。...这是一家最懂开发者的公司,他们知道开发者喜欢什么样的编程语言,也知道如何设计好的编程语言。Kotlin 优秀的语法设计已经足以证明这一点

    1K11

    C语言进阶小技巧,弱符号和弱引用

    用于 C,C++,Objective-C 修饰变量、函数、参数、方法、类等。 合理使用 __attribute__什么好处?...这个其实是是有所偏颇的,GNU C对标准C语言进行了扩展,GCC对于符号(在编译时,变量和函数都被抽象成符号)而言,存在着强符号和弱符号之分。...注意这里是声明而不是定义,既然是引用,那么就是使用其他模块定义的实体,对于函数而言,我们可以使用这样的写法: __attribute__((weakref)) void func(void); 然后函数调用...我们在库可以使用弱符号和弱引用机制,这样对于一个弱符号函数而言,用户可以自定义扩展功能的函数来覆盖这个弱符号函数。...往期推荐 干货 | 详解 stm32 在线 IAP 升级 如何搭建一台永久运行的个人服务器? 汇总了89个嵌入式相关的基本概念!你懂几个? 为什么永远不会有语言取代 C / C++ ?

    92320

    iOS 编译器__Attribute__的入门指南

    所以这对于iOS来说这是一个什么东西? 这是一个可以给对象或函数声明特性的编译器指令,目的是让编译器做更多的错误检查和优化。...引用:Attributes 二、使用方法 以下列举一下要怎么使用,大概的场景是什么。.../* OC可以是用 #param mark - xxxx swift使用 #MARK - xxxxx */ // 父类某个被重写的方法上添加这个,编译器会提醒子类的重写方法调用...// constructor/destructor,构造器和析构器,可以main函数之前和之后调用函数 // constructor 的调用会比load方法晚一点 // destructor 会调用在...,deprecated=10.6,obsoleted=10.7))); // 这个参数列表有没有感觉像 @#available() 2、C 重载一个C++函数 // C重载一个C++函数,C函数重载是使用可重载属性引入的

    95520

    被误解的 MVC 和被神化的 MVVM(一)

    现在,MVC 已经成为主流的客户端编程框架, iOS 开发,系统为我们实现好了公共的视图类:UIView,和控制器类:UIViewController。...但是,我们却很难做到这一点,因为还是有很多逻辑我们不知道写在哪里,于是就都写到了 Controller 中了,那我们接下来就看看其它逻辑应该写在哪里。 如何对 ViewController 瘦身?...我个人对于逻辑的抽取,有以下总结。 1.将网络请求抽象到单独的类手写代码,直接就在 Controller 里面用 AFNetworking 发一个请求,请求的完数据直接就传递给 View。...2.将界面的拼装抽象到专门的类手写代码,喜欢 Controller 把一个个 UILabel ,UIButton,UITextField 往 self.view 上用 addSubView 方法放...而另外构造 ViewModel 的过程,我们就可以移动到另外的类中了。 具体实践,我建议大家专门创建构造 ViewModel 工厂类,参见 工厂模式。

    34720

    Javascript: 世纪机器语言?

    我写了「颠覆者的游戏 - 程序语言」和「elixir - 灵丹妙药?or 徒有其名?」后,就有同学就让我讲讲javascript。对于这门让人又爱又恨的语言,真要讲,我都不知道怎么开头了。...不像backend那么多千奇百怪的选择,frontend,二十年来大浪淘沙,有且只有一门能在任何浏览器运行的语言:javascript。...作为移动领域的头牌,apple对javascript也是又爱又恨 —— 爱其繁荣的生态圈,快速产品化的能力 [4],恨其一次编写到处运行的优势,无奈这股浪潮已经势不可当,于是iOS 8里,apple终于面对...你看一个标准的gcc编译器,这三点不同的 -O 选项下,都能做到 [10]。而在compile to javascript领域里,做到(好) 2)与3)的很少。...它在做到「信」的基础上,最大程度地压缩你的代码,不仅删除所有不在执行路径上的代码,还把你的函数各种inline。

    1.2K60

    创建界面方法的讨论

    同样的话题,唐巧的博客里,也讨论过这个问题:iOS 开发的争议(二) 其中比较有说服力的一段是他分析了100多个 App 包含 xib 文件的个数,大概推测出很多著名的 App 里大部分界面都是手写来完成的...同时他也提出了自己的建议: 对于复杂的、动态生成的界面,建议使用手工编写界面。 对于需要统一风格的按钮或UI控件,建议使用手工用代码来构造。方便之后的修改和复用。...这一点我觉得 iOS 上也适用。比如说按钮事件,用 Storyboards 就是鼠标一拖,连一条线出来,系统就生成了一段事件代码,而你只要填代码就可以。...我觉得这对于学习 iOS 不是一件好事情,虽然说我现在也不是非常了解 iOS 底层的一些实现原理,但通过手写界面,手动添加事件,我知道这些东西是怎么添加的,添加的东西和其他类之间的关系是什么。...所以手写界面对学习 iOS 还是有一些帮助的。

    75610
    领券