设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1598|回复: 8
打印 上一主题 下一主题

[胡扯] 胆大包天的ruby尝试,游戏无关

[复制链接]

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23124
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

跳转到指定楼层
1
发表于 2017-11-4 23:39:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
看懂的自然看懂……

RUBY 代码复制
  1. # 胆大包天
  2. copymemory = Win32API.new("kernel32", "RtlMoveMemory", "iii", "i")
  3. copymemory_ip = Win32API.new("kernel32", "RtlMoveMemory", "ipi", "i")
  4.  
  5. # 初始化一个Table
  6. t = Table.new(2,10,10)
  7. for i in 0...2
  8.   for j in 0...10
  9.     for k in 0...10
  10.       t[i, j, k] = 16705 # 0x4141
  11.     end
  12.   end
  13. end
  14.  
  15. # 初始化一个1字节缓存和一个4字节缓存
  16. cache = "0"*1
  17. buffer = "0000"
  18.  
  19. # 邪恶的开始
  20. cache_info = [cache.size].pack("L")+ [cache].pack("p")
  21. buffer_addr = [buffer].pack("p").unpack("L")[0]
  22. copymemory.call(buffer_addr, t.id*2+16, 4)
  23. a = buffer.unpack("L")[0] + 28
  24. copymemory.call(buffer_addr, a, 4)
  25. table_data_addr = buffer.unpack("L")[0]
  26. table_info = [t.xsize * t.ysize * t.zsize * 2].pack("L") + buffer
  27. copymemory_ip.call(cache.id * 2 + 8, table_info, 8)
  28.  
  29.  
  30. p cache
  31. # => 输出400个A
  32.  
  33. # 这里居然可以执行
  34. cache[399] = 255
  35.  
  36. p t[1, 9, 9]  
  37. # => -191
  38. # => -191
  39. # => -191
  40. # 重要的事情说三遍
  41.  
  42. # 很想知道不擦PP会怎样
  43. copymemory_ip.call(cache.id*2 + 8, cache_info, 8)
  44.  
  45. exit

点评

其实是我在想怎么更快的RGBA->BGRA来着……  发表于 2017-11-4 23:42

评分

参与人数 1+1 收起 理由
MeowSnow + 1 虽然完全看不懂

查看全部评分

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。

Lv4.逐梦者

梦石
0
星屑
13560
在线时间
2753 小时
注册时间
2014-10-4
帖子
756

R考场第七期纪念奖

4
发表于 2017-11-5 20:11:25 | 只看该作者
想说 呃  并不懂我发的脚本和你发的有什么因果关联..啊
黑freeze是很早的想法了 因为不记得看到谁说要截图没奇怪的bug就要靠freeze
昨晚做了只是突然想到
而黑freeze的思路则显而易见 位图数据储存的地址早就不是秘密了
即使是 一路从新建位图跟过去 哪个位置放什么也一清二楚
昨晚看你的脚本并没有看懂 今天看你的点评才觉得奇怪 刚刚大概看懂的
我们发了可能看起来有关联的东西 只是巧合吧..
何况两者截然不同 我实现的主要障碍是freeze的过程方式
加了改换数据指针什么的 只是因为用起来方便 其实也完全可以只保存一个位图的句柄
如有冒犯请见谅

点评

呃 谢谢理解..不过适用性不强 不同版本的dll需要不同版本的脚本  发表于 2017-11-5 20:36
而且你那个脚本搞定了freeze之后,原理上感觉比原先晴兰做的那个无遮挡截图更普适一些  发表于 2017-11-5 20:31
哈哈木事木事,只是想说目的不同但黑数据指针这个事情刚巧想到一块去了……而且你用$开头的变量,这就连最后擦pp的动作都省了……  发表于 2017-11-5 20:26
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

3
发表于 2017-11-5 18:36:20 | 只看该作者
点评中的问题参考 https://rpg.blue/thread-224347-1-1.html

另外,要拿那一坨东西似乎可以 t.marshal_dump, 不过我不确定和内存里的表示一模一样

点评

大概看了一下,殊途同归,我最后还是用了hack  发表于 2017-11-5 19:17

评分

参与人数 1+1 收起 理由
SailCat + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3132
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

2
发表于 2017-11-5 11:14:45 | 只看该作者
本帖最后由 IamI 于 2017-11-5 11:22 编辑
  1. Struct Table

  2. int32 dimension
  3. int32 x_size
  4. int32 y_size
  5. int32 z_size
  6. int32 data_area_size
  7. 0...z_size, 0...y_size, 0...x_size -> int16 data
复制代码

人有多大胆,地有多大产
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-26 03:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表