免费邀请码更改用户名领国庆勋章CRC32解密2.0回帖奖励召回投票记录删除领夜猫子帮助中心 本站已运行
查看: 89|回复: 1
收起左侧

易语言置入代码逻辑型变量(数组)BUG检测,在内存中存储的数据是否正确(并进行异常修复)

[复制链接]
发表于 2019-7-8 17:43:27 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 QAQ 于 2019-7-8 17:49 编辑

  1. .版本 2
  2. .支持库 spec

  3. .程序集 程序集1

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


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

  7. .子程序 _临时子程序
  8. .局部变量 A, 逻辑型, , "0"
  9. .局部变量 B, 逻辑型

  10. ' 易语言中1个逻辑型占4字节,在内存中只有0和1,出现其他值则有问题,使用其他置入代码或内存指针写入程序可能会造成逻辑型变量、数组在内存中的数据出现异常,从而造成赋值,逻辑比较结果出错,最后造成程序出现崩溃等未知BUG,如果你的程序存在问题则使用此模块检查。
  11. A = { 假, 真, 假, 真 }


  12. 调试输出 (A, 逻辑型数组_数据是否正确 (A))
  13. A [1] = 整数型强制到逻辑型 (-1)
  14. A [2] = 整数型强制到逻辑型 (12345)
  15. 调试输出 (A, A [1] = A [2], 逻辑型数组_数据是否正确 (A))
  16. 逻辑型数组_数据修复 (A)
  17. 调试输出 (A, A [1] = A [2], 逻辑型数组_数据是否正确 (A))
  18. 调试输出 (逻辑型变量_数据是否正确 (真))
  19. 调试输出 (逻辑型变量_数据是否正确 (假))
  20. 调试输出 (逻辑型变量_数据是否正确 (B))
  21. B = 整数型强制到逻辑型 (-1)
  22. 调试输出 (B, 逻辑型变量_数据是否正确 (B))
  23. B = 逻辑型变量_数据修复 (B)
  24. 调试输出 (B, 逻辑型变量_数据是否正确 (B))

  25. .子程序 逻辑型数组_数据是否正确, 逻辑型, , 检测一个逻辑型数组在内存中是否存在异常数据,一但存在异常将会造成逻辑比较、赋值出错
  26. .参数 逻辑型数组, 逻辑型, 数组

  27. 置入代码 ({ 83, 81, 82, 139, 69, 8, 139, 0, 139, 80, 4, 131, 192, 8, 187, 0, 0, 0, 0, 235, 20, 139, 12, 152, 11, 201, 116, 12, 131, 249, 1, 116, 7, 184, 0, 0, 0, 0, 235, 10, 67, 59, 218, 114, 232, 184, 1, 0, 0, 0, 90, 89, 91, 201, 194, 4, 0 })
  28. ' push ebx
  29. ' push ecx
  30. ' push edx
  31. ' mov eax,[ebp+8]
  32. ' mov eax,[eax]
  33. ' mov edx,[eax+4]
  34. ' add eax,8
  35. ' mov ebx,0
  36. ' .while ebx < edx
  37. ' mov ecx,[eax+ebx*4]
  38. ' .if ecx != 0 && ecx !=1
  39. ' mov eax,0
  40. ' jmp ASM_END
  41. ' .endif
  42. ' inc ebx
  43. ' .endw
  44. ' mov eax,1
  45. ' ASM_END:
  46. ' pop edx
  47. ' pop ecx
  48. ' pop ebx
  49. ' leave
  50. ' retn 4

  51. 返回 (假)




  52. .子程序 逻辑型数组_数据修复, , , 修复逻辑型数组中的异常数据 (谨慎使用)
  53. .参数 逻辑型数组, 逻辑型, 参考 数组, 在内存中1为真,其他值为假,必须为数组变量

  54. 置入代码 ({ 96, 139, 69, 8, 139, 0, 139, 80, 4, 131, 192, 8, 187, 0, 0, 0, 0, 235, 21, 139, 12, 152, 131, 249, 1, 116, 12, 11, 201, 116, 8, 185, 0, 0, 0, 0, 137, 12, 152, 67, 59, 218, 114, 231, 97, 201, 194, 4, 0 })
  55. ' pusha
  56. ' mov eax,[ebp+8]
  57. ' mov eax,[eax]
  58. ' mov edx,[eax+4]
  59. ' add eax,8
  60. ' mov ebx,0
  61. ' .while ebx < edx
  62. ' mov ecx,[eax+ebx*4]
  63. ' .if ecx != 1 && ecx != 0
  64. ' mov ecx,0
  65. ' mov [eax+ebx*4],ecx
  66. ' .endif
  67. ' inc ebx
  68. ' .endw
  69. ' popa
  70. ' leave
  71. ' retn 4


  72. .子程序 整数型强制到逻辑型, 逻辑型, , 使用此程序可将任意整数转换成数据异常的逻辑型
  73. .参数 变量, 整数型

  74. 置入代码 ({ 139, 69, 8, 201, 194, 4, 0 })
  75. ' mov eax,[ebp+8]
  76. ' leave
  77. ' retn 4
  78. 返回 (假)

  79. .子程序 逻辑型强制到整数型, 整数型, , 使用此程序可将数据异常逻辑型还原成整数型
  80. .参数 变量, 逻辑型

  81. 置入代码 ({ 139, 69, 8, 201, 194, 4, 0 })
  82. ' mov eax,[ebp+8]
  83. ' leave
  84. ' retn 4
  85. 返回 (0)

  86. .子程序 逻辑型变量_数据是否正确, 逻辑型
  87. .参数 变量, 逻辑型

  88. 置入代码 ({ 139, 69, 8, 11, 192, 116, 12, 131, 248, 1, 116, 7, 184, 0, 0, 0, 0, 235, 5, 184, 1, 0, 0, 0, 201, 194, 4, 0 })
  89. ' mov eax,[ebp+8]
  90. ' .if eax != 0 && eax != 1
  91. ' mov eax,0
  92. ' .elseif
  93. ' mov eax,1
  94. ' .endif
  95. ' leave
  96. ' retn 4
  97. 返回 (假)

  98. .子程序 逻辑型变量_数据修复, 逻辑型
  99. .参数 变量, 逻辑型, , 在内存中0为假,其他值为真

  100. 置入代码 ({ 139, 69, 8, 11, 192, 116, 5, 184, 1, 0, 0, 0, 201, 194, 4, 0 })
  101. ' mov eax,[ebp+8]
  102. ' .if eax != 0
  103. ' mov eax,1
  104. ' .endif
  105. ' leave
  106. ' retn 4
  107. 返回 (假)
复制代码
回复

使用道具 举报

腾讯云数据库性能卓越稳定可靠,为您解决数据库运维难题
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则