【发布时间】:2012-12-20 02:12:51
【问题描述】:
我怎样才能在内联 asm 中写这个?我想将packet的值写入cave in inline asm的内存位置,怎么办?我可以用 WriteProcessMemory 做到这一点,但我想摆脱它并用 asm 替换
int SendToClient(BYTE *packet, int Length)
{
int cave = (int)VirtualAllocEx(hProcess, NULL, Length, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
if (WriteProcessMemory(hProcess, (void*)cave, packet, Length, NULL))
{
}
__asm
{
//how?
}
}
例如,假设我想从地址 senderOffset 中读取数据:
int GetSenderID()
{
int value;
__asm
{
mov eax, senderOffset
mov value, eax
}
return *(int*)value;
}
这是在做“ReadProcessMemory(GetCurrentProcess(), (VOID*)senderOffset, &value, 0) 会做的事情,我只是在寻找与内联汇编的“WriteProcessMemory”相同的方法。
【问题讨论】:
-
您使用的是哪个编译器和操作系统?
-
为什么是内联汇编?为什么不简单地
memcpy((void*)cave, (void*)packet, length*sizeof(BYTE)) -
你是为 64 位编译的吗?如果是这样,那么您对 MSVS 不走运,因为它不支持 x86-64 的内联汇编。
-
32bit,我想用 inline asm 来做,因为这就是我想要学习的。
-
但是 ty memcopy 可以完成这项工作