前端之家收集整理的这篇文章主要介绍了
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