首页 > TAG信息列表 > OBJC
【iOS逆向】某营业厅算法分析
阅读此文档的过程中遇到任何问题,请关注公众号【移动端Android和iOS开发技术分享】或加QQ群【812546729】 1.目标 使用frida stalker分析某营业厅的签名算法。 2.操作环境 mac系统 frida-ios-dump:砸壳 Charles:抓包 已越狱iOS设备:脱壳及frida调试 IDA Pro:静态分析 3.流协议可选方法 swift
@optional 和 @required 是 Objective-C 中特有的关键字。 Swift中,默认所有方法在协议中都是必须实现的。而且,协议里方法不可以直接定义 optional。先给出两种解决方案: 在协议和方法前都加上 @objc 关键字,然后再在方法前加上 optional 关键字。该方法实际上是把协议转化为ObjectiOS的Runtime知识点繁殖难啃,真的理解的它的思想,你就豁然开朗了
一、Runtime 1、概念: 概念:Runtime是Objective-c语言动态的核心,即运行时。在面向对象的基础上增加了动态运行,达到很多在编译时确定方法推迟到了运行时,从而达到动态修改、确定、交换。。。属性及方法 作用: 这给程序员写代码带来很大的灵活性,比如说你可以把消息转发给你想要的对象,或iOS-内存管理
一、内存分布 当程序运行时,系统会开辟内核区、用户区。 值类型:存入栈;无需进行内存管理 引用类型:存入堆;无需进行内存管理 二、iOS的内存管理方案 2.1 Tagged Pointer(无需进行引用计数) Tagged Pointer 是一个指针,指针中包含Tagged标记,用于区分存储的数据类型,同时将值也存储在指objc_msgSend 的原型到底是什么
原文: https://mikeash.com/pyblog/objc_msgsends-new-prototype.html 总结 : objc_msgSend 变了 objc_msgSend 和 objc_msgSendSuper 的类型申明改了,那他们实际上接受什么参数,以及它实际上返回什么? objc_msgSend 不得不用汇编 objc_msgSend 是用汇编实现的,不只是为了快,只用 C,objc_m老生常谈的iOS- weak原理,你真的懂得还是为了应付面试
前言 在iOS开发过程中,会经常使用到一个修饰词“weak”,使用场景大家都比较清晰,用于一些对象相互引用的时候,避免出现强强引用,对象不能被释放,出现内存泄露的问题。 weak 关键字的作用弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为 nil。 weak底层原理 1.weaiOS笔记 - 内存管理:自动释放池的底层实现
Autorelease底层实现 1 - 在了解 Autorelease之前,我们首先要了解自动释放池 __AtAutoreleasePool ① 在 main函数中创建 MJPerson对象 ② 我们转换成 C++代码,如下 我们就看到了 __AtAutoreleasePool。把 C++代码按照 OC格式书写 原来 __AtAutoreleasePool是一个结构体。注:C++中iOS performSelector多参数传递解决方案以及objc_msgSend的使用注意事项
1.iOS performSelector多参数传递解决方案以及objc_msgSend的使用注意事项 https://blog.csdn.net/glt_code/article/details/77584683 iOS performSelector多参数传递解决方案 以及objc_msgSend的使用注意事项 iOS中使用performSelector:withObject:withObject:方法最多OC中category(分类)中添加属性
OC中category(分类)中添加属性 因为OC中无法添加成员变量并且添加的属性不会被保存,所以需要重写get和set方法来实现属性的保存。 //setter //self表示属性拥有者是当前类, //str表示属性名 //urlString表示属性值 //OBJC_ASSOCIATION_COPY_NONATOMIC表示属性类型为(copy,nonObjective-C的装箱与拆箱
学习资源:ios学习路线—Objective-C(装箱和拆箱) 装箱与拆箱 概念:装箱是将值类型装换成引用类型的过程,拆箱就是将引用类型转换成值类型的过程应用:在Objective-C中,数组和字典中只能存储对象类型,其他基本类型和结构体是没有办法放到数组和字典中的,当然你也是无法给它们发送消Swift-类与结构体(1)
Swift-类与结构体(2) 在这里, 我们从函数的角度来出发看类与结构体 一、函数相关的修饰符 1.mutating修饰符 前提:在Swift中class 和struct中都可以定义方法,但是在默认情况下值类型的属性是无法被自身的实例方法修改的 struct Student{ var x = 0.0 var y = 0.0 func movc++:为什么在程序里,描述里,文档里,会写出 cxx,代表c++
为什么 如果在程序里写c++,就是 变量 c 做自加操作。 而x和+号的区别在字形上只是偏转了一下角度,形状还是相同的。 所以经常使用cxx代表c++。 示例 像下面这个gcc里的枚举类定义,就要clk_cxx enum c_language_kind { clk_c = 0, /* C90, C94, C99 or C11 */ clk_objc = 1Oc的异常触发
// Replaced by CF (throws an NSException) + (void)doesNotRecognizeSelector:(SEL)sel { _objc_fatal("+[%s %s]: unrecognized selector sent to instance %p", class_getName(self), sel_getName(sel), self); } // Replaced by CF (thr关联对象objc_setAssociatedObject和objc_getAssociatedObject
一、关于objc_setAssociatedObject和objc_getAssociatedObject的使用,首先需要包含头文件#import <objc/runtime.h> 1、objc_setAssociatedObject objc_setAssociatedObject(<#id _Nonnull object#>, <#const void * _Nonnull key#>, <#id _Nullable value#>, <#oiOS进阶笔记(一) 对象本质相关源码解读
iOS进阶笔记(二) 分类的加载过程及与类扩展的区别
iOS进阶笔记(三) Objc关键字
一起来找茬:记一起 clang 开启 -Oz 选项引发的血案
作者:字节跳动终端技术 —— 刘夏 前言 笔者来自字节跳动终端技术 AppHealth (Client Infrastructure - AppHealth) 团队,在工作中我们会对开源 LLVM 及 Swift 工具链进行维护和定制,推动各项编译器优化在业务场景中的落地。编译器作为一个复杂的软件也会有 bug,也会有各种兼容性iOS进阶笔记(二)2.4 关联对象(Associate)
API: void objc_setAssociatedObject(id _Nonnull object, const void * _Nonnull key, id _Nullable value, objc_AssociationPolicy policy) id _Nullable objc_getAssociatedObject(id _Nonnull object, const void * _Nonnull key) void objc_能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么
不能向编译后得到的类中增加实例变量! 能向运行时创建的类中添加实例变量! 因为编译后的类已经注册在runtime中,类结构体中的objc_ivar_list 实例变量的链表和instance_size实例变量的内存大小已经确定,同时runtime 会调用 class_setIvarLayout 或 class_setWeakIvarLayout来处理stiOS 底层探索篇 ——类的加载原理(上)
iOS 底层探索篇 ——类的加载原理(上) 1. objc_init 做了什么 1. objc_init 做了什么 上文说到了objc_init调用了_dyld_objc_notify_register,初始化了dyld 里面的sNotifyObjCMapped,sNotifyObjCInit,sNotifyObjCUnmapped函数并对 sNotifyObjCMapped,sNotifyObjCInit直接进行ios
Undefined symbols for architecture arm64: "_OBJC_CLASS_$_AVCaptureAudioDataOutput", referenced from: objc-class-ref in libavdevice.a(avfoundation.o) "_OBJC_CLASS_$_AVCaptureVideoDataOutput", referenced from: objc-class-iOS:runtime 消息传递 方法查找
文章目录 1.消息传递1.1 objc_msgSend: 消息传递转化为了函数调用1.2 objc_msgSendSuper(从父类的方法列表开始查找)1.3 消息传递过程(机制)1.4 面试题 2.方法查找2.1 缓存查找(hash查找)2.2 当前类中查找(已排序好的:二分查找,没有排序:一般遍历)2.3 父类逐级查找:先查找父类的cache(iOS-底层原理 17:类的加载(上)
在上一篇iOS-底层原理 16:dyld与objc的关联文章中,我们理解了dyld与objc是如何关联的,本文的主要目的是理解类的相关信息是如何加载到内存的,其中重点关注map_images和load_images map_images:主要是管理文件中和动态库中的所有符号,即class、protocol、selector、category等 load_imaiOS-底层原理 19:类扩展 与 关联对象 底层原理探索
本文的主要目的是针对类的加载的一个扩展,主要讲讲类拓展和分类的底层实现原理 【面试题】类扩展 与 分类 的区别 1、category 类别、分类 专门用来给类添加新的方法 不能给类添加成员属性,添加了成员属性,也无法取到 注意:其实可以通过runtime 给分类添加属性,即属性关联,重写sette