Skip to content

zh_scan_memory

伏秋洛 edited this page Jun 14, 2023 · 2 revisions

前言

目标是做成GG那样的修改器,必不可少的就是扫描内存的功能了!

教程

#include "process.h"
#include "searcher.h"

using namespace hak;

auto process = std::make_shared<hak::process>(pid);
process->set_memory_mode(memory_mode::SYSCALL);
auto searcher = hak::memory_searcher(process);

上述代码创建了一个名为searcher的内存扫描器。

auto size = searcher.searchNumber("1D;2D;0D;1D", type_i32, EQ);
std::cout << "search result size: " << size << "\n";
size = searcher.filterNumber("2D;0D;1D", type_i32, EQ);
std::cout << "filter result size: " << size << "\n";

我们利用searcher执行方法searchNumber搜索了一个组合体'1D;2D;0D;1D', 不像GG修改器那样,我们并不打算支持自定义组合体的最大大小,我们默认认为一个组合体应该在连续的内存的内存页上,我们同样不支持GG修改器的无序搜索,我们要求的组合体数据是有序的。

searchNumberfilterNumber返回的内容是搜索/过滤结果的数量。

std::unordered_set<pointer> results = searcher.get_results();
searcher.clear_results();

我们可以使用 get_results() 方法获取所有的搜索结果,也可以执行 clear_results() 清空搜索结果。


设置内存范围

searcher.set_memory_range(memory_range::A | memory_range::XS);

我们可以通过上述代码设定要搜索的范围,不同于其他的那些所谓的MemoryTools,我们的内存范围界定和GG修改器几乎一致。


指定指针范围搜索

searcher.set_search_range(0, 0xfffffffff);

我们可以通过上述代码设定要搜索的指针范围。

searcher.set_search_range(0, 0);

这样就可以清空指针范围的限制。


允许扫描缺页地址

searcher.set_ignore_missing_page(true);
searcher.set_ignore_swapped_page(true);

上诉代码忽略了对缺页的或被换出的内存页的检测,当设置为 true 的时候,searcher将会扫描这些内存地址。