为什么一段汇编的中间会同时出现这么多的ldr,str,怎么分析

打勾的是出现过的selctor,其他是未出现的。是什么样的代码才会造成这样大量读取内存中的selector,并把它放到堆栈上的呢,而且取出来的selector,一直没有objc_msg_send去消化。这是什么东西啊

正常编译器咋会生成nop
应该是内联,而你看到的sel。。。仅仅是偶然值正好指向那个地址。

nop 会生成的, 而且不少

__text:000000000000410C                         ; __int64 __fastcall ****_ptrace(int, int, char *, int)
__text:000000000000410C                                         EXPORT __Z11*_ptraceiiPci
__text:000000000000410C                         __Z11*_ptraceiiPci                   ; DATA XREF: hook**(long)+84o
__text:000000000000410C 1F 7C 00 71                             CMP             W0, #0x1F
__text:0000000000004110 61 00 00 54                             B.NE            loc_411C
__text:0000000000004114 00 00 80 52                             MOV             W0, #0
__text:0000000000004118 C0 03 5F D6                             RET
__text:000000000000411C                         ; ---------------------------------------------------------------------------
__text:000000000000411C
__text:000000000000411C                         loc_411C                                ; CODE XREF: *_ptrace(int,int,char *,int)+4j
__text:000000000000411C 1F 20 03 D5                             NOP
__text:0000000000004120 44 2E 0E 58                             LDR             X4, _stub_ptrace
__text:0000000000004124 80 00 1F D6                             BR              X4

当那个函数反复使用selector的时候, 先读出来存到栈里或寄存器里也是有的

个人经验,当一个函数需要进行大量 get set 操作的时候,就会在开头进行各种 ldr str ,所以这种情况并不用怎么当回事,继续往下看就好

http://www.awnlab.com/archives/978.html

这个可以解释为什么会有nop操作。这个方法一开始确实是建立了一个NSAutoReleasePool