IOS开发中 常用的宏定义[陆续更新]

iOS内核漏洞利用入门:从kfd原理到simplekfd实战指南 内核是操作系统的核心组件,负责管理系统资源、内存和进程调度,其安全性直接决定了整个系统的稳定性。在iOS生态中,内核通过多层防护机制被严格隔离,普通应用无法直接访问。然而,通过特定的内核漏洞,如基于文件描述符的kfd漏洞,攻击者可以构建内存读写原语,突破沙箱限制,实现权限提升。这类技术不仅对移动安全研究具有重要价值,也为系统底层调试、性能分析和高级定制提供了可能。本文以simplekfd项目为例,深入解析如何利用kfd漏洞获取内核读写能力,涵盖环境配置、偏移量提取、漏洞触发与权限提升等关键步骤,并探讨其在越 阅读详情


#ifndef iOS_Constants_h

#define iOS_Constants_h


/* ****************************************************************************************************************** */

/** DEBUG LOG **/

#ifdef DEBUG


#define DLog( s, ... ) NSLog( @"< %@:(%d) > %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )


#else


#define DLog( s, ... )


#endif



/** DEBUG RELEASE **/

#if DEBUG


#define MCRelease(x)            [x release]


#else


#define MCRelease(x)            [x release], x = nil


#endif



/** NIL RELEASE **/

#define NILRelease(x)           [x release], x = nil



/* ****************************************************************************************************************** */

#pragma mark - Frame (宏 x, y, width, height)


// Screen Scale

#define MainScreenScale         [[UIScreen mainScreen] scale]


// App Frame

#define Application_Frame       [[UIScreen mainScreen] applicationFrame]


// App Frame Height&Width

#define App_Frame_Height        [[UIScreen mainScreen] applicationFrame].size.height

#define App_Frame_Width         [[UIScreen mainScreen] applicationFrame].size.width


// MainScreen Height&Width

#define Main_Screen_Height      [[UIScreen mainScreen] bounds].size.height

#define Main_Screen_Width       [[UIScreen mainScreen] bounds].size.width


// View 坐标(x,y)和宽高(width,height)

#define X(v)                    (v).frame.origin.x

#define Y(v)                    (v).frame.origin.y

#define WIDTH(v)                (v).frame.size.width

#define HEIGHT(v)               (v).frame.size.height


#define MinX(v)                 CGRectGetMinX((v).frame)

#define MinY(v)                 CGRectGetMinY((v).frame)


#define MidX(v)                 CGRectGetMidX((v).frame)

#define MidY(v)                 CGRectGetMidY((v).frame)


#define MaxX(v)                 CGRectGetMaxX((v).frame)

#define MaxY(v)                 CGRectGetMaxY((v).frame)


// 系统控件默认高度

#define kStatusBarHeight        (20.f)


#define kTopBarHeight           (44.f)

#define kBottomBarHeight        (49.f)


#define kCellDefaultHeight      (44.f)


#define kEnglishKeyboardHeight  (216.f)

#define kChineseKeyboardHeight  (252.f)



/* ****************************************************************************************************************** */

#pragma mark - Funtion Method (宏 方法)


// PNG JPG 图片路径

#define PNGPATH(NAME)           [[NSBundle mainBundle] pathForResource:[NSString stringWithUTF8String:NAME] ofType:@"png"]

#define JPGPATH(NAME)           [[NSBundle mainBundle] pathForResource:[NSString stringWithUTF8String:NAME] ofType:@"jpg"]

#define PATH(NAME, EXT)         [[NSBundle mainBundle] pathForResource:(NAME) ofType:(EXT)]


// 加载图片

#define PNGIMAGE(NAME)          [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:(NAME) ofType:@"png"]]

#define JPGIMAGE(NAME)          [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:(NAME) ofType:@"jpg"]]

#define IMAGE(NAME, EXT)        [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:(NAME) ofType:(EXT)]]


#define IMAGENAMED(NAME)        [UIImage imageNamed:NAME]


// 字体大小(常规/粗体)

#define BOLDSYSTEMFONT(FONTSIZE)[UIFont boldSystemFontOfSize:FONTSIZE]

#define SYSTEMFONT(FONTSIZE)    [UIFont systemFontOfSize:FONTSIZE]

#define FONT(NAME, FONTSIZE)    [UIFont fontWithName:(NAME) size:(FONTSIZE)]


// 颜色(RGB)

#define RGBCOLOR(r, g, b)       [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]

#define RGBACOLOR(r, g, b, a)   [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]


// 当前版本

#define FSystemVersion          ([[[UIDevice currentDevice] systemVersion] floatValue])

#define DSystemVersion          ([[[UIDevice currentDevice] systemVersion] doubleValue])

#define SSystemVersion          ([[UIDevice currentDevice] systemVersion])


// 当前语言

#define CURRENTLANGUAGE         ([[NSLocale preferredLanguages] objectAtIndex:0])


// 是否Retina屏

#define isRetina                ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? \

                                CGSizeEqualToSize(CGSizeMake(640, 960), \

                                                  [[UIScreen mainScreen] currentMode].size) : \

                                NO)


// 是否iPhone5

#define isiPhone5               ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? \

                                CGSizeEqualToSize(CGSizeMake(640, 1136), \

                                                  [[UIScreen mainScreen] currentMode].size) : \

                                NO)


// 是否iPad

#define isPad                   (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)


// UIView - viewWithTag

#define VIEWWITHTAG(_OBJECT, _TAG)\

                                \

                                [_OBJECT viewWithTag : _TAG]


// 本地化字符串

/** NSLocalizedString宏做的其实就是在当前bundle中查找资源文件名“Localizable.strings”(参数:键+注释) */

#define LocalString(x, ...)     NSLocalizedString(x, nil)

/** NSLocalizedStringFromTable宏做的其实就是在当前bundle中查找资源文件名“xxx.strings”(参数:键+文件名+注释) */

#define AppLocalString(x, ...)  NSLocalizedStringFromTable(x, @"zjj", nil)


// App Name

#define AppDisplayName          [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]


// RGB颜色转换(16进制->10进制)

#define UIColorFromRGB(rgbValue)\

                                \

                                [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \

                                                green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \

                                                 blue:((float)(rgbValue & 0xFF))/255.0 \

                                                alpha:1.0]


#if TARGET_OS_IPHONE

/** iPhone Device */

#endif


#if TARGET_IPHONE_SIMULATOR

/** iPhone Simulator */

#endif


// ARC

#if __has_feature(objc_arc)

/** Compiling with ARC */

#else

/** Compiling without ARC */

#endif



/* ****************************************************************************************************************** */

#pragma mark - Log Method (宏 LOG)


// 日志 / 断点

// =============================================================================================================================

// DEBUG模式

#define ITTDEBUG


// LOG等级

#define ITTLOGLEVEL_INFO        10

#define ITTLOGLEVEL_WARNING     3

#define ITTLOGLEVEL_ERROR       1


// =============================================================================================================================

// LOG最高等级

#ifndef ITTMAXLOGLEVEL


#ifdef DEBUG

#define ITTMAXLOGLEVEL ITTLOGLEVEL_INFO

#else

#define ITTMAXLOGLEVEL ITTLOGLEVEL_ERROR

#endif


#endif


// =============================================================================================================================

// LOG PRINT

// The general purpose logger. This ignores logging levels.

#ifdef ITTDEBUG

#define ITTDPRINT(xx, ...)      NSLog(@"< %s:(%d) > : " xx , __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)

#else

#define ITTDPRINT(xx, ...)      ((void)0)

#endif


// Prints the current method's name.

#define ITTDPRINTMETHODNAME()   ITTDPRINT(@"%s", __PRETTY_FUNCTION__)


// Log-level based logging macros.

#if ITTLOGLEVEL_ERROR <= ITTMAXLOGLEVEL

#define ITTDERROR(xx, ...)      ITTDPRINT(xx, ##__VA_ARGS__)

#else

#define ITTDERROR(xx, ...)      ((void)0)

#endif


#if ITTLOGLEVEL_WARNING <= ITTMAXLOGLEVEL

#define ITTDWARNING(xx, ...)    ITTDPRINT(xx, ##__VA_ARGS__)

#else

#define ITTDWARNING(xx, ...)    ((void)0)

#endif


#if ITTLOGLEVEL_INFO <= ITTMAXLOGLEVEL

#define ITTDINFO(xx, ...)       ITTDPRINT(xx, ##__VA_ARGS__)

#else

#define ITTDINFO(xx, ...)       ((void)0)

#endif


// 条件LOG

#ifdef ITTDEBUG

#define ITTDCONDITIONLOG(condition, xx, ...)\

                                \

                                {\

                                    if ((condition))\

                                    {\

                                        ITTDPRINT(xx, ##__VA_ARGS__);\

                                    }\

                                }

#else

#define ITTDCONDITIONLOG(condition, xx, ...)\

                                \

                                ((void)0)

#endif


// 断点Assert

#define ITTAssert(condition, ...)\

                                \

                                do {\

                                    if (!(condition))\

                                    {\

                                        [[NSAssertionHandler currentHandler]\

                                        handleFailureInFunction:[NSString stringWithFormat:@"< %s >", __PRETTY_FUNCTION__]\

                                                           file:[[NSString stringWithUTF8String:__FILE__] lastPathComponent]\

                                                     lineNumber:__LINE__\

                                                    description:__VA_ARGS__];\

                                    }\

                                } while(0)



/* ****************************************************************************************************************** */

#pragma mark - Constants (宏 常量)


/** 时间间隔 */

#define kHUDDuration            (1.f)


/** 一天的秒数 */

#define SecondsOfDay            (24.f * 60.f * 60.f)

/** 秒数 */

#define Seconds(Days)           (24.f * 60.f * 60.f * (Days))


/** 一天的毫秒数 */

#define MillisecondsOfDay       (24.f * 60.f * 60.f * 1000.f)

/** 毫秒数 */

#define Milliseconds(Days)      (24.f * 60.f * 60.f * 1000.f * (Days))



#endif

光学设计必看:如何用泽尼克系数优化镜头像差?从Zemax到实际案例解析 本文深入解析了如何利用泽尼克系数优化镜头像差,从理解其工程价值、解码软件报告,到在Zemax中主动设置优化目标。通过高倍显微物镜等实际案例,详细展示了如何通过分析泽尼克系数诊断问题,并实施针对性优化策略,从而实现对球差、彗差等像差的精准控制,提升光学设计的精细度和系统稳健性。 阅读详情

相关推荐

避坑指南:群晖DSM 7.X挂载NTFS硬盘,为什么你的SATA口不行?从原理到实战一次讲清

本文深入解析群晖DSM 7.X系统挂载NTFS硬盘的底层原理与实战排查方法,揭示SATA接口权限配置的关键参数(如esataportcfg和internalportcfg),并提供安全修改端口配置的详细步骤。针对不同型号群晖NAS的配置差异,给出替代方案与常见故障排查技巧,帮助用户解决NTFS硬盘挂载问题。

weixin_26757925的博客 256

宏定义秒数

一年秒数定义,忽略闰年 #define SECONDS (365*24*60*60)UL 宏定义数字默认是unsignedint类型,UL是指无符号长整型,365*24*60*60=‭288313344‬,这个数转换成16进制是0x‭112F5000‬,如果是32位机器用unsignedint标识完全够用;但是如果是16位机unsigned int类型范围是0~2^16明显不够用,所以稳妥...

↓ 1369

数据中心GPU芯片性能参数速查表(Nvidia+国产算力卡)

本文提供了一份数据中心GPU芯片性能参数速查表,涵盖Nvidia与国产算力卡两大阵营。文章详细解读了算力、显存、互连技术及功耗等关键性能指标,并对比了A100、H100、昇腾910B等主流型号,旨在帮助用户根据AI训练、推理等实际场景,做出高效的硬件选型与成本评估决策。

a0b1c2d3的专栏 837

单片机笔试题集锦1

1  写一个宏定义,完成功能:输入一个天数,得到这些天总共有多少秒。 答:#define GET_DAYS_SEC(x)  ((x) * 24 * 60 * 60)UL   2  新建一个枚举类型,包含男性和女性(标识符和值自定义) 答:typedef enum {   MALE = 0, FEMALE = 1 } human;

u010389802的博客 1466

基于STM32与ESP8266的MQTT协议实现阿里云物联网平台远程LED控制

本文详细介绍了如何利用STM32单片机与ESP8266 Wi-Fi模块,通过MQTT协议连接阿里云物联网平台,实现远程控制LED灯的完整物联网项目。内容涵盖硬件连接、阿里云平台配置、MQTT协议与AT指令解析、STM32代码实战以及数据解析与调试技巧,为嵌入式开发者提供了一个清晰、实用的物联网入门实践指南。

svm4gardener的博客 792

【Unity实战】实现最完美最简单的UI适配方案,背景压缩或者拉伸变形解决方案,手机刘海屏适配,适配不同分辨率,不同尺寸,不同设备。

这期来讲一个简单的UI设计方案,很多同学可能搞不懂锚点、轴心这些概念,导致做好的UI在别人的设备上,乱跑或者是重叠,或者是参加游戏老发时间比较紧来不及做适配,都可以来试试这个方法,通过填充边框来保持游戏画面的原始比例,所以它的缺点也很明显,在一些移动设备上会浪费比较大的显示面积。 unity不同设备UI变形? UI在不同设备上如何适配?

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3652

C语言宏定义——一年有多少秒

那么,一年到底有多少秒?我再换个问法,每年都一样么?闰年你又怎么解决?众所周知,每四年有一个闰年,这还不是全部,逢百年的时候你必须用年份除以四百,除得开才是闰年。 地球围绕太阳公转一周(即360度)的时间应该为365日6时9分10秒,即为一个恒星年。 地球的某点获得两次两次直射的间隔是365日5时48分46秒(更加精确:365天5小时48分45.975456秒),即为一个回归年。 一个回归年折算成小数,大概是365.2422日,400年里多出了96.88天,而按四年一个闰年算,400年里少3个闰年,即

huqinwei的专栏 2万+

YOLO26 无损剪枝:稀疏训练 + 结构化通道裁剪

YOLO26 无损剪枝链路:YOLO26s (7.2M) → 稀疏训练 30 epoch (L1 on BN gamma, lam=0.01) → 阈值剪枝 50% (gamma<quantile(0.5)) → 结构化重建 Conv+BN → 微调 10 epoch (lr=1e-4) → YOLO26n (1.9M, mAP50 0.808, 仅降 0.6%)。核心贡献:稀疏训练让 BN gamma 趋向二元分布 (近 0 或近 1), 剪枝阈值可直接取 median 自动 50% 压缩。

m0_64661770的博客 263

iOS敏捷开发之道,常用的宏定义总结

iOS开发中,直接在pch文件中导入宏定义。在做项目的时候,直接拿过来使用,可以大幅度提高开发速度。 下面是 个人总结的一些宏定义。如果大家有其他的常用的宏定义,欢迎添加。我会定期更新这个blog…..话不多说,直接上干货// 在宏的参数前加上一个#,宏的参数会自动转换成c语言的字符串 #define MRKeyPath(objc,keyPath) @(((void)objc.keyPath, #

人的梦想是不会终结的 2536

【100%通过率】2023华为od机试C卷【围棋的气】Python 实现

围棋棋盘由纵横各19条线垂直相交组成,棋盘上一共19 x 19 = 361 个交点,对奔双方一方执白棋,一方执黑棋,落子时只能将棋子置于交点上。 “气”是围棋中很重要的一个概念,某个棋子有几口气,是指其上下左右方向四个相邻的交叉点中,有几个交叉点没有棋子,由此可知:

MISAYAONE的博客 1858

【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)

随着打印技术的快速发展,镭射打印技术也开始得到越来越广泛的应用。这种技术可以被用于在木材、塑料、皮革、织物等各种材料上进行图形打印,并且通常比传统机器更快、更准确和更灵活。

嵌入式技术开发 7200

学习Coding-iOS开源项目日志(一)

前言:作为初级程序员,想要提高自己的水平,其中一个有效的学习方法就是学习别人好的项目。本篇开始会陆续更新本人对github上开源的一个很不错的项目的一点点学习积累。也就是,探究着别人写的源码,我学到了新的什么东西?本人愚拙,而且码龄不多,也就三年左右,水平不高,如有挫解,还望指正。本人乐爱学习,乐于分享,广结良缘,愿意交流。当然,高手可以飘过。 Coding-iOS项目网址:https://gi...

weixin_34019144的博客 160

【YOLO系列】YOLOv11详解:模型结构、损失函数、训练方法及代码实现

YOLOv11在目标检测领域实现重大突破,通过动态骨干网络(Dyna-Backbone)和FPN++架构,在保持高帧率(≥60FPS)的同时提升小目标检测精度(AP_S提升5.6%)。创新采用CIoU++损失函数和类别平衡Focal Loss,结合Mosaic-Plus数据增强,参数量减少18%至6.5M。实验显示,该模型在COCO数据集上实现更高mAP,特别适合移动端部署,Jetson Xavier平台能耗比优化至3.2W·ms⁻¹,支持目标检测、实例分割等多任务场景。关键创新包括动态深度调整和双向特征金

一碗白开水一 3444

学习Coding-iOS开源项目日志(四)

Hello,大家好,好久没写博客了,今天再次来研究研究Coding源码,久违了。 前 言:作为初级程序员,想要提高自己的水平,其中一个有效的学习方法就是学习别人好的项目。本篇开始会陆续更新本人对github上开源的一个很不 错的项目的一点点学习积累。也就是,探究着别人写的源码,我学到了新的什么东西?本人愚拙,而且码龄不多,也就三年左右,水平不高,如有挫解,还望指正。 本人乐爱学习...

weixin_30824277的博客 109

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

iOS—从源码分析retain、release、retainCount实现

文章目录isa简单了解sideTables、sideTable 简单了解retainCount实现retain 实现release实现retain、release过程大总结:objc_autoreleaseReturnValue实现objc_retainAutoreleasedReturnValue实现 isa简单了解 每个OC对象都含有一个isa指针,__arm64__之前,isa仅仅是一个指针,保存着对象或类对象内存地址,在__arm64__架构之后,apple对isa进行了优化,变成了一个共用体(un

qq_45836906的博客 1004

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VC中得到运算时所耗费时间的宏定义(精确到毫秒级)

<br />//定义了两个宏,用来计算并显示某段计算步骤所经历的时间<br />#define TimeCountStart CTime startTime = CTime::GetCurrentTime();/<br /> struct _timeb timebuffer;/<br /> int mills1,mills2;/<br />    _ftime(&timebuffer);/<br /> mills1=timebuffer.millitm;/<br /> CString str;/<br />

暂时为空 1633

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C语言中定义附带时间(毫秒)的打印Log的宏

1. 需求 * 有时候程序调试的时候,需要打印出附带时间点的log 信息,本例中给出一种实现 2. 实现: 宏 +printf * 2.1 声明部分 extern char* getCurrentTime(); #define PRINTVV(format, ...) \ printf("%s Func=[%s], Line=[%d] " format"\n", getCurrentTime(), __FUNCTION__, __LINE__, ## __VA_ARGS__...

BlockVoice 1144

笔试:请定义一个宏常量SECONDS_PER_YEAR,表示每年有多少秒(不考虑闰年)

请定义一个宏常量SECONDS_PER_YEAR,表示每年有多少秒(不考虑闰年) 答案: #define SECONDS_PER_YEAR 60*60*24*365(UL) #define SECONDS_PER_YEAR (60UL * 60UL * 24UL * 365UL) #define SECONDS_PER_YEAR ((unsigned long)(60 * 60 *...

haoqisongshu的博客 1304

IOS UIGraphicsBeginImageContext 使用简介

1.等比缩放 - (UIImage *) scaleImage:(UIImage *)image toScale:(float)scaleSize { UIGraphicsBeginImageContext(CGSizeMake(image.size.width * scaleSize, image.size.height * scaleSize); [image drawInRec

汪文清 Sir's Notes 5733

IOS 自定义滑动Tab(顶部) 带滑动的条条

IOS 自定义滑动Tab(顶部) 带滑动的条条

汪文清 Sir's Notes 4417

IOS 实现加入购物车的效果

动画 CA 加入购物车的效果

汪文清 Sir's Notes 2344

ios- POST数据加密-安全

ios- POST数据提交安全

汪文清 Sir's Notes 1892
上一篇: IOS 实现加入购物车的效果
下一篇: IOS 读取本地plist类型文件数据
dev-kevin
博客等级 码龄16年 3粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值