无忧启动论坛
标题:
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