UIApplicationMain函数作用、显示关闭隐藏文件、协议委托代理

本文解析了iOS应用启动流程中的UIApplicationMain函数作用及参数含义,并详细介绍了Objective-C中的委托模式,包括其定义、实现步骤及代码示例。

在iOS应用中,每个程序得main函数中都调用了UIApplicationMain函数。

 
intmain(intargc,char*argv[])
{
    @autoreleasepool{
      returnUIApplicationMain(argc,argv,nil,NSStringFromClass([AppDelegateclass]));
    }
}

先来看看UIApplicationMain函数的原型:

 
intUIApplicationMain (
    intargc,
    char*argv[],
    NSString*principalClassName,
    NSString*delegateClassName
);

前面的argc和argv是ISOC标准的main函数的参数,直接传递给UIApplicationMain进行相关处理。

principalClassName是应用程序类的名字,该类必须继承自UIApplication类。

而delegateClassName是应用程序类的代理类。如果主要nib文件(在info.plist文件中指定,key是NSMainNibFile)存在,就会在nib文件对象里寻找Application对象和连接它的delegate。此函数会根据principalClassName创建UIApplication对象,然后根据delegateClassName创建一个delegate对象,并将UIApplication对象中的delegate属性设置为delegate对象。

接着会建立应用的mainrunloop,进行事件的处理(首先会调用–application:didFinishLaunchingWithOptions:)。程序正常退出时才返回(如今iOS支持后台运行,系统在必要时会强行杀死不用的进程,一般这个函数不等返回进程就终止了)。



显示Mac隐藏文件的命令:
defaults write com.apple.finderAppleShowAllFiles -bool true
 
隐藏Mac隐藏文件的命令:
defaults write com.apple.finderAppleShowAllFiles -bool false






一、什么是委托

       刚接触iOS开发的朋友肯定对委托这个东西感觉到陌生和迷惑,特别是Java转过来的(博主中枪),那么今天我们就简单的谈谈委托这个东西,atany会尽量做到说的浅显易懂的大笑~

       首先让我们来看看委托的定义:委托delegate),就是某个对象指定另一个对象处理某些特定任务的设计模式。通俗来说,就是“某个对象”把要做的事情委托给“另一个对象”去做,简单吧。

       其中“某个对象”被称作委托者,“另一个对象”被称作是被委托者。

       【注】:委托者与被委托者的叫法很多,例如(普通对象与委托对象,委托与代理等等)为了方便大家理解,下文统一使用“委托与代理”的叫法。

       在委托与代理之间还有一个重要的概念——协议,协议是委托与代理之间的桥梁,把两者紧密联系在一起。


二、委托与代理

如下图,委托方通过某种方式把任务分派出去给代理方处理,而两者之间的联系便是协议。



在程序中:一般情况下

1.委托需要做的工作有:

     1.1定义协议与方法

     1.2声明委托变量

     1.3设置代理

     1.4通过委托变量调用委托方法

 

2.代理需要做的工作有:

     2.1遵循协议

     2.2实现委托方法

可能现在大家还不明白,我们设置如下场景,把每个工作都带入代码就清楚了

场景:Boss准备举行一场party,准备邀请Atany来参加party,但是Boss没空写email给Atany,于是他委托Henry与Mary来做这件事情。

1)   先看YGViewController.h(根控制器,程序第一个界面,类似于Boss)

[cpp]  view plain copy
  1. #import <UIKit/UIKit.h>  
  2. @protocol InviteDelegate  
  3. -(void)inviteToMyParty:(NSString *)personName;//1.1定义协议与方法  
  4. @end  
  5.   
  6. @interface YGViewController : UIViewController  
  7. @property (assign,nonatomic) id<InviteDelegate> delegate;//1.2声明委托变量  
  8. - (IBAction)ClickByMary:(id)sender;//委托给Mary  
  9. - (IBAction)ClickByHenry:(id)sender;//委托给Henry  
  10. @end  

在YGViewController.h中,委托执行了两件事情,分别是定义协议与声明委托。Boss并没有实现inviteToMyParty这个方法,他没有自己去邀请。


2)   再看YGViewController.m中ClickByMary与ClickByHenry点击事件

[cpp]  view plain copy
  1. - (IBAction)ClickByMary:(id)sender {  
  2.     Mary *mary = [[Mary alloc]init];  
  3.     self.delegate = mary;//1.3设置代理  
  4.     [self.delegate inviteToMyParty:@"atany"];//1.4通过委托变量调用委托方法  
  5. }  
  6. - (IBAction)ClickByHenry:(id)sender {  
  7.     Henry *henry = [[Henry alloc]init];  
  8.     self.delegate = henry;//1.3设置代理  
  9.     [self.delegate inviteToMyParty:@"atany"];//1.4通过委托变量调用委托方法  
  10. }  

两者大同小异,都是实例化对象,然后设置代理,最后调用方法。

BOSS可以选择不同的代理(Henry与Mary)来做这件事情(inviteToMyParty),而自己却不用做。

 

3)   以Henry为例子,我们看看Henry.h

[cpp]  view plain copy
  1. #import <UIKit/UIKit.h>  
  2. #import "YGViewController.h"  
  3.   
  4. @interface Henry : UIViewController <InviteDelegate>//2.1遵循协议  
  5. @end  

Henry遵循协议,随时准备好接收Boss的召唤。

4)   Henry.m中我们实现了inviteToMyParty的具体方法,我们弹出一个对话框来显示邀请内容。

[cpp]  view plain copy
  1. -(void)inviteToMyParty:(NSString *)personName{  
  2.     NSString *hello = [NSString stringWithFormat:@"Hello,%@",personName];  
  3.     NSString *str = [NSString stringWithFormat:@"Hey Boy,this is Henry,Come to our party Please!!"];  
  4.     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:hello message:str delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];  
  5.     [alert show];  
  6. }  

按照上面步骤便完成一个简单的协议+委托的程序。

效果图:

             

             

            
内容概要:本文详细记录了对一个Android ARM64静态ELF文件中字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符中。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置与长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文中还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制中字符串加密的典型实现方式与逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取与解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维与验证方法,建议读者结合IDA调试环境,逐步跟随文中步骤进行动态分析与算法验证,深入理解每一步的推理依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值