如何在 REPL 模式下编写循环?

How to write a loop in REPL mode?

我想在 REPL 模式下执行循环,但出现语法错误:期待 '('

var methods = eval(ObjC.classes.UIViewController.$methods);
for item in methods { console.log(item) }

这里有一个迭代和调用class方法的例子

var UIDevice = ObjC.classes.UIDevice.currentDevice();
UIDevice.$ownMethods
  .filter(function(method) { 
    return method.indexOf(':') == -1 /* filter out methods with parameters */
       && method.indexOf('+') == -1 /* filter out public methods */
  })
  .forEach(function(method) { 
    console.log(method, ':', UIDevice[method]())
  })

更新:

var UIViewControllerInstance = ObjC.chooseSync(ObjC.classes.UIViewController)[0];
console.log('Sanity check =', UIViewControllerInstance, JSON.stringify(UIViewControllerInstance.$ownMethods, null, 2));
UIViewControllerInstance.$ownMethods
  .filter(method => { return method.indexOf(':') == -1 && method.indexOf('+') == -1 })
  .forEach(method => { 
    console.log(method, ':', UIViewControllerInstance[method]())
  })

无需在堆上查找 UIViewController 实例,您可以通过 UIApplication 直接访问 看看@https://frida.re/docs/examples/ios/

此问题与命令行 shells 有关,与 Frida 或任何其他 REPL 工具无关。

这是终端中 shell 的单个命令和多行主题。

只要在每行末尾加上“\”即可解决

示例:

var methods = eval(ObjC.classes.UIViewController.$methods);\
for (item in methods) { console.log(item) }\