Adds PE signature scanner example

Implements a basic example demonstrating how to scan for a given pattern within a PE file.

The example takes a file path, section, and signature as input and utilizes the `omath::PePatternScanner` to locate the signature within the specified section of the PE file.
This commit is contained in:
2025-11-08 14:34:14 +03:00
parent 1a0e55b4cf
commit ec9a15927a
2 changed files with 46 additions and 2 deletions

View File

@@ -1,4 +1,9 @@
project(examples) project(examples)
add_executable(ExampleProjectionMatrixBuilder example_proj_mat_builder.cpp) add_executable(example_projection_matrix_builder example_proj_mat_builder.cpp)
target_link_libraries(ExampleProjectionMatrixBuilder PRIVATE omath::omath) set_target_properties(example_projection_matrix_builder PROPERTIES CXX_STANDARD 26)
target_link_libraries(example_projection_matrix_builder PRIVATE omath::omath)
add_executable(example_signature_scan example_signature_scan.cpp)
set_target_properties(example_signature_scan PROPERTIES CXX_STANDARD 26)
target_link_libraries(example_signature_scan PRIVATE omath::omath)

View File

@@ -0,0 +1,39 @@
//
// Created by Vlad on 11/8/2025.
//
#include <iostream>
#include <omath/utility/pe_pattern_scan.hpp>
#include <print>
int main()
{
std::println("OMATH Signature Scanner");
std::print("Enter path to PE file: ");
std::string file_path;
std::getline(std::cin, file_path); // allows spaces
std::print("Enter target section: ");
std::string section;
std::getline(std::cin, section);
std::print("Enter signature: ");
std::string signature;
std::getline(std::cin, signature);
std::println("[LOG] Performing scan....");
const auto result = omath::PePatternScanner::scan_for_pattern_in_file(file_path, signature, section);
if (!result)
{
std::println("[ERROR] Scan failed or signature was not found");
return -1;
}
std::println("Found at virtual 0x{:x} , raw 0x{:x}", result->virtual_base_addr + result->target_offset,
result->raw_base_addr + result->target_offset);
return 0;
}