伪造的数组能够让 VB IDE 不崩溃吗

bobogg 2016-05-30 03:29:53
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Ptr() As Any) As Long


Dim Ar_001() As Long
Dim Ar_002() As Long

Public Sub Form_Load()


ReDim Ar_001(100) As Long
'ReDim Ar_002() As Long

Ar_001(0) = 12345

Dim p(1 To 2) As Long
Dim g(1 To 2) As Long

p(1) = VarPtrArray(Ar_001)
p(2) = VarPtrArray(Ar_002)

CopyMemory ByVal p(2), ByVal p(1), 24 '伪造 Ar_002 = , Ar_001


MsgBox Ar_002(0), , Ar_002(0) = Ar_001(0)





End Sub ' 跳出 End Sub 时, VB IDE 会崩溃 , EXE 也会崩溃






...全文
331 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3 楼 赵4老师的回复:
[quote=引用 2 楼 Chen8013 的回复:] 晕死,你这不叫“伪造”,纯粹只是盗取资源。 你要伪造,就得“毁灭作案痕迹”才行…………
警察叔叔,快来抓教唆犯啊——[/quote] 赵老师太能嘚瑟了,哪里都有你。
舉杯邀明月 2016-05-31
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
[quote=引用 2 楼 Chen8013 的回复:] 晕死,你这不叫“伪造”,纯粹只是盗取资源。 你要伪造,就得“毁灭作案痕迹”才行…………
警察叔叔,快来抓教唆犯啊——[/quote]
舉杯邀明月 2016-05-31
  • 打赏
  • 举报
回复
另外就是,那“一堆结构信息”数据是28字节吧,你只Copy了24字节,应该也会引起问题的。
舉杯邀明月 2016-05-31
  • 打赏
  • 举报
回复
引用 5 楼 Bobogg 的回复:
[quote=引用 2 楼 Chen8013 的回复:] 晕死,你这不叫“伪造”,纯粹只是盗取资源。 你要伪造,就得“毁灭作案痕迹”才行…………
大概表达一下咩 干麻那么100%拘泥于用词[/quote] 这不仅是“表达不一样”的问题。  我给你说的“毁灭作案痕迹”这一步你没做,就造成崩溃。 如果照这要求做了,是没有任何问题的。
bobogg 2016-05-31
  • 打赏
  • 举报
回复
引用 2 楼 Chen8013 的回复:
晕死,你这不叫“伪造”,纯粹只是盗取资源。 你要伪造,就得“毁灭作案痕迹”才行…………
大概表达一下咩 干麻那么100%拘泥于用词
bobogg 2016-05-31
  • 打赏
  • 举报
回复
引用 1 楼 Topc008 的回复:
干嘛要伪造?直接复制不行吗?
要实现类似 C 指针
赵4老师 2016-05-31
  • 打赏
  • 举报
回复
引用 2 楼 Chen8013 的回复:
晕死,你这不叫“伪造”,纯粹只是盗取资源。 你要伪造,就得“毁灭作案痕迹”才行…………
警察叔叔,快来抓教唆犯啊——
舉杯邀明月 2016-05-31
  • 打赏
  • 举报
回复
晕死,你这不叫“伪造”,纯粹只是盗取资源。 你要伪造,就得“毁灭作案痕迹”才行…………
一如既往哈 2016-05-31
  • 打赏
  • 举报
回复
干嘛要伪造?直接复制不行吗?
bobogg 2016-05-31
  • 打赏
  • 举报
回复
Form_Unload, Class_Terminate 时, 才需要销毁 但此法还是有缺陷 VB IDE 中途按下 STOP 键时 ( 被强迫中断) 会因为没有经过销毁程序而崩溃
bobogg 2016-05-31
  • 打赏
  • 举报
回复
引用 14 楼 bakw 的回复:
测试了一下,CopyMemory ByVal p(2), ByVal p(1), 24 改成CopyMemory ByVal p(2), ByVal p(1), 4 似乎就好了
正解 我一开始就宣告成 全域数组 没理由跳出 Fom_Load 时 , VB 会跑去进行资源回收
笨狗先飞 2016-05-31
  • 打赏
  • 举报
回复
不过这办法真不错,一个硬连接
笨狗先飞 2016-05-31
  • 打赏
  • 举报
回复
引用 18 楼 Bobogg 的回复:
[quote=引用 13 楼 Chen8013 的回复:] 你的问题就是:房间B成了“无主孤魂”,房间A被资源回收两次,在第2次“资源回收”时引起异常
你的意思我知道 但请您注意看 我为了避开系统回收资源 所以我把 AR_002 宣告成 全域数组 意即当程序跳出 Form_Load ....End Sub 时 VB 照理应该不会去把 AR_002 进行资源回收啊 ( 它是 全域数组 ) 会崩溃的原因, 以前我在CSDN 就问过了: 得到的答案就是 [b]房间A被资源回收两次[/b] 所以在此我就把它改成 全域数组 全域数组只会在 Form_Unload 时, 才会被VB进行资源回收 可是现在是在 Form_load ....End Sub 跳出时产生崩溃的 这点请您看清楚 [/quote] 喂口太大,吃了24字节,撑着了。。。可能刷掉了局部变量了
bobogg 2016-05-31
  • 打赏
  • 举报
回复
引用 13 楼 Chen8013 的回复:
你的问题就是:房间B成了“无主孤魂”,房间A被资源回收两次,在第2次“资源回收”时引起异常
你的意思我知道 但请您注意看 我为了避开系统回收资源 所以我把 AR_002 宣告成 全域数组 意即当程序跳出 Form_Load ....End Sub 时 VB 照理应该不会去把 AR_002 进行资源回收啊 ( 它是 全域数组 ) 会崩溃的原因, 以前我在CSDN 就问过了: 得到的答案就是 [b]房间A被资源回收两次[/b] 所以在此我就把它改成 全域数组 全域数组只会在 Form_Unload 时, 才会被VB进行资源回收 可是现在是在 Form_load ....End Sub 跳出时产生崩溃的 这点请您看清楚
舉杯邀明月 2016-05-31
  • 打赏
  • 举报
回复
引用 12 楼 Bobogg 的回复:
[quote=引用 11 楼 Bobogg 的回复:] 很明显,你并没有理解我所说的内容。 根本就不会有“移来移去”的事情。
如果您是指销毁 AR_002 我知道此一动作执行下去 ( 在 END SUB 之前执行 ) VB IDE 肯定不会崩溃 ( 以前我就知道了 , 以前试过了) 可惜这不是我的需求 因为我要 AR_002 永远保持和 AR_001 连线 所以不能销毁 AR_002[/quote] 操作不正确,很可能会引起问题的。 最简单的,你CopyMemory的第3个参数,从24改成4,都不会出你所说的这个事情。
笨狗先飞 2016-05-31
  • 打赏
  • 举报
回复
一个数组指针Long型4个字节,说得过去,但你程序结束的时候至少应该还出来吧,不然IDE应该还欠了系统4个字节,估计应该是这个问题
笨狗先飞 2016-05-31
  • 打赏
  • 举报
回复
搞过之后程序能跑,但是感觉这个IDE似乎有点力不从心,什么时候崩溃变得未知
笨狗先飞 2016-05-31
  • 打赏
  • 举报
回复
测试了一下,CopyMemory ByVal p(2), ByVal p(1), 24 改成CopyMemory ByVal p(2), ByVal p(1), 4 似乎就好了
舉杯邀明月 2016-05-31
  • 打赏
  • 举报
回复
初始状态: 小张 手持钥匙A 对应只能开房间A的锁 小王 手持钥匙B 对应只能开房间B的锁 然后,你通过某手段,可以让小王有钥匙C、它跟钥匙A一模一样,   因此,小王可以凭钥匙C进入房间A,使用里面的任何东西了。(这儿开始,就是在“作.案”了) 最终,“警察蜀黍”要来检查了: 要“核实身份、回收资产”之前(就是Ar_001、Ar_002被销毁之前。这是“变量作用域”的问题), 你必须得让小王恢复“持有钥匙B”的状态(这就是“毁灭作案痕迹”)。 现在,“警察蜀黍”看到的就是跟“初始状态毫无区别。 系统能完全正常的回收资源,这就不会引起任何异常了。 (你的问题就是:房间B成了“无主孤魂”,房间A被资源回收两次,在第2次“资源回收”时引起异常) 好了,你这个问题我已经说得够多的了,自己去理解。
bobogg 2016-05-31
  • 打赏
  • 举报
回复
引用 11 楼 Bobogg 的回复:
很明显,你并没有理解我所说的内容。 根本就不会有“移来移去”的事情。
如果您是指销毁 AR_002 我知道此一动作执行下去 ( 在 END SUB 之前执行 ) VB IDE 肯定不会崩溃 ( 以前我就知道了 , 以前试过了) 可惜这不是我的需求 因为我要 AR_002 永远保持和 AR_001 连线 所以不能销毁 AR_002
加载更多回复(3)

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧