restore-symbol 学习

FlightStream实战:如何用面元法在笔记本电脑上完成无人机气动分析(附NASA案例) 本文详细介绍了如何利用FlightStream面元法在笔记本电脑上高效完成无人机气动分析,包括其核心技术优势、NASA D8案例实战解析及高效工作流建立。FlightStream作为快速CFD分析工具,显著提升了早期设计阶段的迭代速度,适用于概念设计验证和多气动构型比较。 阅读详情

restore-symbol 学习

原理:基于 class-dump

1.先预处理读取mach-o


(lldb) bt
* thread #1, stop reason = breakpoint 40.1
    frame #0: 0x000000010002a340 restore-symbol`-[CDMachOFile ptrSize](self=0x0000600003900000, _cmd="ptrSize") at CDMachOFile.m:218:12
  * frame #1: 0x000000010001c011 restore-symbol`-[CDLCDyldInfo initWithDataCursor:](self=0x000060000261c000, _cmd="initWithDataCursor:", cursor=0x0000600000c0c000) at CDLCDyldInfo.m:86:20
    frame #2: 0x000000010002591a restore-symbol`+[CDLoadCommand loadCommandWithDataCursor:](self=CDLoadCommand, _cmd="loadCommandWithDataCursor:", cursor=0x0000600000c0c000) at CDLoadCommand.m:112:12
    frame #3: 0x00000001000297cd restore-symbol`-[CDMachOFile _readLoadCommands:count:](self=0x0000600003900000, _cmd="_readLoadCommands:count:", cursor=0x0000600000c0c000, count=62) at CDMachOFile.m:147:38
    frame #4: 0x00000001000295ae restore-symbol`-[CDMachOFile initWithData:filename:searchPathState:](self=0x0000600003900000, _cmd="initWithData:filename:searchPathState:", data=1652576 bytes, filename=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip", searchPathState=0x0000000000000000) at CDMachOFile.m:130:9
    frame #5: 0x0000000100026bd2 restore-symbol`+[CDFile fileWithContentsOfFile:searchPathState:](self=CDFile, _cmd="fileWithContentsOfFile:searchPathState:", filename=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip", searchPathState=0x0000000000000000) at CDFile.m:129:30
    frame #6: 0x00000001000049d0 restore-symbol`restore_symbol(inpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip", outpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip_", jsonPath=0x0000000000000000, oc_detect_enable=true, replace_restrict=false) at restore-symbol.m:67:22
    frame #7: 0x000000010000fa4c restore-symbol`main(argc=4, argv=0x00007ff7bfeff350) at main.m:127:5
    frame #8: 0x00007ff8021af41f dyld`start + 1903

在这里插入图片描述

CDLCDyldInfo会执行动态符号绑定


(lldb) bt
* thread #1, stop reason = breakpoint 45.1
  * frame #0: 0x000000010001d5ab restore-symbol`-[CDLCDyldInfo bindAddress:type:symbolName:flags:addend:libraryOrdinal:](self=0x0000600002600180, _cmd="bindAddress:type:symbolName:flags:addend:libraryOrdinal:", address=4296149112, type='\x01', symbolName="_kTISPropertyLocalizedName", flags='\0', addend=0, libraryOrdinal=5) at CDLCDyldInfo.m:440:34
    frame #1: 0x000000010001d172 restore-symbol`-[CDLCDyldInfo logBindOps:end:isLazy:](self=0x0000600002600180, _cmd="logBindOps:end:isLazy:", start="\U00000012@_OBJC_CLASS_$_SRGlobalShortcutMonitor", end="@__ZdlPv", isLazy=NO) at CDLCDyldInfo.m:384:17
    frame #2: 0x000000010001c8f0 restore-symbol`-[CDLCDyldInfo parseBindInfo](self=0x0000600002600180, _cmd="parseBindInfo") at CDLCDyldInfo.m:264:5
    frame #3: 0x000000010001bf6d restore-symbol`-[CDLCDyldInfo machOFileDidReadLoadCommands:](self=0x0000600002600180, _cmd="machOFileDidReadLoadCommands:", machOFile=0x0000600003900000) at CDLCDyldInfo.m:99:5
    frame #4: 0x0000000100029def restore-symbol`-[CDMachOFile _readLoadCommands:count:](self=0x0000600003900000, _cmd="_readLoadCommands:count:", cursor=0x0000600000c14000, count=62) at CDMachOFile.m:180:9
    frame #5: 0x000000010002945e restore-symbol`-[CDMachOFile initWithData:filename:searchPathState:](self=0x0000600003900000, _cmd="initWithData:filename:searchPathState:", data=1652576 bytes, filename=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip", searchPathState=0x0000000000000000) at CDMachOFile.m:130:9
    frame #6: 0x0000000100026a82 restore-symbol`+[CDFile fileWithContentsOfFile:searchPathState:](self=CDFile, _cmd="fileWithContentsOfFile:searchPathState:", filename=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip", searchPathState=0x0000000000000000) at CDFile.m:129:30
    frame #7: 0x0000000100004720 restore-symbol`restore_symbol(inpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip", outpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip_", jsonPath=0x0000000000000000, oc_detect_enable=true, replace_restrict=false) at restore-symbol.m:67:22
    frame #8: 0x000000010000f79c restore-symbol`main(argc=4, argv=0x00007ff7bfeff350) at main.m:127:5
    frame #9: 0x00007ff8021af41f dyld`start + 1903

普通绑定、弱绑定和懒绑定
在 Mach-O 文件格式里,绑定是把符号引用和它的实际定义关联起来的过程。普通绑定、弱绑定和懒绑定是三种不同的绑定机制,它们在绑定时机、处理未定义符号的方式等方面存在差异。下面为你详细介绍:
普通绑定(Regular Binding)

绑定时机:在程序加载时就完成绑定。
处理未定义符号的方式:要是存在未定义的符号,程序加载会失败。
应用场景:适用于程序启动阶段必须要用到的符号。
示例:程序启动时就需要调用的基础库函数,像 printf。
弱绑定(Weak Binding)

绑定特性:符号引用属于弱引用。即便符号未被定义,程序依旧可以加载和运行。
绑定时机:在程序加载时进行绑定。
处理未定义符号的方式:当符号未定义时,会将其解析为 NULL(在运行时可以检查)。
应用场景:用于可选的功能模块,或者实现向后兼容。
示例:在较新的系统版本中存在某个函数,但在旧版本中不存在,此时可以使用弱绑定。
懒绑定(Lazy Binding)

绑定时机:符号引用在第一次被使用时才进行绑定,而非程序加载时。
实现机制:借助延迟绑定表(lazy_symbol_bindings)和动态链接器来实现。
优势:能够加快程序的启动速度,因为不需要在启动时绑定所有符号。
应用场景:适用于那些不一定会被调用的函数,比如回调函数。
示例:GUI 应用中的菜单回调函数,用户不点击菜单就不会调用。
代码示例

下面通过一个简单的代码示例,来展示这三种绑定的不同用法:

#include <stdio.h>
#include <dlfcn.h>

// 普通绑定:直接调用标准库函数
void regular_binding() {
    printf("This is a regular binding example.\n");
}

// 弱绑定:使用弱引用的外部函数
__attribute__((weak)) void weak_function();
void weak_binding() {
    if (weak_function) {
        weak_function(); // 如果函数存在则调用
    } else {
        printf("weak_function is not available.\n");
    }
}

// 懒绑定:使用 dlsym 在运行时动态解析符号
void lazy_binding() {
    void (*lazy_function)() = dlsym(RTLD_DEFAULT, "lazy_function");
    if (lazy_function) {
        lazy_function(); // 第一次调用时才会绑定
    } else {
        printf("lazy_function not found.\n");
    }
}

int main() {
    regular_binding();
    weak_binding();
    lazy_binding();
    return 0;
}

只有被用到的符号采集才会保留动态绑定信息

在这里插入图片描述

2.读取 symbol

加载符号


* thread #1, stop reason = breakpoint 10.1
  * frame #0: 0x0000000100023bdc restore-symbol`-[CDLCSymbolTable loadSymbols](self=0x000060000261c060, _cmd="loadSymbols") at CDLCSymbolTable.m:177:27
    frame #1: 0x000000010002ff81 restore-symbol`-[CDObjectiveCProcessor process](self=0x0000600000c12880, _cmd="process") at CDObjectiveCProcessor.m:137:9
    frame #2: 0x0000000100013415 restore-symbol`-[CDClassDump processObjectiveCData](self=0x000060000211c230, _cmd="processObjectiveCData") at CDClassDump.m:189:9
    frame #3: 0x0000000100004600 restore-symbol`restore_symbol(inpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip", outpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip_", jsonPath=0x0000000000000000, oc_detect_enable=true, replace_restrict=false) at restore-symbol.m:100:13
    frame #4: 0x000000010000f3b8 restore-symbol`main(argc=4, argv=0x00007ff7bfeff350) at main.m:128:5
    frame #5: 0x00007ff80427e41f dyld`start + 1903

在这里插入图片描述

3.读取 protocol


* thread #1, stop reason = breakpoint 23.1
  * frame #0: 0x0000000100037661 restore-symbol`-[CDObjectiveC2Processor loadMethodsAtAddress:extendedMethodTypesCursor:](self=0x0000600000c0e520, _cmd="loadMethodsAtAddress:extendedMethodTypesCursor:", address=4296239600, extendedMethodTypesCursor=0x0000600000c349f0) at CDObjectiveC2Processor.m:425:14
    frame #1: 0x0000000100033e49 restore-symbol`-[CDObjectiveC2Processor protocolAtAddress:](self=0x0000600000c0e520, _cmd="protocolAtAddress:", address=4296443720) at CDObjectiveC2Processor.m:119:36
    frame #2: 0x000000010003341e restore-symbol`-[CDObjectiveC2Processor loadProtocols](self=0x0000600000c0e520, _cmd="loadProtocols") at CDObjectiveC2Processor.m:34:9
    frame #3: 0x000000010002f7f3 restore-symbol`-[CDObjectiveCProcessor process](self=0x0000600000c0e520, _cmd="process") at CDObjectiveCProcessor.m:140:9
    frame #4: 0x00000001000127f5 restore-symbol`-[CDClassDump processObjectiveCData](self=0x00006000021144b0, _cmd="processObjectiveCData") at CDClassDump.m:189:9
    frame #5: 0x00000001000039e0 restore-symbol`restore_symbol(inpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip", outpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip_", jsonPath=0x0000000000000000, oc_detect_enable=true, replace_restrict=false) at restore-symbol.m:100:13
    frame #6: 0x000000010000e798 restore-symbol`main(argc=4, argv=0x00007ff7bfeff350) at main.m:128:5
    frame #7: 0x00007ff80427e41f dyld`start + 1903


- (void)process;
{
    if (self.machOFile.isEncrypted == NO && self.machOFile.canDecryptAllSegments) {
        [self.machOFile.symbolTable loadSymbols];
        [self.machOFile.dynamicSymbolTable loadSymbols];

        [self loadProtocols];
        [self.protocolUniquer createUniquedProtocols];

        // Load classes before categories, so we can get a dictionary of classes by address.
        [self loadClasses];
        [self loadCategories];
    }
}

4.读取 class



(lldb) bt
* thread #1, stop reason = breakpoint 19.1
  * frame #0: 0x00000001000376b8 restore-symbol`-[CDObjectiveC2Processor loadMethodsAtAddress:extendedMethodTypesCursor:](self=0x0000600000c20360, _cmd="loadMethodsAtAddress:extendedMethodTypesCursor:", address=0, extendedMethodTypesCursor=0x0000000000000000) at CDObjectiveC2Processor.m:429:13
    frame #1: 0x0000000100033e49 restore-symbol`-[CDObjectiveC2Processor protocolAtAddress:](self=0x0000600000c20360, _cmd="protocolAtAddress:", address=4296443528) at CDObjectiveC2Processor.m:119:36
    frame #2: 0x000000010003341e restore-symbol`-[CDObjectiveC2Processor loadProtocols](self=0x0000600000c20360, _cmd="loadProtocols") at CDObjectiveC2Processor.m:34:9
    frame #3: 0x000000010002f7f3 restore-symbol`-[CDObjectiveCProcessor process](self=0x0000600000c20360, _cmd="process") at CDObjectiveCProcessor.m:140:9
    frame #4: 0x00000001000127f5 restore-symbol`-[CDClassDump processObjectiveCData](self=0x00006000021180a0, _cmd="processObjectiveCData") at CDClassDump.m:189:9
    frame #5: 0x00000001000039e0 restore-symbol`restore_symbol(inpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip", outpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip_", jsonPath=0x0000000000000000, oc_detect_enable=true, replace_restrict=false) at restore-symbol.m:100:13
    frame #6: 0x000000010000e798 restore-symbol`main(argc=4, argv=0x00007ff7bfeff350) at main.m:128:5
    frame #7: 0x00007ff80427e41f dyld`start + 1903

通过读取类 __objc_classrefs ,获取方法名和地址


(lldb) bt
* thread #1, stop reason = breakpoint 15.1
  * frame #0: 0x0000000100037651 restore-symbol`-[CDObjectiveC2Processor loadMethodsAtAddress:extendedMethodTypesCursor:](self=0x0000600000c1a8b0, _cmd="loadMethodsAtAddress:extendedMethodTypesCursor:", address=4296237768, extendedMethodTypesCursor=0x0000000000000000) at CDObjectiveC2Processor.m:425:14
    frame #1: 0x00000001000371cd restore-symbol`-[CDObjectiveC2Processor loadMethodsAtAddress:](self=0x0000600000c1a8b0, _cmd="loadMethodsAtAddress:", address=4296237768) at CDObjectiveC2Processor.m:387:12
    frame #2: 0x0000000100037170 restore-symbol`-[CDObjectiveC2Processor loadMethodsOfMetaClassAtAddress:](self=0x0000600000c1a8b0, _cmd="loadMethodsOfMetaClassAtAddress:", address=4296424296) at CDObjectiveC2Processor.m:382:12
    frame #3: 0x0000000100036392 restore-symbol`-[CDObjectiveC2Processor loadClassAtAddress:](self=0x0000600000c1a8b0, _cmd="loadClassAtAddress:", address=4296424256) at CDObjectiveC2Processor.m:298:32
    frame #4: 0x000000010003352b restore-symbol`-[CDObjectiveC2Processor loadClasses](self=0x0000600000c1a8b0, _cmd="loadClasses") at CDObjectiveC2Processor.m:44:29
    frame #5: 0x000000010002f82b restore-symbol`-[CDObjectiveCProcessor process](self=0x0000600000c1a8b0, _cmd="process") at CDObjectiveCProcessor.m:144:9
    frame #6: 0x00000001000127e5 restore-symbol`-[CDClassDump processObjectiveCData](self=0x00006000021043c0, _cmd="processObjectiveCData") at CDClassDump.m:189:9
    frame #7: 0x0000000100003990 restore-symbol`restore_symbol(inpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip", outpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip_", jsonPath=0x0000000000000000, oc_detect_enable=true, replace_restrict=false) at restore-symbol.m:100:13
    frame #8: 0x000000010000e748 restore-symbol`main(argc=4, argv=0x00007ff7bfeff350) at main.m:128:5
    frame #9: 0x00007ff80427e41f dyld`start + 1903

5.将符号恢复为方法名


(lldb) bt
* thread #1, stop reason = breakpoint 4.1
  * frame #0: 0x000000010000ff57 restore-symbol`-[RSSymbolCollector addSymbol:](self=0x0000600000210180, _cmd="addSymbol:", symbol=0x00006000002867e0) at RSSymbolCollector.m:34:6
    frame #1: 0x000000010000ed02 restore-symbol`-[RSScanMethodVisitor visitClassMethod:](self=0x0000600000d59110, _cmd="visitClassMethod:", method=0x0000600000c3f3f0) at RSScanMethodVisitor.m:85:5
    frame #2: 0x000000010003da4e restore-symbol`-[CDOCProtocol visitMethods:propertyState:](self=0x000060000261c540, _cmd="visitMethods:propertyState:", visitor=0x0000600000d59110, propertyState=0x00006000002d0520) at CDOCProtocol.m:197:9
    frame #3: 0x0000000100039481 restore-symbol`-[CDOCClass recursivelyVisit:](self=0x000060000261c540, _cmd="recursivelyVisit:", visitor=0x0000600000d59110) at CDOCClass.m:87:9
    frame #4: 0x00000001000302a6 restore-symbol`-[CDObjectiveCProcessor recursivelyVisit:](self=0x0000600000c1a2e0, _cmd="recursivelyVisit:", visitor=0x0000600000d59110) at CDObjectiveCProcessor.m:198:9
    frame #5: 0x0000000100012a3e restore-symbol`-[CDClassDump recursivelyVisit:](self=0x0000600002110230, _cmd="recursivelyVisit:", visitor=0x0000600000d59110) at CDClassDump.m:200:9
    frame #6: 0x0000000100003a04 restore-symbol`restore_symbol(inpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip", outpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip_", jsonPath=0x0000000000000000, oc_detect_enable=true, replace_restrict=false) at restore-symbol.m:105:13
    frame #7: 0x000000010000e748 restore-symbol`main(argc=4, argv=0x00007ff7bfeff350) at main.m:128:5
    frame #8: 0x00007ff80427e41f dyld`start + 1903

6.生成缺失的符号的恢复表


* thread #1, stop reason = breakpoint 22.1
  * frame #0: 0x00000001000104f2 restore-symbol`-[RSSymbolCollector generateAppendStringTable:appendSymbolTable:](self=0x000060000021c520, _cmd="generateAppendStringTable:appendSymbolTable:", stringTable=0x00007ff7bfefedf0, symbolTable=0x00007ff7bfefede8) at RSSymbolCollector.m:87:33
    frame #1: 0x0000000100003beb restore-symbol`restore_symbol(inpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip", outpath=@"/Users/lee/Desktop/Reverse_Engineering/Tool/restore-symbol/test/PopClip_", jsonPath=0x0000000000000000, oc_detect_enable=true, replace_restrict=false) at restore-symbol.m:133:5
    frame #2: 0x000000010000e748 restore-symbol`main(argc=4, argv=0x00007ff7bfeff350) at main.m:128:5
    frame #3: 0x00007ff80427e41f dyld`start + 1903

7.将恢复表插入符号表后面


    // must first insert string
    [outData replaceBytesInRange:NSMakeRange(origin_string_table_offset + origin_string_table_size , 0) withBytes:(const void *)string_table_append_data.bytes   length:increase_size_string_tab + string_table_padding];
    
    [outData replaceBytesInRange:NSMakeRange(origin_symbol_table_offset + origin_symbol_table_num * NListSize , 0) withBytes:(const void *)symbol_table_append_data.bytes   length:increase_size_symtab];

8.symbol table 中 string_table 和 symbol_table 的区别

NSData *string_table_append_data = nil;
NSData *symbol_table_append_data = nil;
[collector generateAppendStringTable:&string_table_append_data appendSymbolTable:&symbol_table_append_data];

原程序
原程序

完整添加符号的程序
完整添加符号的程序

没有添加string_table 的程序没有添加string_table 的程序

可以看到 添加符号号后 符号表增大,如果只添加了 symbol_table 则所有符号表增大同样大小,但是 会显示不了符号;

SECS/GEM协议学习教程 摘要:SECS/GEM是半导体制造设备通信的国际标准,定义了主机系统与设备间的通信规范,包括设备控制、状态监控、数据采集等功能。协议采用分层架构(应用层、消息层、传输层、物理层),支持关键消息类型如S1F13(建立通信)、S2F13(数据采集)等。通信流程涵盖建立连接、数据交换和终止会话,并通过状态变量(SVID)、事件(CEID)等实现实时交互。典型应用包括设备初始化、报警处理及配方管理,需处理数据类型(如U2、A、L)和通信调试问题。 阅读详情

相关推荐

CS224W图神经网络实战:如何用Motifs和Graphlets分析社交网络结构?

本文基于斯坦福CS224W课程,深入探讨了如何利用网络模体(Motifs)和图元(Graphlets)分析社交网络的微观结构。通过实战代码演示,文章介绍了如何识别具有统计显著性的关键连接模式,计算节点的图元度向量以刻画局部拓扑特征,并将这些结构洞见应用于社区发现、影响力分析及图神经网络的节点特征工程,从而提升模型在虚假账号检测等任务中的性能。

2w3e4r5t6y的博客 911

IPAPatch符号恢复技术:restore-symbol工具完整指南

IPAPatch项目中的符号恢复工具restore-symbol是iOS逆向工程领域的重要利器,能够在不越狱的情况下恢复被剥离的符号信息,为应用调试和分析提供强大支持。💪 ## 什么是符号恢复技术? 在iOS应用开发中,为了减小应用体积和提高安全性,开发者通常会在发布时剥离应用的调试符号。然而,这些符号对于逆向分析和调试至关重要。**restore-symbol工具**通过智能算法重新构建符

gitblog_00880的博客 716

Hermes+MemOS记忆系统:用SQLite构建可编辑AI个人认知资产

AI记忆不是简单延长上下文或叠加RAG,而是构建具备分层存储、混合检索与自然语言反馈能力的个人认知资产。其核心原理在于将用户交互痕迹(L1)、偏好策略(L2)、结构化世界模型(L3)和结晶化技能统一管理,实现记忆的可追溯、可修正、可进化。技术价值体现在降低token消耗、提升长程一致性、支持离线演进,并突破传统‘静态快照’式知识库局限。典型应用场景包括个人知识助手、客服工单分析Agent、研发文档理解系统等。本文聚焦Hermes Agent与MemOS深度集成方案,详解SQLite作为ACID底座支撑L1/

weixin_33623304的博客 434

MonkeyDev中的class-dump技术:快速分析iOS应用结构的终极指南

MonkeyDev是一款强大的iOS逆向工程工具,它集成了class-dump技术,让开发者能够在不越狱的情况下快速分析iOS应用的结构和类信息。这项技术对于iOS应用开发、安全研究和逆向分析都具有重要意义。 ## 🔍 什么是class-dump技术? class-dump是iOS逆向工程中的核心技术之一,它能够从已编译的iOS应用程序中提取出Objective-C类的接口信息。通过Monk

gitblog_00474的博客 405

[官方培训]07-UE材质基础 孙丹璐 Epic 笔记

勾选允许自定义深度写入再在模型上勾选然后可以通过Scene Texture节点拿到渲染的自定义深度信息,有了自定义深度信息就可以与当前渲染的像素深度进行对比,自定义深度信息存放的是最靠近我们的深度,如果当前像素离自定义深度比较远我们就不要这个像素。效果如下这种方案的缺点也很明显,因为这样看不到第二层的透明了,如果是两层的半透明的裙摆,这样就看不到第二层的裙摆了。对于半透明排序问题最根本能解决的还是光线追踪,ue5中又加入了OIT(基于像素的排序)。官方透明材质的理解和应用。

Tcohneyn的博客 1562

声纹识别实战:用Python从零搭建一个简易声纹验证系统(附完整代码)

本文是一份详细的声纹识别实战指南,教你使用Python从零搭建一个简易的声纹验证系统。文章涵盖了从音频采集、预处理、MFCC特征提取,到基于高斯混合模型(GMM)的建模与验证全流程,并提供了完整的代码实现,帮助开发者快速掌握这项生物特征识别核心技术。

ik6789012的博客 231

iOS 逆向工具 - restore-symbol

iOS应用在上线前都会裁去符号表,以避免被逆向分析,restore-symbol 便是用于恢复符号表的利器。 符号表原理:https://blog.youkuaiyun.com/sharpyl/article/details/88610991 git:https://github.com/tobefuturer/restore-symbol 1.下载源码编译 git clone --recursive ht...

sharpyl的专栏 1710

用Python实现四叉树(quad tree)

import numpy as np #正方形类 class square: #lx、ly为左上角坐标(x对应行号,y对应列号),rx、ry为右下角坐标 def __init__(self,lx,ly,rx,ry): self.lx=lx self.ly=ly self.rx=rx self.ry=ry #检查该矩阵中是否满足条件 #参数:原矩阵,阈值 #返回值:布尔类型 def check(s

weixin_44164489的博客 5868

restore-symbol编译与使用

1、Mac电脑中新建一个文件夹restoresym 2、终端命令行 cd 到restoresym文件夹 3、在restoresym文件夹目录下 输入终端命令如下 git clone --recursive https://github.com/tobefuturer/restore-symbol.git 得到结果 Cloning into 'restore-symbol'... remote: Enumerating objects: 85, done. remote: Total 85 (delta 0

zhaosuningzsn的博客 1042

Android SDK安装教程(超详细),从零基础入门到精通,从这篇开始_android sdk下载安装

Android SDK安装教程(超详细),从零基础入门到精通,从这篇开始_android sdk下载安装

Jinmindong 5013

基于ESP32的智能厨房控制系统开发

随着智能家居技术的发展,越来越多的家庭开始将传统的厨房设备进行智能化改造,以提高烹饪效率和生活质量。智能厨房控制系统是物联网(IoT)应用的重要组成部分,它将家居设备、传感器和网络结合起来,提供便捷的控制与监测功能,使厨房的烹饪过程更加智能、便捷和安全。基于ESP32的智能厨房控制系统不仅能够实现远程控制和监控,还能实现温度、湿度、烹饪状态的实时反馈,甚至具备智能化的推荐和自动化控制能力。ESP32是一款功能强大、集成度高的嵌入式开发平台,具有Wi-Fi和蓝牙双模通信能力,广泛应用于物联网设备的开发。

2201_76125393的博客 658

IPAPatch工具链详解:optool、restore-symbol核心使用指南

IPAPatch 是一款强大的 iOS 应用补丁工具,让开发者无需越狱就能对第三方应用进行代码注入和调试。在这套工具链中,**optool** 和 **restore-symbol** 是两个核心组件,负责实现动态库加载和符号表恢复的关键功能。 ## 🔧 IPAPatch工具链架构概览 IPAPatch 项目结构清晰,工具链组件分工明确: - **Tools/optool** - 动态库加

gitblog_00224的博客 564

基于Proximal Policy Optimization的无人机姿态控制系统的研究及Matlab实现

本文简要介绍了基于Proximal Policy Optimization算法的无人机姿态控制系统,并使用Matlab实现了一个简化版的代码。PPO算法的特点在于能够解决强化学习中的部分可观察性问题,同时还能保持策略网络更新的稳定性。本文将介绍基于Proximal Policy Optimization(PPO)算法的无人机姿态控制系统,并使用Matlab进行简化版实现。无人机姿态控制是指通过调整飞行器各部件的参数,使其保持特定角度、方向和位置的状态。本文将实现无人机的横滚姿态控制,并将其作为实现的示例。

m0_47037246的博客 715

Positron Agent Host:基于 `resumeSessionAt` 为 Claude 实现就地 `truncateSession`(Restore Checkpoint 实战剖析)

> 本篇指南围绕 Positron 仓库中 `src/vs/platform/agentHost/node/claude/phase6.7-plan.md` 这一实现计划展开,系统讲解 Agent Host 如何让 Claude Agent 支持工作台的 **Restore Checkpoint(恢复检查点)** 与 **Start Over(重新开始)** 两个会话操作。读者将掌握:`IAgen

gitblog_01174的博客 184

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

psql error: psql: symbol lookup error: psql: undefined symbol: PQconnectdbParams

linux遇到一个Postgresql的问题,在调用pg_restore时: ./pg_restore -h 127.0.0.1 -p 5432 -U postgres -v -d dbname /usr/local/backup.tar 出了一个错 psql error: psql: symbol lookup error: psql: undefined symbol: PQconne...

麦芽面包 (源码:咖啡:红茶) 3426

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

[leetcode] restore IP address

Given a string containing only digits, restore it by returning all possible valid IP address combinations. For example: Given "25525511135", return ["255.255.11.135", "255.255.111.35"]. (Order

uknowfigo的专栏 374

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

深入 TypeScript 编译器(typescript-book):理解 Binder 的 Container 机制与符号作用域组织

本篇技术指南围绕 typescript-book 仓库中 [docs/compiler/binder-container.md](https://link.gitcode.com/i/e4a06d91fb9db56e18f4ed83fdc9e8c1) 展开,深入剖析 TypeScript 编译器中 Binder(绑定器)的 **Container(容器)** 概念:AST 节点如何被标记为容器、`

gitblog_00320的博客 430

Keil 5出现Error: L6218E: Undefined symbol解决方法

首先列出网上百度到比较好的blog: blog1:https://blog.youkuaiyun.com/super_demo/article/details/32131379 总结了代码中可能因为几种初级或者粗心引起的错误。 blog2:https://blog.youkuaiyun.com/zhizuwei/article/details/86017618 总结了因为C和C++代码混合调用引起的未定...

weixin_30781631的博客 3860

逆向 - 恢复符号表

获取符号表偏移前的地址 当App准备上线打生产环境的包时,编译器去掉符号表信息;所以在iOS逆向调试的时候,lldb调试中查看代码的函数调用栈时符号偏移前的地址 = 符号偏移后的地址(lldb断点地址) - ASLR偏移地址,其中 ASLR偏移地址是App启动后系统分配的内存区域的的首地址,在lldb中通过image list -o -f来获取某一进程的ASLR地址。如下图获取QQ的ASLR地址...

Coder 3212

iOS逆向之旅 — 总纲

逆向杂谈 因为我大学期间开发游戏外挂,对于逆向的强大有过不小的认识。能让别人的代码照着自己的思路去走,感觉是蛮好玩的一件事。所以带着好奇心去研究了iOS逆向。对于iOS逆向,很多人只听过《IOS应用逆向工程》,单纯通过书籍还有杂乱的博文,想要入门还是挺难的。其实iOS逆向没想象中那么难,只要我们找到方法。你想想【游戏外挂】只是单纯凭借C++基础/数据结构去逆向一个大型网游,而现在我们有过正向iOS...

weixin_33921089的博客 134

HyperCeiler 布局适配 Commit 功耗静态审计实战指南:从 704 B 栈帧到每帧矩阵缩放的排查方法论

本篇指南以 HyperCeiler 仓库交接文档 [docs/handover/LAYOUT_COMMITS_POWER_AUDIT.md](https://link.gitcode.com/i/f16bce854ff3a1111959bf04fcd479ad) 为骨架,完整还原一次针对 6 个「布局适配」commit 的**纯静态只读功耗审计**过程:不连接设备、不运行构建、不改动任何代码,仅通

gitblog_00647的博客 295

ios崩溃日志分析,无dSYM文件

业务场景 大部分情况下,我们都拿不到dSYM文件,只有一份ipa文件+一个crash文件,应该如何定位具体崩溃的代码呢? 实例说明 首先本人建立了一个demo工程,写了一段会crash的代码,如下图 然后打包成ipa包,如下 安装到手机上,运行,得到崩溃日志,如下 可以看到上面有两个信息,一个是运行崩溃的手机架构是arm64,一个是下面的未符号化的地址信息。 1,首先我们需要先对我们的执行文件瘦身,获取到arm64的执行文件,使用命令 lipo -thin arm64 test/yzzs -output

wocalage的博客 699

linux系统调用实现代码分析【转】

转自:http://linux.chinaunix.net/doc/kernel/2001-07-30/637.shtml 启动早就读完,现在为了写笔记再从启动之后粗略的大体读一遍,基本就是几个大模块:启动和初始化,中断信号, 进程及调度,内存管理,文件系统,网络,驱动和模块等,我主要也从这几块入手。由于启动部分在start_kernel之 前牵涉...

weixin_34419321的博客 84

@eggjs/mock 单元测试库解析:从 CHANGELOG 看 Egg Mock 能力的完整演进脉络

`@eggjs/mock`(仓库路径 [plugins/mock](https://link.gitcode.com/i/f1810d8ba6ebb934c127d72758996881))是 Egg 官方用于测试 Egg 应用、插件与自定义框架的 Mock 库,在 Egg 生态单元测试中承担“拉起被测应用、注入测试上下文、模拟外部 HTTP 依赖”的核心角色。本文以该包的 [CHANGELOG.

gitblog_00642的博客 352

linux系统调用实现代码分析

         作者:大鹰2001年6月5日启动早就读完,现在为了写笔记再从启动之后粗略的大体读一遍,基本就是几个大模块:启动和初始化,中断信号,进程及调度,内存管理,文件系统,网络,驱动和模块等,我主要也从这几块入手。由于启动部分在start_kernel之前牵涉到大量的x86体系相关的汇编知识,需要大量的时间,于是我跳过,先把握整个系统的大体脉络,然后做二次,三次分析。网络部分的分析,我会从

~缘份天空~ 798

Android 14+ 模拟器抓包实录:把 Burp CA 装成系统 CA,让 targetSdk≥34 的 App 乖乖解密

本文记录了在 Android 14+ 环境下,通过将 Burp CA 安装为系统信任锚,成功抓取 targetSdk=35 App 的 HTTPS 明文流量的完整实操过程。针对“浏览器可用、App 不可用”的典型现象,精准识别出根本原因是系统级证书信任策略变更(用户安装的 CA 被屏蔽),而非 SSL Pinning。仅通过 adb 命令将 CA 推送至系统证书存储并重启生效,无需 Frida、Objection 或修改 APK,实现零侵入解密。全文命令均基于 Windows + MuMu 模拟器环境实测通

JIANqiao19931029的博客 342
上一篇: 【无标题】
下一篇: fishhook 原理
滑板小王子
博客等级 码龄9年 19粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值