【问题标题】:Logging Function Arguments for iOS AppiOS 应用程序的日志记录函数参数
【发布时间】:2014-08-12 13:54:35
【问题描述】:

我一直试图弄清楚我下载的应用程序中的一个功能是如何工作的,但我似乎无法理解。到目前为止,我设法获得了功能代码,但它不可读。我真正需要的是看看其中一个论点是什么,但我不确定我该怎么做。

我的手机越狱了,所以我安装了 Flex,但它似乎没有提供任何东西,除了对返回值和参数值进行调整,这对其他事情很有帮助。

我尝试对 MobileSubstrate 进行调整,但每次使用 make 编译它时都会出错。

*** first argument to word function must be greater than 0. Stop.

%hook TestClass

- (id)function {
    return "test";
}
%end

还有其他方法可以覆盖函数并记录其参数吗?或者也许有一些调试工具可以为我记录每一件事,我可以找到我正在寻找的东西?任何帮助表示赞赏。谢谢。

【问题讨论】:

    标签: ios jailbreak cydia


    【解决方案1】:

    您可以将给定函数的参数打印到控制台。 (系统日志)。

    %hook TestClass
    
    -(void)functionName:(BOOL)isFunction {
         %orig;
        NSLog(@"%@",isFunction);
    }
    %end
    

    (BOOL)isFunction 但可能未知。但是通过转储标题,您可以获得类似于 -(void)functionName:(id)arg1; 的内容。然后,您可以像上面显示的那样简单地将 arg1 打印到控制台。

    【讨论】:

      【解决方案2】:

      据我记得,您遇到的“theos”错误意味着您的 sdks 文件夹中没有 SDK。

      如果您尝试查找参数的类型,可以使用该方法中的 UIAlertView 进行检查。

      %hook HookedClass
      
      - (void)someMethod:(id)arg1 {
      
          // call original method
          %orig;
      
          // whenever the method is called show type and value using UIAlertView
          UIAlertView *className = [[UIAlertView alloc] 
              initWithTitle:[NSString stringWithFormat:@"arg1 is a %@",[arg1 class]] 
              message:[NSString stringWithFormat:@"value: %@",arg1] 
              delegate:nil 
              cancelButtonTitle:@"Okay" 
              otherButtonTitles:nil];
          [className show];
          [className release];
      }
      
      %end
      

      或者你可以简单地使用一个标志指令%log来记录它(你需要安装系统日志来检查日志):

      %hook HookedClass
      
      - (void)someMethod:(id)arg1 {
           %log;
           %orig;
      }
      %end
      

      你可以了解更多关于标志指令here

      Ben Gerard 说的不对,你不能用 %@ 记录布尔值

      For NSString you use %@
      For int  you use %i
      For float you use %f
      For double you use %lf
      

      【讨论】:

      • 我已经修复了theos错误。我确实在文件夹中有一个 SDK,但我只是删除了它并安装了一个新的,它就可以工作了。无论如何,我得到了它的工作,但感谢您提供更详细的答案!
      【解决方案3】:

      我在我的调整中使用这个%log 在控制台日志中查看。

      %hook TestClass
      
      -(void)functionName:(BOOL)isFunction {
           %log;
           %orig;
      }
      %end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-19
        • 2014-10-01
        • 1970-01-01
        • 2019-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多