【问题标题】:Using logger.exe to sniff system calls使用 logger.exe 嗅探系统调用
【发布时间】:2016-03-05 15:20:45
【问题描述】:
我有一个使用一些串行端口并运行一些系统调用的应用程序,例如EscapeCommFunction,我想调试它。基本上,我想要最接近 Linux 上的strace。我发现最好的候选人似乎是logger.exe,但我不知道如何使用它。
我试着打电话
logger.exe <application> <arg1> <arg2> <arg3>
并在出现的对话框中尝试了所有对我有意义的组合。结果总是一样的:程序成功完成,记录器窗口没有输出,或者即使我关闭了记录器,也没有创建任何日志文件。
【问题讨论】:
标签:
logging
windbg
system-calls
strace
【解决方案1】:
日志文件总是在桌面not alterable的logexts subdir中创建
C:\Documents and Settings\Admin\Desktop>DIR /S /B LOGE*
File Not Found
执行记录器
C:\Documents and Settings\Admin\Desktop>LOGGER CALC.EXE
- 记录器窗口打开后
- 在左侧窗格中选择您需要的 API,然后单击包含
单选按钮
- 默认情况下不选择任何内容,也不会记录任何内容
- 创建的 lgv 文件将不包含任何内容
- 您需要选择 api 并将它们包含在日志中
- 您可以为专门的日志记录编写自己的清单文件
- 会话结束后,关闭 logger.exe,您将拥有一个 lgv
文件
- 您可以在 logviewer.exe 中使用 file ->open no 打开这个 lgv 文件
命令行选项
已经为会话创建了子目录
C:\Documents and Settings\Admin\Desktop>DIR /S /B LOGE*
C:\Documents and Settings\Admin\Desktop\LogExts
导航到子目录并转储目录结构
C:\Documents and Settings\Admin\Desktop>CD LogExts
C:\Documents and Settings\Admin\Desktop\LogExts>ls -la
total 32
drwxr-xr-x 4 Admin Administ 0 Dec 2 10:31 .
drwxr-xr-x 1 Admin Administ 0 Dec 2 10:31 ..
-rw-r--r-- 1 Admin Administ 64304 Dec 2 10:33 CALC.EXE.lgv <---
-rw-r--r-- 1 Admin Administ 0 Dec 2 10:31 CALC.EXE.txt
打开logviewr查看lgv文件
C:\Documents and Settings\Admin\Desktop\LogExts>logviewer
窗口标题中记录的api的屏幕截图和api记录的通知文件路径的统计信息
【解决方案2】:
我同意 @Alex K. 并建议 API Monitor。
只需使用望远镜图标找到您要监控的方法并在其上添加复选标记。
然后从“正在运行的进程”选项卡中选择一个进程或监视一个新进程(API 监视器将为您启动它)。
请注意,API 监视器有 2 个版本:x86 和 x64,您应该为要监控的应用程序选择正确的位数。
您还可以在方法上设置断点,这将在目标线程中触发 INT3。将弹出“未处理的异常对话框”,您可以选择调试器(在我的情况下为 Visual Studio)。
关于 Chrome 请求:我正在测试 Serial Monitor 作为应用程序,启用开发者模式,检查 demo.html。我使用Process Explorer 的十字光标找出了正确的过程。然后我按照你的建议创建了 sn-p
chrome.serial.connect("COM1", {
bitrate: 9200
}, function(i) {
chrome.serial.setControlSignals(i.connectionId, {
dtr: false
}, function() {
console.log("done");
});
});
然后运行它。结果如下:
【讨论】:
-
这适用于测试二进制文件,但不适用于 chrome。试试这个:监控 chrome 创建的任何子进程,打开一个对串行和chrome.serial.connect("COM1", {bitrate: 9200}, function (i) { chrome.serial.setControlSignals(i.connectionId, {dtr:false}, function () {console.log("done");}); }); 具有权限的应用程序您应该在监视器中的一个进程中看到EscapeCommFunction,但那里没有……proof 那是正在拨打的实际电话。有什么想法吗?