gpt4 book ai didi

c++ - 使用 C++ 从 "mov rcx, qword ptr [0xAddress]"x86 指令中提取地址

转载 作者:行者123 更新时间:2023-11-27 22:39:31 27 4
gpt4 key购买 nike

我还没有找到解决问题的方法。我想知道的是我如何在 C++ 中做到这一点。

我有一个指向位置 mov rcx, qword ptr [0xAddress] 的地址。然后我需要找到一种方法,仅使用 C++ 从该内存位置获取 [0xAddress] 指针,而不使用内联 asm。

//I want something like this, but I don't get it working.
DWORD64 PatchAddress = FindAddressLocation(); //This finds the mov rcx, qword ptr [0xAddress]. location.
uint64_t rcx = *(volatile uint64_t*)PatchAddress;//This is supposed to give me the [0xAddress] address
*(BYTE*)(rcx) = 0;//Then write 0 to the pointer 0xAddress

最佳答案

mov rcx, [a] 的常用编码是 rip-relative:

48 8b 0d DD CC BB AA

带符号的偏移量 AABBCCDD 是相对于下一条指令的。如果这是正在使用的编码,您的 C++ 代码应该是:

DWORD64 PatchAddress = FindAddressLocation();
uint64_t addr = PatchAddress + 7 + *(int32_t *)(PatchAddress + 3);
*(BYTE*)addr = 0;

与 RIP 无关的另一种编码使用 SIB 字节:

48 8b 0c 25 DD CC BB AA

在这种情况下,地址是一个 32 位有符号地址。 C++ 代码将是:

DWORD64 PatchAddress = FindAddressLocation();
uint64_t addr = *(int32_t *)(PatchAddress + 4);
*(BYTE*)addr = 0;

关于c++ - 使用 C++ 从 "mov rcx, qword ptr [0xAddress]"x86 指令中提取地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50198445/

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