我正在试图弄清楚在下面的反汇编中调用了什么方法,但我不知道发生了什么。我理解用objc_msgsend第一个参数是对象指针,第二个参数是选择器(所以r0和r1)。但我很难搞清楚这一点。这里只是呼叫前配置r1的部分:
00042e48 f64731bc movw r1, 0x7bbc
根据我对此的理解,前两行会使r1等于1f007bbc,但我能从那里做些什么呢?
编辑:另外,添加r1和电脑有什么作用?那后的线路是做什么的?而且我试过“otool -o SpringBoard”,但这并没有给我选择器(不知道它是什么,但它不是我正在寻找的)
00042e4c f2c0011f movt r1, 0x1f
00042e50 4479 add r1, pc
00042e52 6809 ldr r1, [r1, #0]
00042e54 f1c2e84a blx 0x204eec @ symbol stub for: _objc_msgSend
编辑2:实际上,-o确实给了我所有的方法(我从标题中获取了大量随机方法,并在终端窗口中搜索它们并且它们在那里)。但是搜索“1f007bbc”并没有返回任何内容。我的号码是否合适?
答案 0 :(得分:3)
如果您有权访问调试器,则应该能够p (char*) 1f007bbc
并打印选择器名称。
选择器通常是不变的,因此,你也应该能够通过分离mach-o从二进制文件中提取它。