Macos 是否正在使用ShapePath()反汇编CGContextReplacePath?

Macos 是否正在使用ShapePath()反汇编CGContextReplacePath?,macos,assembly,disassembly,Macos,Assembly,Disassembly,我是拆卸的初学者。下面是IDA pro中的CGContextReplacePathWithShapePath的反汇编。我正试图找出例行程序的参数 非常感谢您的帮助。另外,请发布一些关于如何攻击dis汇编的指针/提示 __text:00024D1F ; =============== S U B R O U T I N E ======================================= __text:00024D1F __text:00024D1F ; Attributes: bp

我是拆卸的初学者。下面是IDA pro中的CGContextReplacePathWithShapePath的反汇编。我正试图找出例行程序的参数

非常感谢您的帮助。另外,请发布一些关于如何攻击dis汇编的指针/提示

__text:00024D1F ; =============== S U B R O U T I N E =======================================
__text:00024D1F
__text:00024D1F ; Attributes: bp-based frame
__text:00024D1F
__text:00024D1F                 public _CGContextReplacePathWithShapePath
__text:00024D1F _CGContextReplacePathWithShapePath proc near
__text:00024D1F
__text:00024D1F var_2C          = dword ptr -2Ch
__text:00024D1F var_20          = dword ptr -20h
__text:00024D1F var_1C          = dword ptr -1Ch
__text:00024D1F arg_0           = dword ptr  8
__text:00024D1F arg_4           = dword ptr  0Ch
__text:00024D1F
__text:00024D1F                 push    ebp
__text:00024D20                 mov     ebp, esp
__text:00024D22                 push    edi
__text:00024D23                 push    esi
__text:00024D24                 push    ebx
__text:00024D25                 sub     esp, 3Ch
__text:00024D28                 call    $+5
__text:00024D2D                 pop     ebx
__text:00024D2E                 mov     esi, [ebp+arg_0]
__text:00024D31                 test    esi, esi
__text:00024D33                 jz      short loc_24D3E
__text:00024D35                 cmp     dword ptr [esi+8], 43545854h
__text:00024D3C                 jz      short loc_24D5F
__text:00024D3E
__text:00024D3E loc_24D3E:                              ; CODE XREF: _CGContextReplacePathWithShapePath+14j
__text:00024D3E                 mov     [esp+8], esi
__text:00024D42                 lea     eax, (___func___26084 - 24D2Dh)[ebx] ; "CGContextReplacePathWithShapePath"
__text:00024D48                 mov     [esp+4], eax
__text:00024D4C                 lea     eax, (aSInvalidContex - 24D2Dh)[ebx] ; "%s: invalid context %p"
__text:00024D52                 mov     [esp], eax
__text:00024D55                 call    _CGPostError
__text:00024D5A                 jmp     loc_24DF2
__text:00024D5F ; ---------------------------------------------------------------------------
__text:00024D5F
__text:00024D5F loc_24D5F:                              ; CODE XREF: _CGContextReplacePathWithShapePath+1Dj
__text:00024D5F                 mov     eax, [esi+58h]
__text:00024D62                 test    eax, eax
__text:00024D64                 jz      short loc_24D75
__text:00024D66                 mov     [esp], eax
__text:00024D69                 call    _CGPathRelease
__text:00024D6E                 mov     dword ptr [esi+58h], 0
__text:00024D75
__text:00024D75 loc_24D75:                              ; CODE XREF: _CGContextReplacePathWithShapePath+45j
__text:00024D75                 mov     eax, [ebp+arg_4]
__text:00024D78                 mov     [esp], eax
__text:00024D7B                 call    _CGSRegionPathEnumerator
__text:00024D80                 mov     edi, eax
__text:00024D82                 xor     ebx, ebx
__text:00024D84                 lea     eax, [ebp+var_20]
__text:00024D87                 mov     [ebp+var_2C], eax
__text:00024D8A                 jmp     short loc_24DCA
__text:00024D8C ; ---------------------------------------------------------------------------
__text:00024D8C
__text:00024D8C loc_24D8C:                              ; CODE XREF: _CGContextReplacePathWithShapePath+BDj
__text:00024D8C                 jge     short loc_24DB4
__text:00024D8E                 inc     ebx
__text:00024D8F                 cmp     ebx, 1
__text:00024D92                 jz      short loc_24D9C
__text:00024D94                 mov     [esp], esi
__text:00024D97                 call    _CGContextClosePath
__text:00024D9C
__text:00024D9C loc_24D9C:                              ; CODE XREF: _CGContextReplacePathWithShapePath+73j
__text:00024D9C                 mov     eax, [ebp+var_1C]
__text:00024D9F                 mov     [esp+8], eax
__text:00024DA3                 mov     eax, [ebp+var_20]
__text:00024DA6                 mov     [esp+4], eax
__text:00024DAA                 mov     [esp], esi
__text:00024DAD                 call    _CGContextMoveToPoint
__text:00024DB2                 jmp     short loc_24DCA
__text:00024DB4 ; ---------------------------------------------------------------------------
__text:00024DB4
__text:00024DB4 loc_24DB4:                              ; CODE XREF: _CGContextReplacePathWithShapePath:loc_24D8Cj
__text:00024DB4                 mov     eax, [ebp+var_1C]
__text:00024DB7                 mov     [esp+8], eax
__text:00024DBB                 mov     eax, [ebp+var_20]
__text:00024DBE                 mov     [esp+4], eax
__text:00024DC2                 mov     [esp], esi
__text:00024DC5                 call    _CGContextAddLineToPoint
__text:00024DCA
__text:00024DCA loc_24DCA:                              ; CODE XREF: _CGContextReplacePathWithShapePath+6Bj
__text:00024DCA                                         ; _CGContextReplacePathWithShapePath+93j
__text:00024DCA                 mov     eax, [ebp+var_2C]
__text:00024DCD                 mov     [esp+4], eax
__text:00024DD1                 mov     [esp], edi
__text:00024DD4                 call    _CGSNextPoint
__text:00024DD9                 cmp     eax, 0
__text:00024DDC                 jnz     short loc_24D8C
__text:00024DDE                 test    ebx, ebx
__text:00024DE0                 jz      short loc_24DEA
__text:00024DE2                 mov     [esp], esi
__text:00024DE5                 call    _CGContextClosePath
__text:00024DEA
__text:00024DEA loc_24DEA:                              ; CODE XREF: _CGContextReplacePathWithShapePath+C1j
__text:00024DEA                 mov     [esp], edi
__text:00024DED                 call    _CGSReleaseRegionEnumerator
__text:00024DF2
__text:00024DF2 loc_24DF2:                              ; CODE XREF: _CGContextReplacePathWithShapePath+3Bj
__text:00024DF2                 add     esp, 3Ch
__text:00024DF5                 pop     ebx
__text:00024DF6                 pop     esi
__text:00024DF7                 pop     edi
__text:00024DF8                 leave
__text:00024DF9                 retn
__text:00024DF9 _CGContextReplacePathWithShapePath endp

第一个参数是某种上下文参数

该函数检查它是否为
NULL
,在这种情况下跳转到
loc\u 24D3E
(您可以看到它调用了一个错误函数
\u CGPostError
,格式字符串为
“%s:invalid context%p”
)。顺便说一句:在它检查上下文中的一个魔术值(在上下文+8)之后,看看它是否有效,否则它将通过相同的错误路径退出。魔法值
43545854h
CTXT
字符

__text:00024D2E mov esi, [ebp+arg_0] __text:00024D31 test esi, esi __text:00024D33 jz short loc_24D3E 在C语言中,函数将如下所示:

void CGContextReplacePathWithShapePath(Context* context, Path* path) { if(context == NULL || context->magic != 0x43545854) { CGPostError("%s: invalid context %p", "CGContextReplacePathWithShapePath", context); return; } // loc_24D5F if (context->path != NULL) { CGPathRelease(context->path); context->path = NULL; } // loc_24D75 RegionPathEnumerator* rpe = CGSRegionPathEnumerator(path); // .... } void CGContextReplacePathWithShapePath(上下文*上下文,路径*路径){ if(context==NULL | | context->magic!=0x43545854){ CGPostError(“%s:无效的上下文%p”,“CGContextReplacePathWithShapePath”,上下文); 返回; } //loc_24D5F 如果(上下文->路径!=NULL){ CGPathRelease(上下文->路径); context->path=NULL; } //loc_24D75 RegionPathEnumerator*rpe=CGSRegionPathEnumerator(路径); // .... }
第一个参数是某种上下文参数

该函数检查它是否为
NULL
,在这种情况下跳转到
loc\u 24D3E
(您可以看到它调用了一个错误函数
\u CGPostError
,格式字符串为
“%s:invalid context%p”
)。顺便说一句:在它检查上下文中的一个魔术值(在上下文+8)之后,看看它是否有效,否则它将通过相同的错误路径退出。魔法值
43545854h
CTXT
字符

__text:00024D2E mov esi, [ebp+arg_0] __text:00024D31 test esi, esi __text:00024D33 jz short loc_24D3E 在C语言中,函数将如下所示:

void CGContextReplacePathWithShapePath(Context* context, Path* path) { if(context == NULL || context->magic != 0x43545854) { CGPostError("%s: invalid context %p", "CGContextReplacePathWithShapePath", context); return; } // loc_24D5F if (context->path != NULL) { CGPathRelease(context->path); context->path = NULL; } // loc_24D75 RegionPathEnumerator* rpe = CGSRegionPathEnumerator(path); // .... } void CGContextReplacePathWithShapePath(上下文*上下文,路径*路径){ if(context==NULL | | context->magic!=0x43545854){ CGPostError(“%s:无效的上下文%p”,“CGContextReplacePathWithShapePath”,上下文); 返回; } //loc_24D5F 如果(上下文->路径!=NULL){ CGPathRelease(上下文->路径); context->path=NULL; } //loc_24D75 RegionPathEnumerator*rpe=CGSRegionPathEnumerator(路径); // .... }