0

部分源代码是

id (*old_objc_msgSend)(id, SEL, ...);

__attribute__((naked))
id new_objc_msgSend(id self, SEL op, ...) {
        __asm__ __volatile__ (
                ".thumb\n"
                "ldmia.w sp, {r2, r3}\n"
                "b _old_objc_msgSend\n"
        );
}

但是生成的程序集是

Dump of assembler code for function _Z16new_objc_msgSendP11objc_objectP13objc_selectorz:
0x01a7ae9c <_Z16new_objc_msgSendP11objc_objectP13objc_selectorz+0>: stmia.w sp, {r2, r3}
0x01a7aea0 <_Z16new_objc_msgSendP11objc_objectP13objc_selectorz+4>: ldmia.w sp, {r2, r3}
0x01a7aea4 <_Z16new_objc_msgSendP11objc_objectP13objc_selectorz+8>: b.w 0x1a7af68 <_Z27new_initWithContentwithSizeP11objc_objectP13objc_selectorS0_6CGSize+188>
0x01a7aea8 <_Z16new_objc_msgSendP11objc_objectP13objc_selectorz+12>:    bx  lr
0x01a7aeaa <_Z16new_objc_msgSendP11objc_objectP13objc_selectorz+14>:    nop
End of assembler dump.

它分支到不同的地址。

4

0 回答 0