C++ASM获取MOV的地址
C++ ASM get address of MOV
我在ASM 中有以下行
_:004F73BB C6 83 54 41 03 00 01 mov byte ptr [ebx+34154h], 1
在c++中,我需要返回34154h的值作为地址(0x31454)
我希望可以这样做:
void getADR(BYTE *ptr1){//something like this?
__asm{//i don't know how to call this at 004F73BB
mov [ptr1], ebx
mov byte ptr [ebx+34154h], 1
}
// return ((BYTE)0x004F73BB - ptr1)
}
_____MY记录器____这是我的地址记录器,它获取ASM行0x004F73BB播放器指针和服务器指针都很容易获得,因为字节模式指向MOV,而MOV返回自己的指针。
DWORD FindPattern(DWORD dwAddress, DWORD dwLen, BYTE *bMask, char * szMask)
{
for (DWORD i = 0; i < dwLen; i++)
if (Match((BYTE*)(dwAddress + i), bMask, szMask))
return (DWORD)(dwAddress + i);
return 0;
}
void SearchPatterns(void)
{
while (true){
add_log("ADR_PlayerPointer", "xA4xA2xAEx00", "xxx?", "A4 A2 AE 00, xxx?");
add_log("ADR_ServerPointer", "x48x92xAEx00", "xxx?", "A1 48 92 AE 00, xxx?");
add_log("OFS_5thSlot", "x75x09xC6x83x54x41x03x00x01", "xxxxxxx?x", "75 09 C6 83 54 41 03 00 01, xxxxxxx?x");
ExitProcess(0);
}
}
BOOL WINAPI DllMain(HMODULE hDll, DWORD dwReason, LPVOID lpReserved)
{
//DisableThreadLibraryCalls(hDll);
if (dwReason == DLL_PROCESS_ATTACH)
{
logging(hDll);
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)SearchPatterns, NULL, NULL, NULL);
}
return TRUE;
}
如果您需要更多信息,请留下评论。
有了这一点信息,只需将字节加载到char数组中,读取索引2、3、4、5处的值,然后进行一些小端/大端数学运算。或者生成一个int*,使其指向数组中的索引2并读取该值。
或者,如果您知道二进制文件中的偏移量,请读取exe文件,然后将int*指向该位置并读取值。
相关文章:
- 将数组的地址分配给变量并删除
- 空基优化子对象的地址
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 如何在c++程序中找到函数的地址
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 被解释为低级别const的const对象的地址
- 将地址分配给本地指针后,公共对象的变量将消失
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 内联程序集printf将整数解释为地址
- 为什么指针不写入类的地址?
- 如何在C++中获取该对象的类声明中对象的地址?
- 通过按地址访问变量
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 函数名是c中该函数的第一条指令的地址吗
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- ReadProcessMemory() 不适用于像 0x2840C6C68D8 这样的长地址
- C++如何仅使用MOV在x86上实现发布和获取
- CUDA:统一内存和指针地址的更改
- C++ASM获取MOV的地址