1.Android Activity Deeplink启动来源获取源码分析
2.PointNet/PointNet++网络结构详解,置换置换源码分析
3.matlab如何还原pcode加密过的源码p文件以及编译后的应用的源代
4.stm32åifçåºå«
Android Activity Deeplink启动来源获取源码分析
Deeplink在业务模块中作为外部应用的入口提供,不同跳转类型可能会导致应用提供不一致的代码服务,通常通过反射调用Activity中的置换置换mReferrer字段获取跳转来源的包名。然而,源码mReferrer存在被伪造的代码溯源码怎么读风险,可能导致业务逻辑出错或经济损失。置换置换因此,源码我们需要深入分析mReferrer的代码来源,并寻找更为安全的置换置换获取方法。
为了深入了解mReferrer的源码来源,我们首先使用搜索功能在Activity类中查找mReferrer,代码发现其在Attach方法中进行赋值。置换置换DubboShutdownHook源码进一步通过断点调试跟踪调用栈,源码发现Attach方法是代码由ActivityThread.performLaunchActivity调用的。而performLaunchActivity在调用Attach时,传入的referrer参数实际上是一个ActivityClientRecord对象的referrer属性。深入分析后,发现referrer是在ActivityClientRecord的构造函数中被赋值的。通过进一步的调试发现,ActivityClientRecord的实例化来自于LaunchActivityItem的mReferrer属性。接着,我们分析了mReferrer的来源,发现它最终是由ActivityStarter的setCallingPackage方法注入的。而这个setCallingPackage方法的jpbc源码调用者是ActivityTaskManagerService的startActivity方法,进一步追踪调用链路,我们发现其源头是在App进程中的ActivityTaskManager.getService()方法调用。
在分析了远程服务Binder调用的过程后,我们发现获取IActivityTaskManager.Stub的方法是ActivityTaskManager.getService()。这使得我们能够追踪到startActivity方法的调用,进而找到发起Deeplink的应用调用的具体位置。通过这个过程,我们确定了mReferrer实际上是通过Activity的getBasePackageName()方法获取的。
为了防止包名被伪造,我们注意到ActivityRecord中还包含PID和Uid。通过使用Uid结合包管理器的方法来获取对应的包名,可以避免包名被伪造。runc 源码通过验证Uid的来源,我们发现Uid实际上是通过Binder.getCallingUid方法获取的,且Binder进程是无法被应用层干涉的,因此Uid是相对安全的。接下来,我们可以通过Uid来置换包名,进一步提高安全性。
总结,mReferrer容易被伪造,应谨慎使用。通过使用Uid来获取包名,可以提供一种更为安全的源码推送获取方式。此过程涉及对源代码的深入分析和调试,作者Chen Long为vivo互联网客户端团队成员。
PointNet/PointNet++网络结构详解,源码分析
点云处理深度学习方法需应对置换不变性和旋转不变性。点云原始数据的稀疏性是三维方法共同挑战。PointNet解决置换不变性,使用对称函数如最大值函数,高维特征提取后最大化,降低低维损失。PointNet通过T-Net矩阵保证旋转不变性,该矩阵转换任意角度输入至正面点云。PointNet整体架构如图所示。
PointNet++是PointNet改进版,PointNet在分类和Part Segmentation表现良好,但在Semantic Segmentation受限。PointNet++依据2D CNN思想改进,通过SA模块进行特征学习。模块首先采样关键点,围绕每个关键点选取球形区域内点作为Grouping,应用PointNet提取特征。每个点特征不仅包含自身信息,还融合领域内周围点关系。关键点坐标变换确保不变性,输入变换后球形区域内点相对关系确定。最终得到的点特征包含多层次特征学习结果。PointNet++通过不同分辨率和尺度的Grouping解决点云稀疏性影响。
总结,PointNet和PointNet++在点云处理中各有优势。PointNet通过置换不变性和旋转不变性处理策略,实现对点云数据的有效学习。PointNet++进一步通过多层次特征学习和关键点选择,提高对点与点关系的捕捉能力。两者的架构和策略设计旨在优化点云数据处理效率和精度,满足不同应用需求。
matlab如何还原pcode加密过的p文件以及编译后的应用的源代
p code使用AES加密
当p文件执行时,文件中的代码通常被解密。由于Mathworks需要解密算法和密钥,因此它可能包含用于反向工程的解密逻辑。
P代码文件的执行速度与原始MATLAB源代码相同,且P代码文件中包含混淆以保护代码免于被读取。
若要生成P代码文件,可以使用MATLAB的pcode函数。对于单个.m文件,只需调用pcode(file_name)。对于多个文件或文件夹,可使用pcode(file_list,'-inplace')。
在MATLAB中使用pcode(file_name)将文件转换为P代码版本,以减少执行时间。此外,pcode(file_name,'-inplace')在与原文件相同的目录下创建P代码文件,适合批量操作。
AES加密过程涉及到四个关键操作:字节替代、行移位、列混淆和轮密钥加。解密过程则执行相反操作以恢复明文。AES算法使用个字节的密钥在每轮操作中生成子密钥。字节替换通过S盒实现字节映射,行移位则通过循环左移实现矩阵内部字节置换。列混淆则通过矩阵乘法实现非线性扩散。轮密钥加在每轮中进行异或操作,结合之前的混淆过程,实现加密的最终步骤。
密钥扩展算法用于生成AES所需的多个子密钥。对于位密钥,算法将密钥扩展为个子密钥。该过程包括循环左移、S盒映射、与常量异或以及基于前一列计算新值的步骤。最终生成的扩展密钥用于后续轮次的加密操作。
stmåifçåºå«
STMç¨åºä¸ifå#ifçåºå«
ï¼1ï¼⾸å ï¼ifæ¯æ¡ä»¶è¯å¥ï¼#ifæ¯é¢å¤çæ令ï¼åè½ç¸åï¼æ§⾏çæ¶æä¸å
ï¼2ï¼ä¸¾ä¾1ï¼
#define A 2
#if A==2
void foo()
{
printf("A == 2");
}
#else
void foo()
{
printf("A != 2");
}
#endif
int main()
{
foo();
}
举ä¾2ï¼
è¿æ ·ä¼è¾åº A == 2
å¦ææ¹å#define A 2å°±å¯è½ä¼è¾åºA != 2
#if.
a
#else
b
#endifï¼å ¶å®è¿ä¸ªå°±æ¯éæ©ç¼è¯é£é¨åï¼åif-elseçåºå«å°±æ¯ï¼ç¼è¯çæ¶åè¿⾏éæ©çï¼å¦ææ¯açè¯ï¼bé£ä¹å°±æ ¹æ¬ä¸å»ç¼è¯ï¼⽽if-elseæ¯å ¨é¨ç¼è¯å¥½çï¼ç¶ååå»è¿⾏
é£ä¹é®é¢æ¥äºï¼⽤#if #elseçé¢å¤ç⽅å¼ï¼å¦ææ¯açè¯ï¼é£ä¹å¨ç¨åºè¿⾏ä¸ï¼æ¡ä»¶æ»¡⾜elseäºï¼é£ä¹ä¼æ§⾏båï¼ï¼
çæ¡æ¯ï¼ä¸ä¼ï¼åå å¨ï¼3ï¼ä¸è§£é
ï¼3ï¼#ifçä½⽤ï¼æäºç¨åºå¨è°è¯ãå ¼å®¹æ§ãå¹³å°ç§»æ¤çæ åµä¸å¯è½æ³è¦éè¿ç®åå°è®¾ç½®⼀äºåæ°å°±⽣æ⼀个ä¸åç软件ï¼è¿å½ç¶å¯ä»¥éè¿åé设置ï¼æææå¯è½⽤å°ç代ç é½åè¿å»ï¼å¨åå§åæ¶é ç½®ï¼ä½å¨ä¸åçæ åµä¸å¯è½åª⽤å°⼀é¨å代ç ï¼å°±æ²¡å¿ è¦æææç代ç é½åè¿å»ï¼å°±å¯ä»¥⽤æ¡ä»¶ç¼è¯ï¼éè¿é¢ç¼è¯æ令设置ç¼è¯æ¡ä»¶ï¼å¨ä¸åçéè¦æ¶ç¼è¯ä¸åç代ç ã
æ以ï¼⼀æ¦é¢å¤çæ¡ä»¶é¨åç¼è¯åï¼å¨è¿⾏ä¸åªæ§⾏符åæ¡ä»¶çé¨å代ç å
å³å¯ä»¥è®¾ç½®ä¸åçæ¡ä»¶ï¼å¨ç¼è¯æ¶ç¼è¯ä¸åç代ç ï¼é¢ç¼è¯æ令ä¸ç表达å¼ä¸Cè¯⾔æ¬⾝ç表达å¼åºæ¬⼀⾄å¦é»è¾è¿ç®ãç®æ¯è¿ç®ãä½è¿ç®çåå¯ä»¥å¨é¢ç¼è¯æ令ä¸ä½¿⽤ãä¹æ以è½å¤å®ç°æ¡ä»¶ç¼è¯æ¯å 为é¢ç¼è¯æ令æ¯å¨ç¼è¯ä¹åè¿⾏å¤ççï¼éè¿é¢ç¼è¯è¿⾏å®æ¿æ¢ãæ¡ä»¶éæ©ä»£ç 段ï¼ç¶å⽣ææåçå¾ ç¼è¯ä»£ç ï¼æåè¿⾏ç¼è¯ã
#if ç⼀è¬å«ä¹æ¯å¦æ#if å⾯ç常é表达å¼ä¸ºtrueï¼åç¼è¯å®ææ§å¶ç代ç ï¼å¦æ¡ä»¶1æ⽴æ¶å°±ä»£ç 段1ï¼æ¡ä»¶1ä¸æ⽴åçæ¡ä»¶2æ¯å¦æ⽴ï¼å¦ææ¡ä»¶2æ⽴åç¼è¯ä»£ç 段2ï¼å¦ååä¾æ¬¡ç±»æ¨å¤æå ¶å®æ¡ä»¶ï¼å¦ææ¡ä»¶1ï¼Né½ä¸æ⼒åä¼ç¼è¯æåç代ç 段n+1ã
ï¼4ï¼#ifç好å¤ï¼ ç³»ç»è£åª
ç³»ç»è£åªæ¯é对系ç»ç⽤éï¼å¯¹ç³»ç»çæºä»£ç è¿⾏⼀ä¸ä¼åï¼åå°ä¸å¿ è¦çåè½ã
/*--------------------------------------------------------------------*/
#includeâstdio.hâ
#define TEST_2 1
int mainï¼ï¼
{
int a=ï¼
#if TEST_2
int *b=&a;
*b = ;
#endif
a++;
}
/*----------------------------------------------------------------------*/
å¦ä¸⾯çä¾⼦ï¼å¯¹äºæäºåè½ä¸éè¦ï¼æ们åªé对äºçåè½TEST_2çå®å®ä¹æ¹æ0ï¼ç¶åéæ°ç¼è¯å°±⾏äºãå½ç¶⼀è¬å®å®ä¹æ¯æ¾å¨⼀个ç¹å®ç⽂件ï¼è¿⾥为äºç®åå°±åå¨⼀èµ·ï¼ï¼è¿æ ·å¤⾯ç⼈åªéè¦æ´æ¹é£ä¸ª⽂件æ对åºçå¼å°±⾏对系ç»è¿⾏è£åª⽽ä¸éè¦å ³⼼å ·ä½ä»£ç ï¼å°±⾏å®ç°è£åªã
ï¿¥
5.9
ç¾åº¦æåºVIPéæ¶ä¼æ ç°å¨å¼é,ç«äº«6亿+VIPå 容
ç«å³è·å
STMç¨åºä¸ifå#ifçåºå«
STMç¨åºä¸ifå#ifçåºå«
ï¼1ï¼⾸å ï¼ifæ¯æ¡ä»¶è¯å¥ï¼#ifæ¯é¢å¤çæ令ï¼åè½ç¸åï¼æ§⾏çæ¶æä¸å
ï¼2ï¼ä¸¾ä¾1ï¼
#define A 2
#if A==2
void foo()
{
printf("A == 2");
}
第 1 页
#else
void foo()
{
printf("A != 2");
}
#endif
int main()
{
foo();
}
第 2 页
举ä¾2ï¼
è¿æ ·ä¼è¾åº A == 2
å¦ææ¹å#define A 2å°±å¯è½ä¼è¾åºA != 2
#if.
a
#else
b
#endifï¼å ¶å®è¿ä¸ªå°±æ¯éæ©ç¼è¯é£é¨åï¼åif-elseçåºå«å°±æ¯ï¼ç¼è¯çæ¶åè¿⾏éæ©çï¼å¦ææ¯açè¯ï¼bé£ä¹å°±æ ¹æ¬ä¸å»ç¼è¯ï¼⽽if-elseæ¯å ¨é¨ç¼è¯å¥½çï¼ç¶ååå»è¿⾏
第 3 页
é£ä¹é®é¢æ¥äºï¼⽤#if #elseçé¢å¤ç⽅å¼ï¼å¦ææ¯açè¯ï¼é£ä¹å¨ç¨åºè¿⾏ä¸ï¼æ¡ä»¶æ»¡⾜elseäºï¼é£ä¹ä¼æ§⾏båï¼ï¼
çæ¡æ¯ï¼ä¸ä¼ï¼åå å¨ï¼3ï¼ä¸è§£é
ï¼3ï¼#ifçä½⽤ï¼æäºç¨åºå¨è°è¯ãå ¼å®¹æ§ãå¹³å°ç§»æ¤çæ åµä¸å¯è½æ³è¦éè¿ç®åå°è®¾ç½®⼀äºåæ°å°±⽣æ⼀个ä¸åç软件ï¼è¿å½ç¶å¯ä»¥éè¿åé设置ï¼æææå¯è½⽤å°ç代ç é½åè¿å»ï¼å¨åå§åæ¶é ç½®ï¼ä½å¨ä¸åçæ åµä¸å¯è½åª⽤å°⼀é¨å代ç ï¼å°±æ²¡å¿ è¦æææç代ç é½åè¿å»ï¼å°±å¯ä»¥⽤æ¡ä»¶ç¼è¯ï¼éè¿é¢ç¼è¯æ令设置ç¼è¯æ¡ä»¶ï¼å¨ä¸åçéè¦æ¶ç¼è¯ä¸åç代ç ã
第 4 页
æ以ï¼⼀æ¦é¢å¤çæ¡ä»¶é¨åç¼è¯åï¼å¨è¿⾏ä¸åªæ§⾏符åæ¡ä»¶çé¨å代ç å
å³å¯ä»¥è®¾ç½®ä¸åçæ¡ä»¶ï¼å¨ç¼è¯æ¶ç¼è¯ä¸åç代ç ï¼é¢ç¼è¯æ令ä¸ç表达å¼ä¸Cè¯⾔æ¬⾝ç表达å¼åºæ¬⼀⾄å¦é»è¾è¿ç®ãç®æ¯è¿ç®ãä½è¿ç®çåå¯ä»¥å¨é¢ç¼è¯æ令ä¸ä½¿⽤ãä¹æ以è½å¤å®ç°æ¡ä»¶ç¼è¯æ¯å 为é¢ç¼è¯æ令æ¯å¨ç¼è¯ä¹åè¿⾏å¤ççï¼éè¿é¢ç¼è¯è¿⾏å®æ¿æ¢ãæ¡ä»¶éæ©ä»£ç 段ï¼ç¶å⽣ææåçå¾ ç¼è¯ä»£ç ï¼æåè¿⾏ç¼è¯ã
#if ç⼀è¬å«ä¹æ¯å¦æ#if å⾯ç常é表达å¼ä¸ºtrueï¼åç¼è¯å®ææ§å¶ç代ç ï¼å¦æ¡ä»¶1æ⽴æ¶å°±ä»£ç 段1ï¼æ¡ä»¶1ä¸æ⽴åçæ¡ä»¶2æ¯å¦æ⽴ï¼å¦ææ¡ä»¶2æ⽴åç¼è¯ä»£ç 段2ï¼å¦ååä¾æ¬¡ç±»æ¨å¤æå ¶å®æ¡ä»¶ï¼å¦ææ¡ä»¶1ï¼Né½ä¸æ⼒åä¼ç¼è¯æåç代ç 段n+1ã
第 5 页
ï¼4ï¼#ifç好å¤ï¼ ç³»ç»è£åª
ç³»ç»è£åªæ¯é对系ç»ç⽤éï¼å¯¹ç³»ç»çæºä»£ç è¿⾏⼀ä¸ä¼åï¼åå°ä¸å¿ è¦çåè½ã
/*--------------------------------------------------------------------*/
#includeâstdio.hâ
#define TEST_2 1
int mainï¼ï¼
{
int a=ï¼
第 6 页
#if TEST_2
int *b=&a;
*b = ;
#endif
a++;
}
/*----------------------------------------------------------------------*/