使用 C++ 从 "mov rcx, qword ptr [0xAddress]" x86 指令中提取地址
Extract the address from a "mov rcx, qword ptr [0xAddress]" x86 instruction with C++
我还没有找到解决问题的办法。我想知道的是我如何在 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++ 中做到这一点。
我有一个指向位置 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;