VB的SizeOfCode 有一点点的Bug

前端之家收集整理的这篇文章主要介绍了VB的SizeOfCode 有一点点的Bug前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Option Explicit

Dim initFlag As Long
Public opflag(0 To 255) As Byte,opexflag(0 To 255) As Byte

Private Function flagInitialize() As Long
    opflag(0) = 1: opflag(1) = 1
    opflag(2) = 1: opflag(3) = 1
    opflag(4) = 2: opflag(5) = 16
    opflag(6) = 0: opflag(7) = 0
    opflag(8) = 1: opflag(9) = 1
    opflag(10) = 1: opflag(11) = 1
    opflag(12) = 2: opflag(13) = 16
    opflag(14) = 0: opflag(15) = 0
    opflag(16) = 1: opflag(17) = 1
    opflag(18) = 1: opflag(19) = 1
    opflag(20) = 2: opflag(21) = 16
    opflag(22) = 0: opflag(23) = 0
    opflag(24) = 1: opflag(25) = 1
    opflag(26) = 1: opflag(27) = 1
    opflag(28) = 2: opflag(29) = 16
    opflag(30) = 0: opflag(31) = 0
    opflag(32) = 1: opflag(33) = 1
    opflag(34) = 1: opflag(35) = 1
    opflag(36) = 2: opflag(37) = 16
    opflag(38) = 0: opflag(39) = 0
    opflag(40) = 1: opflag(41) = 1
    opflag(42) = 1: opflag(43) = 1
    opflag(44) = 2: opflag(45) = 16
    opflag(46) = 0: opflag(47) = 0
    opflag(48) = 1: opflag(49) = 1
    opflag(50) = 1: opflag(51) = 1
    opflag(52) = 2: opflag(53) = 16
    opflag(54) = 0: opflag(55) = 0
    opflag(56) = 1: opflag(57) = 1
    opflag(58) = 1: opflag(59) = 1
    opflag(60) = 2: opflag(61) = 16
    opflag(62) = 0: opflag(63) = 0
    opflag(64) = 0: opflag(65) = 0
    opflag(66) = 0: opflag(67) = 0
    opflag(68) = 0: opflag(69) = 0
    opflag(70) = 0: opflag(71) = 0
    opflag(72) = 0: opflag(73) = 0
    opflag(74) = 0: opflag(75) = 0
    opflag(76) = 0: opflag(77) = 0
    opflag(78) = 0: opflag(79) = 0
    opflag(80) = 0: opflag(81) = 0
    opflag(82) = 0: opflag(83) = 0
    opflag(84) = 0: opflag(85) = 0
    opflag(86) = 0: opflag(87) = 0
    opflag(88) = 0: opflag(89) = 0
    opflag(90) = 0: opflag(91) = 0
    opflag(92) = 0: opflag(93) = 0
    opflag(94) = 0: opflag(95) = 0
    opflag(96) = 0: opflag(97) = 0
    opflag(98) = 1: opflag(99) = 1
    opflag(100) = 0: opflag(101) = 0
    opflag(102) = 0: opflag(103) = 0
    opflag(104) = 16: opflag(105) = 17
    opflag(106) = 2: opflag(107) = 3
    opflag(108) = 0: opflag(109) = 0
    opflag(110) = 0: opflag(111) = 0
    opflag(112) = 2: opflag(113) = 2
    opflag(114) = 2: opflag(115) = 2
    opflag(116) = 2: opflag(117) = 2
    opflag(118) = 2: opflag(119) = 2
    opflag(120) = 2: opflag(121) = 2
    opflag(122) = 2: opflag(123) = 2
    opflag(124) = 2: opflag(125) = 2
    opflag(126) = 2: opflag(127) = 2
    opflag(128) = 3: opflag(129) = 17
    opflag(130) = 3: opflag(131) = 3
    opflag(132) = 1: opflag(133) = 1
    opflag(134) = 1: opflag(135) = 1
    opflag(136) = 1: opflag(137) = 1
    opflag(138) = 1: opflag(139) = 1
    opflag(140) = 1: opflag(141) = 1
    opflag(142) = 1: opflag(143) = 1
    opflag(144) = 0: opflag(145) = 0
    opflag(146) = 0: opflag(147) = 0
    opflag(148) = 0: opflag(149) = 0
    opflag(150) = 0: opflag(151) = 0
    opflag(152) = 0: opflag(153) = 0
    opflag(154) = 12: opflag(155) = 0
    opflag(156) = 0: opflag(157) = 0
    opflag(158) = 0: opflag(159) = 0
    opflag(160) = 16: opflag(161) = 16
    opflag(162) = 16: opflag(163) = 16
    opflag(164) = 0: opflag(165) = 0
    opflag(166) = 0: opflag(167) = 0
    opflag(168) = 2: opflag(169) = 16
    opflag(170) = 0: opflag(171) = 0
    opflag(172) = 0: opflag(173) = 0
    opflag(174) = 0: opflag(175) = 0
    opflag(176) = 2: opflag(177) = 2
    opflag(178) = 2: opflag(179) = 2
    opflag(180) = 2: opflag(181) = 2
    opflag(182) = 2: opflag(183) = 2
    opflag(184) = 16: opflag(185) = 16
    opflag(186) = 16: opflag(187) = 16
    opflag(188) = 16: opflag(189) = 16
    opflag(190) = 16: opflag(191) = 16
    opflag(192) = 3: opflag(193) = 3
    opflag(194) = 4: opflag(195) = 0
    opflag(196) = 1: opflag(197) = 1
    opflag(198) = 3: opflag(199) = 17
    opflag(200) = 6: opflag(201) = 0
    opflag(202) = 4: opflag(203) = 0
    opflag(204) = 0: opflag(205) = 2
    opflag(206) = 0: opflag(207) = 0
    opflag(208) = 1: opflag(209) = 1
    opflag(210) = 1: opflag(211) = 1
    opflag(212) = 2: opflag(213) = 2
    opflag(214) = 0: opflag(215) = 0
    opflag(216) = 32: opflag(217) = 32
    opflag(218) = 32: opflag(219) = 32
    opflag(220) = 32: opflag(221) = 32
    opflag(222) = 32: opflag(223) = 32
    opflag(224) = 2: opflag(225) = 2
    opflag(226) = 2: opflag(227) = 2
    opflag(228) = 2: opflag(229) = 2
    opflag(230) = 2: opflag(231) = 2
    opflag(232) = 80: opflag(233) = 80
    opflag(234) = 12: opflag(235) = 2
    opflag(236) = 0: opflag(237) = 0
    opflag(238) = 0: opflag(239) = 0
    opflag(240) = 0: opflag(241) = 0
    opflag(242) = 0: opflag(243) = 0
    opflag(244) = 0: opflag(245) = 0
    opflag(246) = 1: opflag(247) = 1
    opflag(248) = 0: opflag(249) = 0
    opflag(250) = 0: opflag(251) = 0
    opflag(252) = 0: opflag(253) = 0
    opflag(254) = 1: opflag(255) = 65
    opexflag(0) = 1: opexflag(1) = 1
    opexflag(2) = 1: opexflag(3) = 1
    opexflag(4) = 0: opexflag(5) = 0
    opexflag(6) = 0: opexflag(7) = 0
    opexflag(8) = 0: opexflag(9) = 0
    opexflag(10) = 0: opexflag(11) = 0
    opexflag(12) = 0: opexflag(13) = 0
    opexflag(14) = 0: opexflag(15) = 0
    opexflag(16) = 0: opexflag(17) = 0
    opexflag(18) = 0: opexflag(19) = 0
    opexflag(20) = 0: opexflag(21) = 0
    opexflag(22) = 0: opexflag(23) = 0
    opexflag(24) = 0: opexflag(25) = 0
    opexflag(26) = 0: opexflag(27) = 0
    opexflag(28) = 0: opexflag(29) = 0
    opexflag(30) = 0: opexflag(31) = 0
    opexflag(32) = 1: opexflag(33) = 1
    opexflag(34) = 1: opexflag(35) = 1
    opexflag(36) = 1: opexflag(37) = 0
    opexflag(38) = 1: opexflag(39) = 0
    opexflag(40) = 0: opexflag(41) = 0
    opexflag(42) = 0: opexflag(43) = 0
    opexflag(44) = 0: opexflag(45) = 0
    opexflag(46) = 0: opexflag(47) = 0
    opexflag(48) = 0: opexflag(49) = 0
    opexflag(50) = 0: opexflag(51) = 0
    opexflag(52) = 0: opexflag(53) = 0
    opexflag(54) = 0: opexflag(55) = 0
    opexflag(56) = 0: opexflag(57) = 0
    opexflag(58) = 0: opexflag(59) = 0
    opexflag(60) = 0: opexflag(61) = 0
    opexflag(62) = 0: opexflag(63) = 0
    opexflag(64) = 1: opexflag(65) = 1
    opexflag(66) = 1: opexflag(67) = 1
    opexflag(68) = 1: opexflag(69) = 1
    opexflag(70) = 1: opexflag(71) = 1
    opexflag(72) = 1: opexflag(73) = 1
    opexflag(74) = 1: opexflag(75) = 1
    opexflag(76) = 1: opexflag(77) = 1
    opexflag(78) = 1: opexflag(79) = 1
    opexflag(80) = 0: opexflag(81) = 0
    opexflag(82) = 0: opexflag(83) = 0
    opexflag(84) = 0: opexflag(85) = 0
    opexflag(86) = 0: opexflag(87) = 0
    opexflag(88) = 0: opexflag(89) = 0
    opexflag(90) = 0: opexflag(91) = 0
    opexflag(92) = 0: opexflag(93) = 0
    opexflag(94) = 0: opexflag(95) = 0
    opexflag(96) = 1: opexflag(97) = 1
    opexflag(98) = 1: opexflag(99) = 1
    opexflag(100) = 1: opexflag(101) = 1
    opexflag(102) = 1: opexflag(103) = 1
    opexflag(104) = 1: opexflag(105) = 1
    opexflag(106) = 1: opexflag(107) = 1
    opexflag(108) = 0: opexflag(109) = 0
    opexflag(110) = 1: opexflag(111) = 1
    opexflag(112) = 0: opexflag(113) = 3
    opexflag(114) = 3: opexflag(115) = 3
    opexflag(116) = 1: opexflag(117) = 1
    opexflag(118) = 1: opexflag(119) = 0
    opexflag(120) = 0: opexflag(121) = 0
    opexflag(122) = 0: opexflag(123) = 0
    opexflag(124) = 0: opexflag(125) = 0
    opexflag(126) = 1: opexflag(127) = 1
    opexflag(128) = 80: opexflag(129) = 80
    opexflag(130) = 80: opexflag(131) = 80
    opexflag(132) = 80: opexflag(133) = 80
    opexflag(134) = 80: opexflag(135) = 80
    opexflag(136) = 80: opexflag(137) = 80
    opexflag(138) = 80: opexflag(139) = 80
    opexflag(140) = 80: opexflag(141) = 80
    opexflag(142) = 80: opexflag(143) = 80
    opexflag(144) = 1: opexflag(145) = 1
    opexflag(146) = 1: opexflag(147) = 1
    opexflag(148) = 1: opexflag(149) = 1
    opexflag(150) = 1: opexflag(151) = 1
    opexflag(152) = 1: opexflag(153) = 1
    opexflag(154) = 1: opexflag(155) = 1
    opexflag(156) = 1: opexflag(157) = 1
    opexflag(158) = 1: opexflag(159) = 1
    opexflag(160) = 0: opexflag(161) = 0
    opexflag(162) = 0: opexflag(163) = 1
    opexflag(164) = 3: opexflag(165) = 1
    opexflag(166) = 0: opexflag(167) = 0
    opexflag(168) = 0: opexflag(169) = 0
    opexflag(170) = 0: opexflag(171) = 1
    opexflag(172) = 3: opexflag(173) = 1
    opexflag(174) = 0: opexflag(175) = 1
    opexflag(176) = 1: opexflag(177) = 1
    opexflag(178) = 1: opexflag(179) = 1
    opexflag(180) = 1: opexflag(181) = 1
    opexflag(182) = 1: opexflag(183) = 1
    opexflag(184) = 0: opexflag(185) = 0
    opexflag(186) = 1: opexflag(187) = 1
    opexflag(188) = 1: opexflag(189) = 1
    opexflag(190) = 1: opexflag(191) = 1
    opexflag(192) = 1: opexflag(193) = 1
    opexflag(194) = 0: opexflag(195) = 0
    opexflag(196) = 0: opexflag(197) = 0
    opexflag(198) = 0: opexflag(199) = 1
    opexflag(200) = 0: opexflag(201) = 0
    opexflag(202) = 0: opexflag(203) = 0
    opexflag(204) = 0: opexflag(205) = 0
    opexflag(206) = 0: opexflag(207) = 0
    opexflag(208) = 0: opexflag(209) = 1
    opexflag(210) = 1: opexflag(211) = 1
    opexflag(212) = 0: opexflag(213) = 1
    opexflag(214) = 0: opexflag(215) = 0
    opexflag(216) = 1: opexflag(217) = 1
    opexflag(218) = 0: opexflag(219) = 1
    opexflag(220) = 1: opexflag(221) = 1
    opexflag(222) = 0: opexflag(223) = 1
    opexflag(224) = 0: opexflag(225) = 1
    opexflag(226) = 1: opexflag(227) = 0
    opexflag(228) = 0: opexflag(229) = 1
    opexflag(230) = 0: opexflag(231) = 0
    opexflag(232) = 1: opexflag(233) = 1
    opexflag(234) = 0: opexflag(235) = 1
    opexflag(236) = 1: opexflag(237) = 1
    opexflag(238) = 0: opexflag(239) = 1
    opexflag(240) = 0: opexflag(241) = 1
    opexflag(242) = 1: opexflag(243) = 1
    opexflag(244) = 0: opexflag(245) = 1
    opexflag(246) = 0: opexflag(247) = 0
    opexflag(248) = 1: opexflag(249) = 1
    opexflag(250) = 1: opexflag(251) = 0
    opexflag(252) = 1: opexflag(253) = 1
    opexflag(254) = 1: opexflag(255) = 0
    
    flagInitialize = 1
End Function

Public Function SizeOfCode(dat() As Byte,ByRef pOpcode As Integer) As Long
    Dim p66 As Long,p67 As Long
    Dim sib As Long,m As Long,rm As Long,dispLen As Long
    Dim i As Long,f As Long,r As Long
    
    If initFlag = 0 Then initFlag = flagInitialize()
    Do
        Select Case dat(i)
            Case &H26,&H2E,&H36,&H3E,&H64,&H65,&HF0,&HF2,&HF3
            Case &H66
                p66 = True
            Case &H67
                p67 = True
            Case Else
                Exit Do
        End Select
        i = i + 1
        If i > 16 Then Exit Function
    Loop
    pOpcode = dat(i)
    If dat(i) = &HF Then
        i = i + 1
        pOpcode = &HF00 + dat(i)
        f = opexflag(dat(i))
    Else
        f = opflag(dat(i))
    End If
    i = i + 1
    If f And &H20 Then i = i + 1
    If f And 1 Then
        m = dat(i) And &HC0
        rm = dat(i) And 7
        i = i + 1
        sib = ((Not p67) And rm = 4)
        Select Case m
            Case 0
                If p67 And rm = 6 Then dispLen = 2
                If (Not p67) And rm = 5 Then dispLen = 4
            Case &H40
                dispLen = 1
            Case &H80
                If p67 Then dispLen = 2 Else dispLen = 4
            Case &HC0
                sib = 0
        End Select
        If sib Then
            If (dat(i) And 7 = 5) And (m = 0 Or m = 2) Then dispLen = 4
            i = i + 1
        End If
        i = i + dispLen
    End If
    If f And 2 Then i = i + 1
    If f And 4 Then i = i + 2
    If f And 8 Then i = i + 4
    If f And &H10 Then If p66 Then i = i + 2 Else i = i + 4
    SizeOfCode = i
End Function

Public Function SizeOfProc(dat() As Byte) As Long
    Dim l As Long,op As Integer,r As Long
    Dim b() As Byte,i As Long,n As Long
    
    b = dat
    Do
        l = SizeOfCode(b,op)
        r = r + l
        If l = 1 And op = &HC3 Then Exit Do
        If l = 3 And op = &HC2 Then Exit Do
        n = UBound(b)
        i = 0
        b = MidB(b,l + 1)
    Loop Until l = 0
    SizeOfProc = r
End Function
原文链接:https://www.f2er.com/vb/259853.html

猜你在找的VB相关文章