Radare2支持w写入字符串。

w foobar             write string 'foobar'


但是,它似乎对我不起作用, >
文件foo保持为空。我应该刷新还是保存?

#1 楼

TLDR


radare2默认情况下在read-only mode中打开文件。 (有关更多信息,请参见手册r2 -h。)
要允许写入文件,请在write moder2 -w file)中启动radare2。
read-only sessionoo+)模仿写访问,但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的效果。


评论


-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



#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