打勾的是出现过的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 ,所以这种情况并不用怎么当回事,继续往下看就好