我开始使用radare2调试PE文件,因为它一旦运行便停止工作。当我连接调试器并继续执行到引发异常的点时,我得到了发生异常的内存地址。

该地址可以用来进一步分析当前的问题吗?

c484f\mscorlib.ni.dll) mscorlib.ni.dll
(14116) loading library at 77130000 (C:\Windows\SysWOW64\ole32.dll) ole32.dll
(14116) loading library at 70100000 (C:\Windows\SysWOW64\uxtheme.dll) uxtheme.dll
(14116) loading library at 700A0000 (C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll) mscorjit.dll
(14116) loading library at 6C3C0000 (C:\Windows\Microsoft.NET\Framework\v2.0.50727\Culture.dll) Culture.dll
(14116) unloading library at 6C3C0000 (C:\Windows\Microsoft.NET\Framework\v2.0.50727\Culture.dll) Culture.dll
(14116) Unknown exception e06d7363 in thread 10352


评论

您使用的是哪个版本的r2?

进入网站并下载了最新的

您正在使用哪个调试器?您是否尝试过使用radare2调试它? r2 -d program.exe

是的,这正是我运行的命令

#1 楼

由于主题中的问题与问题正文中的问题略有不同,因此我将重点介绍第一个问题。

在特定地址处反汇编

为了使用radare2在特定存储器地址处反汇编代码,应使用pd @ <address>命令。


pd [?] [sz] [a] [b] —反汇编N个操作码(pd)或N个字节
(pD)


将雷达连接到程序后,您应该能够在此特定地址打印反汇编。假定程序的pid是317:

$ radare2 -d 317
= attach 317 317
bin.baddr 0x00400000
Using 0x400000
asm.bits 64

[0x7f2e51727230]> pd @ <address>


pdp的子命令,代表打印反汇编。您可以检查p?,尤其是pd?以获得更多相关的子命令。在radare中大多数命令的末尾添加?,将打印其帮助及其子命令。默认情况下,pd从指定的地址打印b条指令,其中b是默认的基本块大小。 b的默认大小为0x100,但您可以使用b <size>轻松更改它。

@符号是rade的临时查找地址,因此,每当您要在特定地址中打印反汇编时,都应使用它。在@符号前指定的编号是要打印的指令数量。一个常见的错误是使用pd之前的地址执行@。因此,执行pd 0x400000将从当前搜索中打印0x400000指令。


异常

您收到了“未知异常e06d7363”,这是Microsoft Visual生成的异常C ++编译器。

如Microsoft支持页面所述:


原因
Microsoft Visual C ++编译器生成的代码引发的所有Visual C ++异常包含此错误代码。因为这是
编译器生成的错误,所以该代码未在Win32 API中列出
头文件。该代码实际上是一个加密助记符设备,
首字母“ E”表示“ exception”,后3个字节(0x6D7363)
表示ASCII值“ msc”。


要继续进行分析,建议您阅读解码抛出的C ++异常(0xE06D7363)的参数及其相关文章。

请注意,可执行文件的地址位于每次运行时内存可能会改变,这取决于您的系统和程序本身。因此,有时您将无法预测导致异常的地址。

从radare2的书中检查从ida,GDB或WinDBG的移植,以查看radare的相应命令到WinDBG。

#2 楼

在手册中:


'p'表示打印。
'd'表示反汇编(通常为原始)

尝试:

pd @ 0xYourAddress


注意:我不确定在发生异常的情况下是否可以使用。

评论


您有一个错误,应该是pd @ 0xYourAddress。否则,它将打印0xYourAddress指令。

–巨型甜菜
17-10-16在18:35

哦,我不好,我会更正以供将来参考。谢谢

– Alpha
17-10-16在18:36