无忧启动论坛

标题: set 命令可以保存内存数据到变量中吗? [打印本页]

作者: stevenldj    时间: 2011-5-16 12:03
标题: set 命令可以保存内存数据到变量中吗?

比如如下代码
--------------------------------------------------
# 将内存 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,长度超出截断。

作者: sratlf    时间: 2011-5-16 12:12
标题: 回复 #1 stevenldj 的帖子
将内存数据保存到变量中可以使用

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

写入的话可能麻烦点

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

写入不太确定
作者: stevenldj    时间: 2011-5-16 13:52
set /a sPart=*0x829c
set /a sDrive=*0x82a0

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

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

这样写入应该不行,内存数据不一定都是可见字符。而且写入的数据长度不能指定
作者: sratlf    时间: 2011-5-16 14:40
标题: 回复 #3 stevenldj 的帖子
提前截取好了不行吗

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

或者看置顶贴 帮助文档  这些在帮助文档里都有
作者: sgw888    时间: 2011-5-16 15:01
把内存中的数据直接赋值给变量,可能会有问题。。。
READ 读内存时,是读32位,也就是四个字节的值。同理推断的话,SET 把内存数据赋值给变量应该也只能读4个字节的值。
作者: stevenldj    时间: 2011-5-16 15:17
没有别的目的,只是想让代码好读,如果太复杂,那还是用 dd 好了
作者: tuxw    时间: 2011-5-16 15:57
用外部命令可以(修改版的)
读出
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进制形式
作者: chenall    时间: 2011-5-17 09:25
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 编辑 ]
作者: zxw    时间: 2011-5-17 09:32
标题: 回复 #8 chenall 的帖子
手误吧,set没有/r这个参数吧
作者: chenall    时间: 2011-5-17 09:42
原帖由 zxw 于 2011-5-17 09:32 发表
手误吧,set没有/r这个参数吧


嘿嘿,偷懒,直接抄一楼的,忘记改了。
作者: stevenldj    时间: 2011-5-17 11:02
也就是说 set、read、write 都只能处理 4 个字节的内容了,那就可以实现一楼的目的了。

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




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3