当我尝试使用以下方法设置断点时:
db 0x004005bd
其中“ 0x004005bd”是主要功能的首地址:
push rbp
我运行的db命令告诉我:
Cannot place a breakpoint on 0x004005bd unmapped memory. See dbg.bpinmaps
我知道它在告诉我什么,但是我该如何解决?
对这个非常愚蠢的问题表示抱歉(也对我的英语感到抱歉)。
#1 楼
在调试模式下运行radare2。r2 -d
#2 楼
您可能正在使用radera2的过时版本。卸载当前的radare2版本,然后git clone https://github.com/radare/radare2 && cdradre2 && ./sys/install.sh
如果您使用的是archlinux,请使用radare2-git
如果您使用的是Windows或其他平台(例如iOS或Android),请使用rada.re上的git链接或进行构建。
最后,如果您遇到与radare2本身有关的问题,我强烈建议您在IRC或Telegram上打个招呼,也可以在github上报告问题。
#3 楼
您可以使用“文件”命令检查可执行文件。然后您会发现该文件是“ elf共享对象”而不是“ elf可执行文件”。
但是您可以直接执行它。
,因此您需要使用“ gcc xxx.c -no-pie -o xxx”重新编译它
,然后使用“ radare2 -d xxx”对其进行调试
#4 楼
我使用的是Debian OS(kali / parrot),但遇到相同的错误。当您在Mac OS中执行radare2并尝试使用相同的方法添加断点时,它将可以正常工作。但是当涉及到Linux OS时,它可能会给您这个错误。我尝试了所有操作。然后,当我尝试在radare2控制台中执行
ood
时,看到了这一点,警告:bin_strings缓冲区太大(0xffffffffa9a2552c)。在-r2(rabin2)中使用-zzz或设置bin.maxstrbuf(RABIN2_MAXSTRBUF)
首先,必须使用以下命令编译C代码,
gcc <name>.c -no-pie -o <any_name>
然后用
-zzz
选项打开它,例如,假设我的编译代码名称是“ tool”,然后执行此命令,$radare2 -zzz tool3
,继续进行。现在您可以添加断点了。
#5 楼
您还可以执行e dbg.bpinmaps=0
,因此Radare2允许您设置断点而没有该限制。评论
解释该标志在r2中的作用可能会有所帮助。
–PawełŁukasik
19年8月6日在5:31
#6 楼
如果将e io.cache
设置为true,则断点不起作用
评论
你从git使用r2吗?