如何监视/捕获从JDWP到Android VM的数据包?

如何监视/捕获从JDWP到Android VM的数据包?,android,jdwp,Android,Jdwp,我正在开发一个使用JDWP的Java调试器,与Android虚拟机对话 我最感兴趣的是从桌面到模拟器,而不是在设备上。 我知道在这个装置上,这完全是另一回事, 这就是为什么我想集中精力从桌面到模拟器 我发现一些常见的JDWP数据包命令会出现“ERROR\u NOT\u IMPLEMENTED”错误, 所以,如果我可以监视,或者能够捕获JDWP,那就容易多了 来自已知工作调试程序的数据包,以便更好地了解 它们发送的命令的组合。能够得到回复也很好 我看过Wireshark和WinDump,但它们似乎

我正在开发一个使用JDWP的Java调试器,与Android虚拟机对话

我最感兴趣的是从桌面到模拟器,而不是在设备上。 我知道在这个装置上,这完全是另一回事, 这就是为什么我想集中精力从桌面到模拟器

我发现一些常见的JDWP数据包命令会出现“ERROR\u NOT\u IMPLEMENTED”错误, 所以,如果我可以监视,或者能够捕获JDWP,那就容易多了 来自已知工作调试程序的数据包,以便更好地了解 它们发送的命令的组合。能够得到回复也很好

我看过Wireshark和WinDump,但它们似乎都是基于接口的, 无论我尝试使用什么设置,我都不会得到任何数据包方面的信息

我的问题是,有什么工具我可以用来做这件事吗


谢谢

我在GitHub上有一个项目,允许您“监视”JDWP流量,我在开发NetBeans调试器时开发了这个项目,以帮助我分析与调试器相关的问题

请看这里:

我的印象是,这是通过adb实现的,adb的两个部分通过环回TCP套接字相互通信,并通过环回端口5555与仿真器通信。但也有可能是现在的一些unix域套接字—设备上vm的adbd始终是unix域。请注意,adb的源代码很容易获得——与DVM或ART的源代码一样。对于我的代码,我会:“adb jdwp”获取PID,然后“adb forward tcp:8000 jdwp:(PID)”,但我想其他调试器可以以不同的方式获取端口。我试图查看VM代码,但要找到我需要的不同信息位需要很长时间。我想尝试设置一个断点,这需要一个Location对象,它有一个“未签名的8字节位置”,但当我尝试使用ClassId和MethodId执行LineTable命令时,它返回“ERROR\u NOT\u IMPLEMENTED”…您似乎已经识别了端口,您不能tcpdump环回接口,在该端口上筛选,并在调试器中设置一个断点以查看它是如何完成的?非常感谢您的回复。我尝试使用RawCap,设置为捕获127.0.0.1环回上的所有内容,运行我的应用程序,我知道它使用的是端口8000,看起来它从两个方向捕获了所有内容!它将所有内容保存到.pcap文件中,我可以在Wireshark中“读取”它!我只需要跳过整个TCP报头来查看每个数据包的数据。谢谢