gpt4 book ai didi

c++ - 在C++中获取调用者的地址

转载 作者:行者123 更新时间:2023-11-28 06:13:03 27 4
gpt4 key购买 nike

目前我正在研究反作弊。我添加了一种方法来检测对 directx 函数的任何 Hook ,因为大多数作弊都是这样做的。

当许多程序,如 OBS、Fraps 和许多其他 Hook directx 的程序也检测到它们的 Hook 时,就会出现问题。

因此,为了能够挂接 directx,您很可能必须调用 VirtualProtect。如果我能确定这是从哪个地址调用的,那么我就可以遍历内存中的所有 dll,然后找到它是从哪个模块调用的,然后将信息发送到服务器,甚至可能采用 md5 散列和将其发送到服务器进行验证。

我还可以 Hook 作弊 Hook 的 DirectX 函数,并检查从哪里调用这些函数(因为它们中的大多数都使用 ms detours)。

我查了一下,显然你可以检查调用堆栈,但我找到的每个例子似乎都没有帮助我。

最佳答案

这 -获取调用者的地址 - 在标准 C++ 中是不可能的。许多 C++ 编译器可能会优化某些调用(例如,通过内联它们,即使您没有指定 inline,或者因为不再有任何帧指针,例如编译器选项 -fomit-frame-指针用于带有 GCC 的 x86 32 位,或通过优化 tail-call ....) 到问题可能没有任何意义的程度。

通过一些实现和一些 C 或 C++ 标准库和一些(但不是全部)编译器选项(特别是,不要要求编译器优化太多*)你可能会明白,例如(在 Linux 上)使用 backtrace from GNU glibcI.Taylor's libbacktrace (from inside GCC implementation)或 GCC return address builtins .

我不知道将它们移植到 Windows 会有多困难(也许 Cygwin 做到了)。如果您不进行过多优化,GCC 内置函数可能会以某种方式起作用。

另请阅读 continuations .另见 this answer一个相关的问题。

注意 *:在 Linux 上,最好使用最多 g++ -Wall -g -O1 编译所有代码(包括外部库!):你不需要太多优化,你想要调试信息(特别是 libbacktrace)

关于c++ - 在C++中获取调用者的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30867760/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com