无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4817|回复: 10
打印 上一主题 下一主题

[求助] set 命令可以保存内存数据到变量中吗?

[复制链接]
跳转到指定楼层
1#
发表于 2011-5-16 12:03:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

比如如下代码
--------------------------------------------------
# 将内存 0x829c 处的 8 个字节的内容写入到 0x60130 处
# 即:将当前根分区号(0x829c)和当前设备(0x82a0)保存到变量 0x60130 中
dd if=(md) of=(md) bs=1 count=8 skip=0x829c seek=0x60130

--------------------------------------------------

可否将 0x829c 的内存数据直接保存到变量中,增加代码的可读性,比如:


set /r sPart=*0x829c+4
set /r sDrive=*0x82a0+4

然后再增加一个将变量内容写入内存的方法,比如:

set /w sPart=*0x829c+4
set /w sDrive=*0x82a0+4

写入的时候,长度不够填0,长度超出截断。
2#
发表于 2011-5-16 12:12:48 | 只看该作者

回复 #1 stevenldj 的帖子

将内存数据保存到变量中可以使用

set /a sPart=*0x829c
set /a sDrive=*0x82a0

写入的话可能麻烦点

echo %sPart% | write 0x829c
echo %sDrive% | write 0x82a0

写入不太确定
回复

使用道具 举报

3#
 楼主| 发表于 2011-5-16 13:52:18 | 只看该作者
set /a sPart=*0x829c
set /a sDrive=*0x82a0

这样不能确定变量长度啊,我要保存4个字节,或者8个字节的内容,或者其它长度的内容

echo %sPart% | write 0x829c
echo %sDrive% | write 0x82a0

这样写入应该不行,内存数据不一定都是可见字符。而且写入的数据长度不能指定
回复

使用道具 举报

4#
发表于 2011-5-16 14:40:19 | 只看该作者

回复 #3 stevenldj 的帖子

提前截取好了不行吗

set sPart=%sPart:~,4%  截取sPart值的前四位  再赋给变量sPart  其他类推

或者看置顶贴 帮助文档  这些在帮助文档里都有
回复

使用道具 举报

5#
发表于 2011-5-16 15:01:26 | 只看该作者
把内存中的数据直接赋值给变量,可能会有问题。。。
READ 读内存时,是读32位,也就是四个字节的值。同理推断的话,SET 把内存数据赋值给变量应该也只能读4个字节的值。
回复

使用道具 举报

6#
 楼主| 发表于 2011-5-16 15:17:37 | 只看该作者
没有别的目的,只是想让代码好读,如果太复杂,那还是用 dd 好了
回复

使用道具 举报

7#
发表于 2011-5-16 15:57:14 | 只看该作者
用外部命令可以(修改版的)
读出
wenv calc -x32 -hex sPart=*0x829c
wenv calc -x32 -hex sDrive=*0x82a0
写入
wenv calc -x32 *0x829c=${sPart}
wenv calc -x32 *0x82a0=${sDrive}

-x32 是控制整数值长度4字节,  -hex 读整数到变量时是16进制形式
回复

使用道具 举报

8#
发表于 2011-5-17 09:25:14 | 只看该作者
calc 可以处理64位的数据,但返回值最多32位,所以SET命令只能得到32位
想要达到楼主的目的是很简单的,直接使用以下命令就行了
保存:
set /a sPart=*0x829c
set /a sDrive=*0x82a0
恢复直接用write
write 0x829c %sPart%
write 0x82a0 %sDrive%

read/write 都只能处理32位数据。

[ 本帖最后由 chenall 于 2011-5-17 09:41 编辑 ]
回复

使用道具 举报

9#
发表于 2011-5-17 09:32:38 | 只看该作者

回复 #8 chenall 的帖子

手误吧,set没有/r这个参数吧
回复

使用道具 举报

10#
发表于 2011-5-17 09:42:06 | 只看该作者
原帖由 zxw 于 2011-5-17 09:32 发表
手误吧,set没有/r这个参数吧


嘿嘿,偷懒,直接抄一楼的,忘记改了。
回复

使用道具 举报

11#
 楼主| 发表于 2011-5-17 11:02:34 | 只看该作者
也就是说 set、read、write 都只能处理 4 个字节的内容了,那就可以实现一楼的目的了。

不过,我看 set 命令可以将字符串写入变量中,可以存储 512 个字符,我想,将字符串换成内存数据,应该也可以实现吧,第一个字节存放内存数据的长度,由 GRUB4DOS 管理,后面字节存放内存数据的内容。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-30 12:25

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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