重写Detours3.0 Traceapi.dll以监控Win32 API调用

版权申诉
0 下载量 102 浏览量 更新于2024-10-18 收藏 11.62MB RAR 举报
资源摘要信息:"MyTraceapi.rar_系统编程_Visual_C++_" 知识点概览: 1. Detours 3.0 库的介绍与应用 2. Traceapi.dll 功能与使用方法 3. Windows API 调用监控机制 4. Makefile 在 Visual C++ 中的使用 5. syelogd 工具的作用与实例监听过程 6. withdll 工具与 DLL 注入技术 7. 系统编程在 Windows 环境下的实践 详细知识点解析: 1. Detours 3.0 库的介绍与应用 Detours 是微软提供的一种用于拦截 Win32 API 调用的库。通过 Detours 库,开发者可以重定向任何 Win32 API 的调用,无需改动原有代码。Detours 3.0 版本是一个开源库,通常用于系统监控、性能分析以及为应用程序增加额外的功能。在本案例中,Detours 库被用来修改 Traceapi.dll 的行为,以便它可以附加到任何 Win32 应用程序并监控 API 调用情况。 2. Traceapi.dll 功能与使用方法 Traceapi.dll 是一个动态链接库(DLL),它能够被其他程序调用来监控系统级别的 API 调用。通过这种方式,开发者可以观察到应用程序执行过程中涉及的 API 调用序列,这对于调试和测试非常有用。在描述中提到的“Attach到任意Win32应用程序中并监控API调用的情况”说明 Traceapi.dll 可以动态地注入到其他进程中,监视其对系统 API 的调用情况。 3. Windows API 调用监控机制 Windows API 是一组函数,允许应用程序与操作系统的底层进行交互。监控 Windows API 调用涉及拦截这些函数调用,以观察它们在程序执行中的行为。使用 Detours 等拦截工具可以在不修改程序源代码的情况下,捕获 API 调用并进行分析,这对于发现恶意软件行为、测试软件稳定性等场景很有帮助。 4. Makefile 在 Visual C++ 中的使用 Makefile 是一个文本文件,描述了程序的编译规则和方法。在 Visual C++ 环境下,Makefile 可以用来自动化编译过程,减少重复劳动。原版的 Traceapi.dll 使用 Makefile 编译,意味着它依赖于预定义的构建指令来编译代码。虽然 Makefile 在 Windows 环境不如在 Unix/Linux 环境下流行,但仍然可以用于自动化构建过程。 5. syelogd 工具的作用与实例监听过程 syelogd 工具可能是该文档描述中提到的一个自定义工具,它用于监听系统事件。描述中提及首先使用 syelogd 实例监听,表明在监控 API 调用之前,系统需要先运行 syelogd 工具来进行某种形式的日志记录或事件收集。然而,文档中并未提供更多关于 syelogd 的具体信息。 6. withdll 工具与 DLL 注入技术 withdll 是一种用于将 DLL 注入到目标进程中执行的技术或工具。DLL 注入是一种高级技术,允许开发者将自己的 DLL 动态地附加到正在运行的进程上。在本案例中,withdll 工具被用来将重写的 Traceapi.dll 实例挂载到目标应用程序中。这涉及到操作系统的进程管理以及对内存的直接操作,是一门需要深入理解操作系统的知识。 7. 系统编程在 Windows 环境下的实践 系统编程通常指涉及操作系统底层功能的编程,包括内存管理、进程控制、文件系统操作等。在 Windows 环境下进行系统编程需要对 Windows API 和 Windows 内核有深入的了解。在本案例中,Detours 库被用来修改 Traceapi.dll 以监控系统 API 的调用,这是系统编程实践的一个例证,它展示如何利用现有的工具和库来实现复杂的系统级功能。 总结: 通过上述分析,可以看出 MyTraceapi.rar 压缩包文件中包含的资源是关于如何使用 Detours 库来重写 Traceapi.dll,以便将其注入到 Win32 应用程序中监控 API 调用的详细说明和实例。这需要对系统编程、Windows API、以及 DLL 注入技术有较为深入的理解。对于开发者而言,这些技能在进行系统级调试、监控或安全分析时非常有价值。此外,本案例也涉及到了 Makefile 在 Visual C++ 中的使用,以及可能的自定义工具 syelogd 的监听过程。通过这些知识点,开发者可以进一步拓展他们在系统编程和 Windows 应用开发方面的技能。

#include "prepare_ogm.hpp" namespace senior { namespace guardian { namespace prepare { std::string PrepareOgm::Name() { return "Prepare Ogm Element"; } void PrepareOgm::Initiate() {} void PrepareOgm::Process(data::DataFrame& his, data::DataFrame& cur) { if (cur.source_ogm_points_.is_invalid()) return; if (cur.source_visual_ogm_points_.is_valid()) { cur.source_ogm_points_.insert(cur.source_ogm_points_.end(), cur.source_visual_ogm_points_.begin(), cur.source_visual_ogm_points_.end()); } if (cur.source_higher_ogm_points_.is_valid()) { cur.source_ogm_points_.insert(cur.source_ogm_points_.end(), cur.source_higher_ogm_points_.begin(), cur.source_higher_ogm_points_.end()); } auto& predict_path = cur.monitor_data_.mutable_predict_path(); predict_path.GenerateBoundary(cur); cur.AABox2d_ = predict_path.vehicle_AABox2d_; // if (!his.monitor_data_.is_need_to_take_over()) { // LOG(INFO)<<"1"; cur.AABox2d_.SetWidth(cur.AABox2d_.width() + 1.0); cur.AABox2d_.SetLength(cur.AABox2d_.length() + 1.0); // } std::vector<math::Vec2d> corner_points_; cur.AABox2d_.GetAllCorners(&corner_points_); auto& polygon2d = predict_path.tractor_polygon2d_; math::Vec2d temp; VoxelGrid filter_; common::Time now = common::Time::Now(); for (auto& point : cur.source_ogm_points_) { temp.set_x(point.x()); temp.set_y(-point.y()); if (cur.AABox2d_.IsPointIn(temp)) { cur.AABB_ogm_points_.emplace_back(point); } } cur.guardian_diagnose_["Prepare_PrepareOgm_AABox_filter"] = std::to_string((common::Time::Now() - now).ToSecond() * 1000); now = common::Time::Now(); filter_.VoxelGrid_ApplyFilter( cur.AABB_ogm_points_, cur.ogm_points_, corner_points_, 0.1, 0.1, 0); cur.guardian_diagnose_["Prepare_PrepareOgm_VoxelGrid_ApplyFilter"] = std::to_string((common::Time::Now() - now).ToSecond() * 1000); cur.ogm_points_.set_stamp(cur.source_ogm_points_.stamp()); cur.ogm_points_.set_time(cur.source_ogm_points_.time()); cur.ogm_points_.set_delay_time(cur.source_ogm_points_.delay_time()); cur.ogm_points_.set_valid(); } } // namespace prepare } // namespace guardian } // namespace senior 改变为C语言程序

2023-06-13 上传