w
写入字符串。w foobar write string 'foobar'
但是,它似乎对我不起作用, >
文件
foo
保持为空。我应该刷新还是保存?#1 楼
TLDRradare2
默认情况下在read-only mode
中打开文件。 (有关更多信息,请参见手册r2 -h
。)要允许写入文件,请在
write mode
(r2 -w file
)中启动radare2。 read-only session
(oo+
)模仿写访问,但radare2中的更改实际上未写入磁盘。写入模式-示例
write
中的cache mode
:$ r2 -w foo
打印32个字节(带有
e io.cache=true
):[0x00000000]> px 32
- offset - 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
0x00000000 ffff ffff ffff ffff ffff ffff ffff ffff ................
0x00000010 ffff ffff ffff ffff ffff ffff ffff ffff ................
注意:前32个字节(文件的其余部分)为空。
让我们写“ Hello World!”。进入文件:
[0x00000000]> w Hello World!
并再次打印32个字节:
[0x00000000]> px 32
- offset - 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
0x00000000 4865 6c6c 6f20 576f 726c 6421 ffff ffff Hello World!....
0x00000010 ffff ffff ffff ffff ffff ffff ffff ffff ................
太好了!现在我们可以看到“ Hello World!”
让我们退出radare2和
foo
文件来查看内容: [0x00000000]> q
$ cat foo
Hello World!
缓存模式-示例
以写入模式打开文件
write mode
:$ r2 foo
打印前32个字节@
[0x00000000]> px 32
- offset - 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
0x00000000 4865 6c6c 6f20 576f 726c 6421 ffff ffff Hello World!....
0x00000010 ffff ffff ffff ffff ffff ffff ffff ffff ................
激活“缓存模式”:
[0x00000000]> e io.cache=true
对radare2进行一些更改:就像在
px 32
中那样写:[0x00000000]> w Goodbyte World! :)
退出radare2:
[0x00000000]> px 32
- offset - 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
0x00000000 476f 6f64 6279 7465 2057 6f72 6c64 2120 Goodbyte World!
0x00000010 3a29 ffff ffff ffff ffff ffff ffff ffff :)..............
检查实际文件内容: :文件未更改!这就是
cat
的效果。#2 楼
只是为了更新@Megabeets答案。以空文件(由
touch
创建)开头时,即使以w
模式启动r2
,默认情况下write
命令也不起作用。在这种情况下,缺少的信息是映射[0x00000000]> om
[0x00000000]
返回空结果。除了列出以外,
om
命令还可以用于创建映射:Usage: om[-] [arg] # map opened files
| om list all defined IO maps
...
| om fd vaddr [size] [paddr] [rwx] [name] create new io map
...
为了进行映射,需要指定(例如)以下内容命令
[0x00000000]> om 3 0x0 12
[0x00000000]> om
1 fd: 3 +0x00000000 0x00000000 - 0x0000000b rwx
对于文件描述3,将创建一个12字节的大小映射,从地址0x0开始。
之后,
w
将起作用:[0x00000000]> w Hello world!
[0x00000000]> px 32
- offset - 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
0x00000000 4865 6c6c 6f20 776f 726c 6421 ffff ffff Hello world!....
0x00000010 ffff ffff ffff ffff ffff ffff ffff ffff ................
[0x00000000]>
#3 楼
创建输入/输出映射以允许写入非映射文件要允许从
64 byte
开始写入offset 0x00000000
,请将radare2中的更改映射到file descriptor 3
(在radare2中打开的文件)。 />说明一个空文件(由
touch
创建)没有输入/输出映射(即使在write mode
中打开时也是如此)。要确认没有映射任何区域,可以列出所有已定义的IO映射使用radare2-命令
om
。)要创建一个I / O映射,请使用带有参数的
om
: io地图示例
[0x00000000]> om 3 0x0 64
[0x00000000]> om
1 fd: 3 +0x00000000 0x00000000 - 0x0000000b rwx
评论
-w在写模式之外做什么?
–埃文·卡洛尔(Evan Carroll)
18年11月13日在20:50
好吧,它允许radare2写入文件。即修改原始文件。这是有风险的,使用时应小心。在使用写模式时,您可以像往常一样定期使用radare2。它不会改变任何事情。另外,请查看我的版本的答案-不管您有何评论,我都会详细说明:)
–巨型甜菜
18年11月13日在20:54
后续问题是,如果雷达以只读模式打开文件,w foobar会做什么?只是小睡吗?
–埃文·卡洛尔(Evan Carroll)
18年11月13日在20:56
对。不做某事。我建议您探索w命令和radare2子命令的功能。我每天使用它-签出w?适用于wtf,wox,wopD等命令
–巨型甜菜
18-11-13在20:57