2018年8月30日

自制反汇编逆向分析工具 迭代第四版本 – bbqz007

上每一版本,本器后退的第每一逆向策略,(对反缀编的职务体内的用枝形叶脉刺绣花纹装饰把持建筑风格逆向制作cpp信号,它一向任务。,直到尤指不期而遇职务。。这时使我的逆向策略算法生效的职务,其次要特点是遏制了大方的的绝对的漏过指导原则。,都在职务体中蹦跳。。

为什么绝对的漏过指导原则使我的第每一反向徒然?,由于这些绝对的蹦跳指导原则实施了职务的实行。

在未拆散的缀编信号中。,环境绝对的漏过指导原则短工夫地见,,甚至缺乏每一绝对的蹦跳指导原则。,缀编信号的实行诉讼程序是作为原文读取的。,可以获得知识每一特别的制约,使所相当多的环境跳到使满意一种制约。,这样的话就可以从头到尾做了。。位于正中的环境跳得自动数控程序,你想研读漏过区的人物吗?,但总而言之,历史按一列纵队挨次开展。。

纵然在下车职务缀编信号中,遏制很多的绝对的漏过指导原则。,信号依赖植物集团变成成碎片的。。或许有很多急转方向或急转方向。,研读你的课文(主线或用枝形叶脉刺绣花纹装饰线),实行诉讼程序)和不察觉许多的急转方向或急转方向。,将会有绝对的蹦跳。。你葡萄汁阅读一下这本书的每编页码。,职务缀编信号中蹦跳。急转方向与急转方向,同意研制的历史停止了描述方法。,挑剔同意实行。,明显的地块当中也会有触摸。,每一集都是作为例行的历史拔取的。。要完好无损出场这时避车道例行的就不得不从别的避车道例行的中援用相互关系(双线穿插)的历史,就像内联同一的。。一切论述,闪回或闪回的历史能与假定的STO关心。。

因而到某种状态这种遏制很多的绝对的漏过指导原则。的职务,地面我所持的论点职务体运用内联。,它也能是一种微观方法。。拿 … 来说,宏精确地解释了三个信号零件。ABCBC一切这些都被运用。A。在每一职务中,三个宏被屡次运用。,编辑者能能A获得来,将A出境的片刻绝对的略过。A的信号零件,A在信号零件的末了,绝对的地漏过到另每一所在地。。因而我也用同一的策略来应对这种相反的制约。,将缀编信号出口到联机中。

上面遏制不停地每一JMP。指导原则的职务C::层:集中生气的反缀编信号:

QuartzCore`CA::Layer::collect_animations__:
     <+0>:    pushq  %rbp
     <+1>:    movq   %rsp, %rbp
     <+4>:    pushq  %r15
     <+6>:    pushq  %r14
     <+8>:    pushq  %r13
     <+10>:   pushq  %r12
     <+12>:   pushq  %rbx
     <+13>:   subq   $0x48, %rsp
     <+17>:   movq   %rsi, %rbx
     <+20>:   movapd %xmm0, %xmm1
     <+24>:   movss  0x8(%rdx), %xmm0
     <+29>:   andps  0x3d8de(%rip), %xmm0      ; .memset_pattern + 560
     <+36>:   orps   0x3d8e7(%rip), %xmm0      ; .memset_pattern + 576
     <+43>:   cvtss2sd %xmm0, %xmm0
     <+47>:   movsd  %xmm0, -0x48(%rbp)
     <+52>:   movq   0x98(%rdi), %rax
     <+59>:   movq   %rax, -0x30(%rbp)
     <+63>:   testq  %rax, %rax
     <+66>:   je     0x1041b20bf               ; <+145>
     <+68>:   leaq   0x4(%rdi), %rsi
     <+72>:   leaq   -0x30(%rbp), %rcx
     <+76>:   movq   %rcx, -0x40(%rbp)
     <+80>:   xorl   %r12d, %r12d
     <+83>:   testl  $0x1800000, 0x4(%rdi)
     <+90>:   je     0x1041b20c6               ; <+152>
     <+92>:   movq   %rbx, -0x60(%rbp)
     <+96>:   lock   
     <+97>:   andl   $0xfe7fffff, RSI
     <+103>:  movq   -0x30(%rbp), %rax
     <+107>:  xorl   %ecx, %ecx
     <+109>:  testq  %rax, %rax
     <+112>:  je     0x1041b235a               ; <+812>
     <+118>:  movq   %rsi, -0x68(%rbp)
     <+122>:  movq   %rdx, %r14
     <+125>:  xorl   %ecx, %ecx
     <+127>:  movq   %rcx, -0x50(%rbp)
     <+131>:  movsd  %xmm1, -0x38(%rbp)
     <+136>:  movq   %rdi, -0x70(%rbp)
     <+140>:  xorl   %r12d, %r12d
     <+143>:  jmp    0x1041b20e0               ; <+178>
     <+145>:  xorl   %eax, %eax
     <+147>:  jmp    0x1041b24b8               ; <+1162>
     <+152>:  movq   %rsi, -0x68(%rbp)
     <+156>:  movq   %rdx, %r14
     <+159>:  xorl   %ecx, %ecx
     <+161>:  movq   %rcx, -0x50(%rbp)
     <+165>:  movsd  %xmm1, -0x38(%rbp)
     <+170>:  movq   %rdi, -0x70(%rbp)
     <+174>:  movq   %rbx, -0x60(%rbp)
     <+178>:  xorl   %ecx, %ecx
     <+180>:  movq   %rcx, -0x58(%rbp)
     <+184>:  movq   %rax, %rbx
     <+187>:  testb  $0x2, 0x38(%rbx)
     <+191>:  je     0x1041b22ee               ; <+704>
     <+197>:  movq   0x20(%rbx), %rdi
     <+201>:  testq  %rdi, %rdi
     <+204>:  je     0x1041b22ee               ; <+704>
     <+210>:  movq   0x20(%rdi), %r15
     <+214>:  callq  0x104101b12               ; C::虚构:工夫:: const
     <+219>:  movq   0x20(%rbx), %rax
     <+223>:  movl   0x8(%rax), %r13d
     <+227>:  shrl   $0x12, %r13d
     <+231>:  andb   $0x1, %r13b
     <+235>:  movl   0x8(%rax), %ecx
     <+238>:  shrl   $0x11, %ecx
     <+241>:  andb   $0x1, %cl
     <+244>:  movss  0x8(%r14), %xmm1
     <+250>:  xorpd  %xmm2, %xmm2
     <+254>:  ucomiss %xmm1, %xmm2
     <+257>:  je     0x1041b21ef               ; <+449>
     <+263>:  movd   %xmm0, %rax
     <+268>:  ucomiss %xmm2, %xmm1
     <+271>:  jae    0x1041b2146               ; <+280>
     <+273>:  movq   %rax, %rdx
     <+276>:  movb   %cl, %al
     <+278>:  jmp    0x1041b2152               ; <+292>
     <+280>:  movq   %r15, %rdx
     <+283>:  movq   %rax, %r15
     <+286>:  movb   %r13b, %al
     <+289>:  movb   %cl, %r13b
     <+292>:  movd   %rdx, %xmm0
     <+297>:  ucomiss %xmm2, %xmm1
     <+300>:  jbe    0x1041b217b               ; <+333>
     <+302>:  movsd  -0x38(%rbp), %xmm1
     <+307>:  ucomisd %xmm1, %xmm0
     <+311>:  ja     0x1041b220b               ; <+477>
     <+317>:  movd   %r15, %xmm0
     <+322>:  ucomisd %xmm1, %xmm0
     <+326>:  jbe    0x1041b2199               ; <+363>
     <+328>:  jmp    0x1041b221d               ; <+495>
     <+333>:  movsd  -0x38(%rbp), %xmm1
     <+338>:  ucomisd %xmm1, %xmm0
     <+342>:  jb     0x1041b220b               ; <+477>
     <+348>:  movd   %r15, %xmm0
     <+353>:  ucomisd %xmm1, %xmm0
     <+357>:  jb     0x1041b221d               ; <+495>
     <+363>:  movsd  %xmm1, -0x38(%rbp)
     <+368>:  movq   0x8(%rbx), %rdi
     <+372>:  movl   $0x2, %esi
     <+377>:  movl   $0xffffffff, %edx
     <+382>:  callq  0x1041914ba               ; CAAnimationSetFlags
     <+387>:  movq   %rbx, %rdi
     <+390>:  callq  0x1041b159c               ; schedule_stop_callback(CA::Layer::Animation*)
     <+395>:  testb  $0x1, 0x38(%rbx)
     <+399>:  je     0x1041b224c               ; <+542>
     <+405>:  movq   (%rbx), %rax
     <+408>:  movq   -0x40(%rbp), %rcx
     <+412>:  movq   %rax, RCX)
     <+415>:  movq   0x6d574(%rip), %rax       ; animation_state (.2)
     <+422>:  movq   %rax, (%rbx)
     <+425>:  movq   %rbx, 0x6d56a(%rip)       ; animation_state (.2)
     <+432>:  movq   RCX), %rbx
     <+435>:  testq  %rbx, %rbx
     <+438>:  jne    0x1041b20e9               ; <+187>
     <+444>:  jmp    0x1041b2310               ; <+738>
     <+449>:  movd   %r15, %xmm1
     <+454>:  movsd  -0x38(%rbp), %xmm2
     <+459>:  ucomisd %xmm2, %xmm1
     <+463>:  movapd %xmm2, %xmm1
     <+467>:  jbe    0x1041b2256               ; <+552>
     <+469>:  movb   %r13b, %al
     <+472>:  jmp    0x1041b22b4               ; <+646>
     <+477>:  movzwl 0x38(%rbx), %ecx
     <+481>:  testw  $0x220, %cx
     <+486>:  je     0x1041b2262               ; <+564>
     <+488>:  movsd  %xmm1, -0x38(%rbp)
     <+493>:  jmp    0x1041b2284               ; <+598>
     <+495>:  movsd  %xmm0, -0x40(%rbp)
     <+500>:  movsd  %xmm1, -0x38(%rbp)
     <+505>:  movq   %rbx, %rdi
     <+508>:  callq  0x1041b24d0               ; schedule_start_callback(CA::Layer::Animation*)
     <+513>:  testb  $0x4, 0x39(%rbx)
     <+517>:  jne    0x1041b2243               ; <+533>
     <+519>:  movb   $0x1, %al
     <+521>:  cmpq   $0x0, 0x30(%rbx)
     <+526>:  movsd  -0x48(%rbp), %xmm0
     <+531>:  je     0x1041b2284               ; <+598>
     <+533>:  movb   $0x1, %al
     <+535>:  movsd  -0x40(%rbp), %xmm0
     <+540>:  jmp    0x1041b2284               ; <+598>
     <+542>:  movb   %r13b, %al
     <+545>:  movsd  -0x48(%rbp), %xmm0
     <+550>:  jmp    0x1041b2284               ; <+598>
     <+552>:  movb   $0x1, %al
     <+554>:  ucomisd %xmm1, %xmm0
     <+558>:  ja     0x1041b22b4               ; <+646>
     <+560>:  movb   %cl, %al
     <+562>:  jmp    0x1041b22b4               ; <+646>
     <+564>:  testb  $0x4, %ch
     <+567>:  jne    0x1041b226e               ; <+576>
     <+569>:  cmpq   $0x0, 0x30(%rbx)
     <+574>:  je     0x1041b227a               ; <+588>
     <+576>:  movsd  %xmm1, -0x38(%rbp)
     <+581>:  movd   %r15, %xmm0
     <+586>:  jmp    0x1041b2284               ; <+598>
     <+588>:  movsd  %xmm1, -0x38(%rbp)
     <+593>:  movsd  -0x48(%rbp), %xmm0
     <+598>:  xorpd  %xmm1, %xmm1
     <+602>:  ucomiss 0x8(%r14), %xmm1
     <+607>:  jae    0x1041b2299               ; <+619>
     <+609>:  ucomisd -0x48(%rbp), %xmm0
     <+614>:  setb   %cl
     <+617>:  jmp    0x1041b22a1               ; <+627>
     <+619>:  ucomisd -0x48(%rbp), %xmm0
     <+624>:  seta   %cl
     <+627>:  movsd  -0x38(%rbp), %xmm1
     <+632>:  testb  %cl, %cl
     <+634>:  jne    0x1041b22af               ; <+641>
     <+636>:  movsd  -0x48(%rbp), %xmm0
     <+641>:  movsd  %xmm0, -0x48(%rbp)
     <+646>:  testb  %al, %al
     <+648>:  je     0x1041b22e9               ; <+699>
     <+650>:  movzwl 0x38(%rbx), %eax
     <+654>:  movl   %eax, %ecx
     <+656>:  andl   $0x20, %ecx
     <+659>:  testw  %cx, %cx
     <+662>:  je     0x1041b22e9               ; <+699>
     <+664>:  movl   %eax, %ecx
     <+666>:  andl   $0x80, %ecx
     <+672>:  testw  %cx, %cx
     <+675>:  je     0x1041b22d9               ; <+683>
     <+677>:  movb   $0x1, %cl
     <+679>:  movq   %rcx, -0x50(%rbp)
     <+683>:  andl   $0x100, %eax
     <+688>:  testw  %ax, %ax
     <+691>:  je     0x1041b22e9               ; <+699>
     <+693>:  movb   $0x1, %al
     <+695>:  movq   %rax, -0x58(%rbp)
     <+699>:  movsd  %xmm1, -0x38(%rbp)
     <+704>:  leaq   0x10(%rbx), %rdi
     <+708>:  xorl   %esi, %esi
     <+710>:  callq  0x1040e0598               ; C::虚构::KiyPasePixAc原子(徒然) const*, unsigned 长)
     <+715>:  cmpl   $0x63, %eax
     <+718>:  cmoveq %rbx, %r12
     <+722>:  movq   (%rbx), %rax
     <+725>:  testq  %rax, %rax
     <+728>:  movq   %rbx, -0x40(%rbp)
     <+732>:  jne    0x1041b20e6               ; <+184>
     <+738>:  movq   -0x68(%rbp), %rsi
     <+742>:  movl   RSI, %ebx
     <+744>:  movq   -0x50(%rbp), %rax
     <+748>:  testb  $0x1, %al
     <+750>:  movl   $0x0, %ecx
     <+755>:  je     0x1041b232f               ; <+769>
     <+757>:  lock   
     <+758>:  orl    $0x1000000, RSI
     <+764>:  movl   $0x1000, %ecx
     <+769>:  movl   %ebx, %eax
     <+771>:  andl   $0x3000, %eax
     <+776>:  movq   -0x58(%rbp), %rdx
     <+780>:  testb  $0x1, %dl
     <+783>:  je     0x1041b234c               ; <+798>
     <+785>:  orl    $0x2000, %ecx
     <+791>:  lock   
     <+792>:  orl    $0x800000, RSI
     <+798>:  movq   -0x70(%rbp), %rdi
     <+802>:  movsd  -0x38(%rbp), %xmm1
     <+807>:  movq   %r14, %rdx
     <+810>:  jmp    0x1041b2366               ; <+824>
     <+812>:  movl   RSI, %ebx
     <+814>:  movl   %ebx, %eax
     <+816>:  andl   $0x3000, %eax
     <+821>:  xorl   %r12d, %r12d
     <+824>:  cmpl   %eax, %ecx
     <+826>:  jne    0x1041b238f               ; <+865>
     <+828>:  testl  %eax, %eax
     <+830>:  je     0x1041b24a9               ; <+1147>
     <+836>:  xorpd  %xmm0, %xmm0
     <+840>:  ucomiss 0x8(%rdx), %xmm0
     <+844>:  jne    0x1041b2386               ; <+856>
     <+846>:  cmpl   $0x0, 0xc(%rdx)
     <+850>:  je     0x1041b24a9               ; <+1147>
     <+856>:  movq   %r12, %r13
     <+859>:  movq   0x10(%rdi), %r14
     <+863>:  jmp    0x1041b23b2               ; <+900>
     <+865>:  movq   %r12, %r13
     <+868>:  movq   0x10(%rdi), %r14
     <+872>:  movl   %ebx, %eax
     <+874>:  orl    $0xffffcfff, %eax
     <+879>:  xorl   $0x3000, %eax
     <+884>:  movq   %rcx, %rdx
     <+887>:  andl   %eax, %ecx
     <+889>:  lock   
     <+890>:  orl    %ecx, RSI
     <+892>:  movq   %rdx, %rcx
     <+895>:  orl    %ecx, %eax
     <+897>:  lock   
     <+898>:  andl   %eax, RSI
     <+900>:  movq   %rdi, %r15
     <+903>:  testl  %ecx, %ecx
     <+905>:  je     0x1041b245c               ; <+1070>
     <+911>:  movq   %rcx, %r12
     <+914>:  movsd  %xmm1, -0x38(%rbp)
     <+919>:  movq   0x68964(%rip), %rsi       ; "_scheduleAnimationTimer"
     <+926>:  movq   %r14, %rdi
     <+929>:  callq  *0x6de63(%rip)            ; (虚空) *)0x000000010357d800: objc_msgSend
     <+935>:  testb  %al, %al
     <+937>:  movq   -0x60(%rbp), %rbx
     <+941>:  movq   %r15, %rdi
     <+944>:  je     0x1041b24ad               ; <+1151>
     <+950>:  movq   %r12, %rax
     <+953>:  testb  $0x10, %ah
     <+956>:  je     0x1041b2408               ; <+986>
     <+958>:  movq   0x68855(%rip), %rsi       ; "setNeedsLayout"
     <+965>:  movq   %rdi, %r15
     <+968>:  movq   %r14, %rdi
     <+971>:  movq   %rax, %r12
     <+974>:  callq  *0x6de36(%rip)            ; (虚空) *)0x000000010357d800: objc_msgSend
     <+980>:  movq   %r12, %rax
     <+983>:  movq   %r15, %rdi
     <+986>:  testb  $0x20, %ah
     <+989>:  je     0x1041b2450               ; <+1058>
     <+991>:  movq   %rdi, %r15
     <+994>:  testq  %r13, %r13
     <+997>:  je     0x1041b2436               ; <+1032>
     <+999>:  movq   0x6809c(%rip), %rdx       ; "removeAnimationForKey:"
     <+1006>: movq   0x68915(%rip), %rsi       ; "performSelectorOnMainThread:withObject:waitUntilDone:"
     <+1013>: leaq   0x7a106(%rip), %rcx       ; @"contents"
     <+1020>: xorl   %r8d, %r8d
     <+1023>: movq   %r14, %rdi
     <+1026>: callq  *0x6de02(%rip)            ; (虚空) *)0x000000010357d800: objc_msgSend
     <+1032>: movq   0x68823(%rip), %rsi       ; "setNeedsDisplay"
     <+1039>: movq   %r14, %rdi
     <+1042>: callq  *0x6ddf2(%rip)            ; (虚空) *)0x000000010357d800: objc_msgSend
     <+1048>: movq   %r15, %rdi
     <+1051>: orb    $0x20, 0x85(%rdi)
     <+1058>: movsd  -0x38(%rbp), %xmm0
     <+1063>: movsd  %xmm0, -0x48(%rbp)
     <+1068>: jmp    0x1041b24ad               ; <+1151>
     <+1070>: movq   0x688dd(%rip), %rsi       ; "_cancelAnimationTimer"
     <+1077>: movq   %r14, %rdi
     <+1080>: callq  *0x6ddcc(%rip)            ; (虚空) *)0x000000010357d800: objc_msgSend
     <+1086>: testb  $0x10, %bh
     <+1089>: je     0x1041b2481               ; <+1107>
     <+1091>: movq   0x687d0(%rip), %rsi       ; "setNeedsLayout"
     <+1098>: movq   %r14, %rdi
     <+1101>: callq  *0x6ddb7(%rip)            ; (虚空) *)0x000000010357d800: objc_msgSend
     <+1107>: testb  $0x20, %bh
     <+1110>: jne    0x1041b248f               ; <+1121>
     <+1112>: movq   -0x60(%rbp), %rbx
     <+1116>: movq   %r15, %rdi
     <+1119>: jmp    0x1041b24ad               ; <+1151>
     <+1121>: movq   0x687ca(%rip), %rsi       ; "setNeedsDisplay"
     <+1128>: movq   %r14, %rdi
     <+1131>: callq  *0x6dd99(%rip)            ; (虚空) *)0x000000010357d800: objc_msgSend
     <+1137>: movq   %r15, %rdi
     <+1140>: orb    $0x20, 0x85(%rdi)
     <+1147>: movq   -0x60(%rbp), %rbx
     <+1151>: movq   -0x30(%rbp), %rsi
     <+1155>: callq  0x1041b0e50               ; CA::Layer::set_animations(CA::Layer::Animation*)
     <+1160>: movb   $0x1, %al
     <+1162>: movsd  -0x48(%rbp), %xmm0
     <+1167>: movsd  %xmm0, (%rbx)
     <+1171>: addq   $0x48, %rsp
     <+1175>: popq   %rbx
     <+1176>: popq   %r12
     <+1178>: popq   %r13
     <+1180>: popq   %r14
     <+1182>: popq   %r15
     <+1184>: popq   %rbp
     <+1185>: retq   

View Code

上面是漏过图。:

这时职务总群落17jmp指导原则,我把它陷入17JMP块半壁江山,用枝形叶脉刺绣花纹装饰漏过指导原则在这边。17半壁江山间的插曲。接下来我借。UML描述方法了目的图的象征。,象征的角色被重行精确地解释为:

~package),插入地址。

+public),出去跳。

#protected),后面走(backwards)的出去跳。

private),JMP块内跳,缺乏分开JMP块蹦跳。

=(启动装置),表现漏过的终点站。。

->direct-link),有向线表现法JMP块s当中蹦跳,蓝色代表跳到另每一。JMP块的插入,不加牛奶的代表跳到另每一。JMP块的体内。

目的象征表现每一。JMP块半壁江山,地面许多的战术选择绿色代表作为次要身体部位,不符合作为inline候选。

上面是映出该职务的用枝形叶脉刺绣花纹装饰衔接的用曲线图表示。:

 

可以看出(黑色)非主线身体部位的半壁江山可以入内(绿色)主线身体部位半壁江山的用枝形叶脉刺绣花纹装饰中,与回转主线。。纵然缺乏条款线可以使满意。17每一岛衔接到条款线上。。

以下是第长。#4JmpBlock内联后的反向用枝形叶脉刺绣花纹装饰出口:

  

#6JmpBlock入内#4号在offset 342用枝形叶脉刺绣花纹装饰,#11内联到了#6内嵌块完毕offset 493,并且#11内联零件从话题中截获。,而挑剔#11所有的信号块从起跑线开始划线。。

477493598617的零件入内了offset 342部门内,继续用枝形叶脉刺绣花纹装饰#4JmpBlock的实行流。这增加了。,逆向信号中复杂的蹦跳,和跳起的单位JmpBlock的坡度缓和,并且它是non-inlineJmpBlock。即使缺乏增加goto的总共,但大大地增加了。goto目的选择的能性,并且内联增加了很多位于正中的蹦跳,让蹦跳更整齐的。,易感辨析。

除非每个JmpBlock初始出口正文,供奉权力大的的其次的和辨析知识。。拿 … 来说,内联块的指导原则总共。,可以看出#6#11它们是小的内嵌块,就是短工夫地的指导原则。。况且,谁别的块可以与ILLI的入站和出边相互关系。,它依然是去哪里和去哪里。,#11内联正文象征块将内嵌到很多的片刻。,纵然产生会消灭。#12JmpBlock

世上无片刻。,治愈一切不健康。,详细成绩应详细辨析。,对牵制例外的绝对的漏过方位的职务的反辨析,我运用了另每一逆向策略内联。实在,本文辨析了该策略的目的职务。,这一点也不完整赠给。,由于在后方4JmpBlock它们的关系挑剔内联的。,更多的是双向用枝形叶脉刺绣花纹装饰。if-else

最末,有每一很的帮忙辨析选择。。

最末,贴许多的出口产生。:

/***
* Summary:
* total JmpBlock(s): 17
* noninline 块(S) #0, #2, #4, #7, #10, #12, #13, #14, #15, #16
* inline 块(S) #1, #3, #5, #6, #8, #9, #11
*//***
* #0<>
* 0 to 143
* instrs: 40
* inners: 0
*
*/
_f0:
// 66if () {
    /***
    * #1<>
    * 145(145) to 147
    * instrs: 2
    * incomings: 1    ; #0
    * outgoings: 1    ; #16
    * depth: 1
    *
    */// 145
    // 147goto _f1162;    // to #16
                    // end of inline #1}
// 90if () {
    goto _f152;    // to #2, BoJ}
// 112if () {
    goto _f812;    // to #13, BoJ}
// 143goto _f178;    // to #2
            // end of non-inline #0/***
            * #2<>
            * 152 to 278
            * instrs: 34
            * inners: 0
            *
            */
_f152:
_f152:    // from #0(90)
_f178:    // from #0(143, EoJ)
_b184:    // from #12(732)
_b187:    // from #4(438)
        // 191if () {
    goto _f704;    // to #12}
// 204if () {
    goto _f704;    // to #12}
// 257if () {
    /***
    * #5<>
    * 449(449) to 472
    * instrs: 7
    * incomings: 1    ; #2
    * outgoings: 2    ; #9, #12
    * depth: 1
    *
    */// 449
    // 467if () {
        /***
        * #9<>
        * 552(552) to 562
        * instrs: 5
        * incomings: 1    ; #5
        * outgoings: 2    ; #12
        * depth: 2
        *
        */// 552
        // 558if () {
            goto _f646;    // to #12        }
        // 562goto _f646;    // to #12
                    // end of inline #9    }
    // 472goto _f646;    // to #12
                // end of inline #5}
// 271if () {
    /***
    * #3<>
    * 280(280) to 328
    * instrs: 14
    * incomings: 2    ; #2
    * outgoings: 4    ; #4, #6, #7
    * depth: 1
    *
    */// 280
    // 300if () {
        goto _f333;    // to #4, BoJ    }
    // 311if () {
        /***
        * #6<>
        * 477(477) to 493
        * instrs: 5
        * incomings: 2    ; #3, #4
        * outgoings: 2    ; #10, #11
        * depth: 2
        *
        */// 477
        // 486if () {
            goto _f564;    // to #10, BoJ        }
        // 493/***
        * #11<>
        * 588(598) to 617
        * instrs: 8
        * incomings: 6    ; #6, #7, #8, #10
        * outgoings: 2    ; #12
        * depth: 3
        * concast #6 to #11
        *
        */// 598
        // 607if () {
            goto _f619;    // to #12, BoJ        }
        // 617goto _f627;    // to #12
                    // end of inline #11
                    // end of inline #6    }
    // 326if () {
        goto _f363;    // to #4    }
    // 328goto _f495;    // to #7, BoJ
                // end of inline #3}
// 278
/***
* #3<>
* 280(292) to 328
* instrs: 14
* incomings: 2    ; #2
* outgoings: 4    ; #4, #6, #7
* depth: 1
* concast #2 to #3
*
*/// 292
// 300if () {
    goto _f333;    // to #4, BoJ}
// 311if () {
    /***
    * #6<>
    * 477(477) to 493
    * instrs: 5
    * incomings: 2    ; #3, #4
    * outgoings: 2    ; #10, #11
    * depth: 2
    *
    */// 477
    // 486if () {
        goto _f564;    // to #10, BoJ    }
    // 493/***
    * #11<>
    * 588(598) to 617
    * instrs: 8
    * incomings: 6    ; #6, #7, #8, #10
    * outgoings: 2    ; #12
    * depth: 3
    * concast #6 to #11
    *
    */// 598
    // 607if () {
        goto _f619;    // to #12, BoJ    }
    // 617goto _f627;    // to #12
                // end of inline #11
                // end of inline #6}
// 326if () {
    goto _f363;    // to #4}
// 328goto _f495;    // to #7, BoJ
            // end of inline #3
            // end of non-inline #2/***
            * #4<>
            * 333 to 444
            * instrs: 25
            * inners: 0
            *
            */
_f333:
_f333:    // from #3(300, 内联)
        // 342if () {
    /***
    * #6<>
    * 477(477) to 493
    * instrs: 5
    * incomings: 2    ; #3, #4
    * outgoings: 2    ; #10, #11
    * depth: 1
    *
    */// 477
    // 486if () {et 
        goto _f564;    // to #10, BoJ    }
    // 493/***
    * #11<>
    * 588(598) to 617
    * instrs: 8
    * incomings: 6    ; #6, #7, #8, #10
    * outgoings: 2    ; #12
    * depth: 2
    * concast #6 to #11
    *
    */// 598
    // 607if () {
        goto _f619;    // to #12, BoJ    }
    // 617goto _f627;    // to #12
                // end of inline #11
                // end of inline #6}
// 357if () {
    goto _f495;    // to #7, BoJ}
_f363:    // from #3(326, 内联)
        // 399if () {
    /***
    * #8<>
    * 542(542) to 550
    * instrs: 3
    * incomings: 1    ; #4
    * outgoings: 1    ; #11
    * depth: 1
    *
    */// 542
    // 550/***
    * #11<>
    * 588(598) to 617
    * instrs: 8
    * incomings: 6    ; #6, #7, #8, #10
    * outgoings: 2    ; #12
    * depth: 2
    * concast #8 to #11
    *
    */// 598
    // 607if () {
        goto _f619;    // to #12, BoJ    }
    // 617goto _f627;    // to #12
                // end of inline #11
                // end of inline #8}
// 438if () {
    goto _b187;    // to #2}
// 444goto _f738;    // to #12
            // end of non-inline #4/***
            * #7<>
            * 495 to 540
            * instrs: 13
            * inners: 1
            *
            */
_f495:
_f495:    // from #3(328, inline, EoJ)
_f495:    // from #4(357)
        // 531if () {
    /***
    * #11<>
    * 588(598) to 617
    * instrs: 8
    * incomings: 6    ; #6, #7, #8, #10
    * outgoings: 2    ; #12
    * depth: 1
    *
    */// 598
    // 607if () {
        goto _f619;    // to #12, BoJ    }
    // 617goto _f627;    // to #12
                // end of inline #11}
// 540
/***
* #11<>
* 588(598) to 617
* instrs: 8
* incomings: 6    ; #6, #7, #8, #10
* outgoings: 2    ; #12
* depth: 1
* concast #7 to #11
*
*/// 598
// 607if () {
    goto _f619;    // to #12, BoJ}
// 617goto _f627;    // to #12
            // end of inline #11
            // end of non-inline #7/***
            * #10<>
            * 564 to 586
            * instrs: 7
            * inners: 1
            *
            */
_f564:
_f564:    // from #6(486, 内联)
        // 574if () {
    /***
    * #11<>
    * 588(588) to 617
    * instrs: 8
    * incomings: 6    ; #6, #7, #8, #10
    * outgoings: 2    ; #12
    * depth: 1
    *
    */// 588
    // 607if () {
        goto _f619;    // to #12, BoJ    }
    // 617goto _f627;    // to #12
                // end of inline #11}
// 586
/***
* #11<>
* 588(598) to 617
* instrs: 8
* incomings: 6    ; #6, #7, #8, #10
* outgoings: 2    ; #12
* depth: 1
* concast #10 to #11
*
*/// 598
// 607if () {
    goto _f619;    // to #12, BoJ}
// 617goto _f627;    // to #12
            // end of inline #11
            // end of non-inline #10/***
            * #12<>
            * 619 to 810
            * instrs: 56
            * inners: 7
            *
            */
_f619:
_f619:    // from #11(607, 内联)
_f627:    // from #11(617, inline, EoJ)
_f646:    // from #5(472, inline, EoJ)
_f646:    // from #9(558, 内联)
_f646:    // from #9(562, inline, EoJ)
_f704:    // from #2(191)
_f704:    // from #2(204)
        // 732if () {
    goto _b184;    // to #2}
_f738:    // from #4(444, EoJ)
        // 810goto _f824;    // to #13
            // end of non-inline #12/***
            * #13<>
            * 812 to 863
            * instrs: 16
            * inners: 1
            *
            */
_f812:
_f812:    // from #0(112)
_f824:    // from #12(810, EoJ)
        // 826if () {
    goto _f865;    // to #14, BoJ}
// 830if () {
    goto _f1147;    // to #16}
// 850if () {
    goto _f1147;    // to #16}
// 863goto _f900;    // to #14
            // end of non-inline #13/***
            * #14<>
            * 865 to 1068
            * instrs: 54
            * inners: 3
            *
            */
_f865:
_f865:    // from #13(826)
_f900:    // from #13(863, EoJ)
        // 905if () {
    goto _f1070;    // to #15, BoJ}
// 944if () {
    goto _f1151;    // to #16}
// 1068goto _f1151;    // to #16
                // end of non-inline #14/***
                * #15<>
                * 1070 to 1119
                * instrs: 13
                * inners: 1
                *
                */
_f1070:
_f1070:    // from #14(905)
        // 1110if () {
    goto _f1121;    // to #16, BoJ}
// 1119goto _f1151;    // to #16
                // end of non-inline #15/***
                * #16<>
                * 1121 to 1185
                * instrs: 19
                * inners: 0
                *
                */
_f1121:
// 1185return;
// end of non-inline #16

View Code

发表评论

电子邮件地址不会被公开。 必填项已用*标注