我试图找出与MFC Win32二进制文件上的串行端口交互的代码在哪里-完全不知道如何查找此代码块。

我什至尝试过,例如,请在单击按钮以初始化串行通信然后逐步执行之前停止该过程。程序立即返回错误。

我什至尝试在.data段中的错误消息的字符串文本上设置断点,甚至没有断点。

是什么原因造成的?为什么我不能单步执行操作以查看其与串行端口的连接位置?

它如何可能隐藏在此级别?

评论

您可以使用哪些工具来完成这项工作?同样,根据程序的不同,它可以使用/需要一个特定的驱动程序来与串行端口进行通信,或者可以仅使用CreateFile或其本机副本NtCreateFile。但是通常,当涉及到与驱动程序的通信时,您可以期望会调用诸如CreateFile之类的东西。 Windows与Unix并没有什么不同,因为对象管理器名称空间也只有一个根,并且您以与读取/写入文件相同的方式与设备通信。

#1 楼

我最终使用了工具API Monitor。进行了大量筛选,但最终找到了对CreateFileA的引用。奇怪的是,因为Ida Pro在任何地方都没有引用CreateFileA。无论哪种方式,它都有效!谢谢!

评论


它是静态链接还是动态链接的可执行文件?如果是动态的,则对CreateFileA的调用可能在MFC dll之一中,而不是在可执行文件本身中。

–伊恩·库克(Ian Cook)
16-10-22在6:11

与直接API调用相比,MFC应用程序更可能对I / O使用CFile或CArchive类之类的东西。

–伊戈尔·斯科钦斯基♦
16-10-22在7:33

#2 楼

您只需要使用ollydbg或类似文件以及断点ReadFile,WriteFile和CreateFile附加到所需的进程即可。 (如果您还需要有关连接本身的信息,例如波特率或类似的东西,则也必须在SetCommState上设置一个断点。)堆栈以到达当前函数被调用的位置。