Macos 如何在运行时为Mac上的任何应用程序找到objective-c方法?

Macos 如何在运行时为Mac上的任何应用程序找到objective-c方法?,macos,reverse-engineering,ida,dtrace,hopper,Macos,Reverse Engineering,Ida,Dtrace,Hopper,例如,您有TextEdit应用程序,当您保存文件时,我想知道调用了哪些objective-c方法。我有使用类转储的Textedit文件头 有没有办法知道这些方法中的哪一个(我们从类转储输出的)在运行时被调用 使用dtrace有什么方法可以做到这一点吗?假设Objective-C方法直接转换为用户空间函数调用,您应该能够使用: 提供程序的pid pid提供程序使您能够跟踪 处理。与大多数其他提供程序不同,pid探测是在 根据在D程序中找到的探测器描述进行需求 用户功能边界跟踪 pid提供程序最简单

例如,您有TextEdit应用程序,当您保存文件时,我想知道调用了哪些objective-c方法。我有使用类转储的Textedit文件头

有没有办法知道这些方法中的哪一个(我们从类转储输出的)在运行时被调用


使用dtrace有什么方法可以做到这一点吗?

假设Objective-C方法直接转换为用户空间函数调用,您应该能够使用:

提供程序的
pid

pid
提供程序使您能够跟踪 处理。与大多数其他提供程序不同,
pid
探测是在 根据在D程序中找到的探测器描述进行需求

用户功能边界跟踪

pid
提供程序最简单的操作模式是用户 空间模拟到
fbt
提供程序。下面的示例程序 跟踪从单个函数生成的所有函数项和返回 功能。
$1
宏变量扩展到 命令行。此宏变量是要执行的进程的进程ID 跟踪。
$2
宏变量扩展到 命令行。此宏变量是所有 函数调用跟踪自

示例4-3
userfunc.d
:跟踪用户函数条目并返回

pid$1::$2:entry
{
  self->trace = 1;
}

pid$1::$2:return
/self->trace/
{
  self->trace = 0;
}

pid$1:::entry,
pid$1:::return
/self->trace/
{
}
此脚本生成的输出类似于以下示例:

# ./userfunc.d 15032 execute
dtrace: script './userfunc.d' matched 11594 probes
  0  -> execute                               
  0    -> execute                             
  0      -> Dfix                              
  0      <- Dfix                              
  0      -> s_strsave                         
  0        -> malloc                          
  0        <- malloc                          
  0      <- s_strsave                         
  0      -> set                               
  0        -> malloc                          
  0        <- malloc                          
  0      <- set                               
  0      -> set1                              
  0        -> tglob                           
  0        <- tglob                           
  0      <- set1                              
  0      -> setq                              
  0        -> s_strcmp                        
  0        <- s_strcmp                        
...
#/userfunc.d 15032执行
dtrace:脚本“/userfunc.d”匹配了11594个探测
0->执行
0->执行
0->Dfix
0 s_strsave
0->malloc
0马洛克
0 tglob
0 s\u strcmp

0谢谢您提供的信息。但我需要更多。我有文本编辑的类转储。在这方面,我想了解-(BOOL)validateNuitem:(id)arg1;类文档是否执行。因此,我使用了您的脚本并使用dtrace-s userfunc.d 1102 validateNuitem执行。。。它说探针描述不匹配。怎么办???@hrishikeshchaudhari函数名可能不完全是
validateNuitem
。很可能。我不熟悉OSX,不知道有什么实用程序可以在二进制文件中查找实际损坏的函数名<代码>字符串-a/bin/file | grep-i validateNuitem
可能有效。这可能会有所帮助:将DTrace脚本缩短为类似于
pid$1:::entry{}
可能会发出该进程进行的所有函数调用。我现在无法测试。你可能是对的,功能被破坏了。现在只有通过逆向工程或反复试验才能做到这一点。我真想知道人们是怎么喝的。逆向工程可能需要几天才能找到准确的函数来进行swizzling。@Andrew Henle对MacOSX中的逆向工程以及如何进行有何评论??我猜IDA和dtrace是mac上用于逆向工程的一些工具。