VB中字符串处理函数反汇编对比
2004-10-22 13:36
561 查看
简单代码用于反汇编测试对比:
不带$的字符串处理函数测试代码:
Dim s As String
Private Sub Command1_Click()
s = Left("test str", 3)
End Sub
SC可知Command1_Click的入口点:00401A30
反汇编代码:
00401A84 . C745 C0 CC1640>MOV DWORD PTR SS:[EBP-40],WITHOUTI.00401>; UNICODE "test str"
00401A8B . C745 B8 080000>MOV DWORD PTR SS:[EBP-48],8
00401A92 . FF15 6C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarDu>; MSVBVM60.__vbaVarDup
00401A98 . 8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28]
00401A9B . 6A 03 PUSH 3
00401A9D . 8D45 C8 LEA EAX,DWORD PTR SS:[EBP-38]
00401AA0 . 52 PUSH EDX
00401AA1 . 50 PUSH EAX
00401AA2 . FF15 70104000 CALL DWORD PTR DS:[<&MSVBVM60.#617>] ; MSVBVM60.rtcLeftCharVar
00401AA8 . 8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38]
00401AAB . 51 PUSH ECX
00401AAC . FF15 08104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVa>; MSVBVM60.__vbaStrVarMove
00401AB2 . 8BD0 MOV EDX,EAX
00401AB4 . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401AB7 . FF15 78104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrMo>; MSVBVM60.__vbaStrMove
00401ABD . 8BD0 MOV EDX,EAX
00401ABF . 8D4E 34 LEA ECX,DWORD PTR DS:[ESI+34]
00401AC2 . FF15 5C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCo>; MSVBVM60.__vbaStrCopy
00401AC8 . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401ACB . FF15 88104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>; MSVBVM60.__vbaFreeStr
00401AD1 . 8D55 C8 LEA EDX,DWORD PTR SS:[EBP-38]
00401AD4 . 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
00401AD7 . 52 PUSH EDX
00401AD8 . 50 PUSH EAX
00401AD9 . 6A 02 PUSH 2
00401ADB . FF15 0C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeV>; MSVBVM60.__vbaFreeVarList
00401AE1 . 83C4 0C ADD ESP,0C
00401AE4 . 897D FC MOV DWORD PTR SS:[EBP-4],EDI
00401AE7 . 68 0C1B4000 PUSH WITHOUTI.00401B0C
00401AEC . EB 1D JMP SHORT WITHOUTI.00401B0B
00401AEE . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401AF1 . FF15 88104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>; MSVBVM60.__vbaFreeStr
00401AF7 . 8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38]
00401AFA . 8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28]
00401AFD . 51 PUSH ECX
00401AFE . 52 PUSH EDX
00401AFF . 6A 02 PUSH 2
00401B01 . FF15 0C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeV>; MSVBVM60.__vbaFreeVarList
带$的字符串处理函数测试代码:
Dim s As String
Private Sub Command1_Click()
s = Left("test str", 3)
End Sub
SC可知Command1_Click的入口点:004019E0
反汇编代码:
00401A24 . 68 B4164000 PUSH WITHIT.004016B4 ; UNICODE "test str"
00401A29 . 897D E8 MOV DWORD PTR SS:[EBP-18],EDI
00401A2C . FF15 64104000 CALL DWORD PTR DS:[<&MSVBVM60.#616>] ; MSVBVM60.rtcLeftCharBstr
00401A32 . 8BD0 MOV EDX,EAX
00401A34 . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401A37 . FF15 6C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrMo>; MSVBVM60.__vbaStrMove
00401A3D . 8BD0 MOV EDX,EAX
00401A3F . 8D4E 34 LEA ECX,DWORD PTR DS:[ESI+34]
00401A42 . FF15 54104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCo>; MSVBVM60.__vbaStrCopy
00401A48 . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401A4B . FF15 7C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>; MSVBVM60.__vbaFreeStr
00401A51 . 897D FC MOV DWORD PTR SS:[EBP-4],EDI
00401A54 . 68 661A4000 PUSH WITHIT.00401A66
00401A59 . EB 0A JMP SHORT WITHIT.00401A65
00401A5B . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401A5E . FF15 7C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>; MSVBVM60.__vbaFreeStr
可以看出,不带$的函数比带$的函数的反汇编代码要罗嗦很多,而且资源释放也比带$的麻烦,其效率可想比带$的函数差很多
两类函数只差一个$,所以建议大家使用带$的那类函数
不带$的字符串处理函数测试代码:
Dim s As String
Private Sub Command1_Click()
s = Left("test str", 3)
End Sub
SC可知Command1_Click的入口点:00401A30
反汇编代码:
00401A84 . C745 C0 CC1640>MOV DWORD PTR SS:[EBP-40],WITHOUTI.00401>; UNICODE "test str"
00401A8B . C745 B8 080000>MOV DWORD PTR SS:[EBP-48],8
00401A92 . FF15 6C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarDu>; MSVBVM60.__vbaVarDup
00401A98 . 8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28]
00401A9B . 6A 03 PUSH 3
00401A9D . 8D45 C8 LEA EAX,DWORD PTR SS:[EBP-38]
00401AA0 . 52 PUSH EDX
00401AA1 . 50 PUSH EAX
00401AA2 . FF15 70104000 CALL DWORD PTR DS:[<&MSVBVM60.#617>] ; MSVBVM60.rtcLeftCharVar
00401AA8 . 8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38]
00401AAB . 51 PUSH ECX
00401AAC . FF15 08104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVa>; MSVBVM60.__vbaStrVarMove
00401AB2 . 8BD0 MOV EDX,EAX
00401AB4 . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401AB7 . FF15 78104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrMo>; MSVBVM60.__vbaStrMove
00401ABD . 8BD0 MOV EDX,EAX
00401ABF . 8D4E 34 LEA ECX,DWORD PTR DS:[ESI+34]
00401AC2 . FF15 5C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCo>; MSVBVM60.__vbaStrCopy
00401AC8 . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401ACB . FF15 88104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>; MSVBVM60.__vbaFreeStr
00401AD1 . 8D55 C8 LEA EDX,DWORD PTR SS:[EBP-38]
00401AD4 . 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
00401AD7 . 52 PUSH EDX
00401AD8 . 50 PUSH EAX
00401AD9 . 6A 02 PUSH 2
00401ADB . FF15 0C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeV>; MSVBVM60.__vbaFreeVarList
00401AE1 . 83C4 0C ADD ESP,0C
00401AE4 . 897D FC MOV DWORD PTR SS:[EBP-4],EDI
00401AE7 . 68 0C1B4000 PUSH WITHOUTI.00401B0C
00401AEC . EB 1D JMP SHORT WITHOUTI.00401B0B
00401AEE . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401AF1 . FF15 88104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>; MSVBVM60.__vbaFreeStr
00401AF7 . 8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38]
00401AFA . 8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28]
00401AFD . 51 PUSH ECX
00401AFE . 52 PUSH EDX
00401AFF . 6A 02 PUSH 2
00401B01 . FF15 0C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeV>; MSVBVM60.__vbaFreeVarList
带$的字符串处理函数测试代码:
Dim s As String
Private Sub Command1_Click()
s = Left("test str", 3)
End Sub
SC可知Command1_Click的入口点:004019E0
反汇编代码:
00401A24 . 68 B4164000 PUSH WITHIT.004016B4 ; UNICODE "test str"
00401A29 . 897D E8 MOV DWORD PTR SS:[EBP-18],EDI
00401A2C . FF15 64104000 CALL DWORD PTR DS:[<&MSVBVM60.#616>] ; MSVBVM60.rtcLeftCharBstr
00401A32 . 8BD0 MOV EDX,EAX
00401A34 . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401A37 . FF15 6C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrMo>; MSVBVM60.__vbaStrMove
00401A3D . 8BD0 MOV EDX,EAX
00401A3F . 8D4E 34 LEA ECX,DWORD PTR DS:[ESI+34]
00401A42 . FF15 54104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCo>; MSVBVM60.__vbaStrCopy
00401A48 . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401A4B . FF15 7C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>; MSVBVM60.__vbaFreeStr
00401A51 . 897D FC MOV DWORD PTR SS:[EBP-4],EDI
00401A54 . 68 661A4000 PUSH WITHIT.00401A66
00401A59 . EB 0A JMP SHORT WITHIT.00401A65
00401A5B . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00401A5E . FF15 7C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>; MSVBVM60.__vbaFreeStr
可以看出,不带$的函数比带$的函数的反汇编代码要罗嗦很多,而且资源释放也比带$的麻烦,其效率可想比带$的函数差很多
两类函数只差一个$,所以建议大家使用带$的那类函数
相关文章推荐
- vb js函数对比 vb与js中字符串处理函数的对应比较 VB JS 函数 sysdzw
- VB字符串处理函数一览
- VB字符串处理函数一览
- vb字符串处理函数
- vb与js中字符串处理函数的对应比较
- VBA 字符串处理函数
- 标准的ANSI C字符串函数和它们的等价Unicode函数 字符串处理函数对照表[宽字符处理与ANSI字符处理]
- Oracle 存储过程总结 二、字符串处理相关函数
- C语言常用字符串处理函数
- C语言字符串处理函数
- 自己实现基本的C标准库字符串处理函数——基本问题
- MS-SQL Server字符串处理函数大全
- C# asp.net中常见的字符串处理函数及数字格式化
- 【R笔记】R语言中的字符串处理函数
- JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
- SQL Server字符串处理函数大全
- PHP常用字符串处理函数与ASP对照
- FLEX 字符串处理函数
- SQL字符串处理函数大全
- 举例说明常用字符串处理函数