设为首页收藏本站帮助中心
查看: 455|回复: 0
收起左侧

易语言MASM置入代码实现获取字节集数据(字节型数组)到文本型后的长度 (返回整数型)

[复制链接]
发表于 2020-4-26 22:26:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?加入我们

x
1.png

  1. .版本 2

  2. .程序集 程序集1

  3. .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码


  4. _临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
  5. 返回 (0)  ' 可以根据您的需要返回任意数值

  6. .子程序 _临时子程序
  7. .局部变量 字节集, 字节集
  8. .局部变量 数组, 字节型, , "0"
  9. .局部变量 长度, 整数型
  10. .局部变量 时间, 整数型
  11. .局部变量 文本, 文本型

  12. ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
  13. 字节集 = 到字节集 (“Hello World! 中文测试12345”) + { 0 } + 到字节集 (“中文测试”)
  14. 数组 = { 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 32, 214, 208, 206, 196, 178, 226, 202, 212, 49, 50, 51, 52, 53, 0, 214, 208, 206, 196, 178, 226, 202, 212 }
  15. 输出调试文本 (取文本长度 (到文本 (字节集)))
  16. 输出调试文本 (字节集_取文本长度 (字节集))
  17. 输出调试文本 (字节型数组_取文本长度 (数组))
  18. 输出调试文本 (取文本长度 (到文本 (数组)))
  19. 时间 = 取启动时间 ()
  20. .计次循环首 (100000000, )
  21.     长度 = 取文本长度 (到文本 (字节集))
  22. .计次循环尾 ()
  23. 文本 = “易源码耗时:” + 到文本 (取启动时间 () - 时间) + #换行符
  24. 时间 = 取启动时间 ()
  25. .计次循环首 (100000000, )
  26.     长度 = 字节集_取文本长度 (字节集)
  27. .计次循环尾 ()
  28. 文本 = 文本 + “置入代码耗时:” + 到文本 (取启动时间 () - 时间)
  29. 信息框 (文本, 0, , )


  30. .子程序 字节集_取文本长度, 整数型, 公开, 返回(取文本长度 (到文本 (数据)))
  31. .参数 数据, 字节集

  32. 置入代码 ({ 83, 81, 82, 139, 69, 8, 11, 192, 117, 2, 235, 44, 139, 0, 11, 192, 117, 2, 235, 36, 139, 88, 4, 11, 219, 117, 4, 51, 192, 235, 25, 131, 192, 8, 51, 201, 235, 12, 138, 20, 8, 10, 210, 117, 4, 139, 193, 235, 7, 65, 59, 203, 114, 240, 139, 195, 90, 89, 91, 201, 194, 4, 0 })
  33. ' push ebx
  34. ' push ecx
  35. ' push edx
  36. ' mov eax,[ebp+8]
  37. ' .if eax == 0
  38. ' jmp ASM_END
  39. ' .endif
  40. ' mov eax,[eax]
  41. ' .if eax == 0
  42. ' jmp ASM_END
  43. ' .endif
  44. ' mov ebx,[eax+4]
  45. ' .if ebx == 0
  46. ' xor eax,eax
  47. ' jmp ASM_END
  48. ' .endif
  49. ' add eax,8
  50. ' xor ecx,ecx
  51. ' .while ecx < ebx
  52. ' mov dl,[ecx+eax]
  53. ' .if dl == 0
  54. ' mov eax,ecx
  55. ' jmp ASM_END
  56. ' .endif
  57. ' inc ecx
  58. ' .endw
  59. ' mov eax,ebx
  60. ' ASM_END:
  61. ' pop edx
  62. ' pop ecx
  63. ' pop ebx
  64. ' leave
  65. ' retn 4

  66. 返回 (0)

  67. .子程序 字节型数组_取文本长度, 整数型, 公开, 返回(取文本长度 (到文本 (数据)))
  68. .参数 数据, 字节型, 数组

  69. 置入代码 ({ 83, 81, 82, 139, 69, 8, 11, 192, 117, 2, 235, 44, 139, 0, 11, 192, 117, 2, 235, 36, 139, 88, 4, 11, 219, 117, 4, 51, 192, 235, 25, 131, 192, 8, 51, 201, 235, 12, 138, 20, 8, 10, 210, 117, 4, 139, 193, 235, 7, 65, 59, 203, 114, 240, 139, 195, 90, 89, 91, 201, 194, 4, 0 })
  70. ' push ebx
  71. ' push ecx
  72. ' push edx
  73. ' mov eax,[ebp+8]
  74. ' .if eax == 0
  75. ' jmp ASM_END
  76. ' .endif
  77. ' mov eax,[eax]
  78. ' .if eax == 0
  79. ' jmp ASM_END
  80. ' .endif
  81. ' mov ebx,[eax+4]
  82. ' .if ebx == 0
  83. ' xor eax,eax
  84. ' jmp ASM_END
  85. ' .endif
  86. ' add eax,8
  87. ' xor ecx,ecx
  88. ' .while ecx < ebx
  89. ' mov dl,[ecx+eax]
  90. ' .if dl == 0
  91. ' mov eax,ecx
  92. ' jmp ASM_END
  93. ' .endif
  94. ' inc ecx
  95. ' .endw
  96. ' mov eax,ebx
  97. ' ASM_END:
  98. ' pop edx
  99. ' pop ecx
  100. ' pop ebx
  101. ' leave
  102. ' retn 4

  103. 返回 (0)

复制代码

相关帖子

这个小可爱很神秘,什么都没留下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则