内联ASM将值写入内存
inline asm write value to memory
如何在inline asm中写下此?我想将数据包的值写入内联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)会做的,我只是在寻找使用Inline ASM的" writeProcessMemory"的方法。
如果您想做的是在内联汇编中重写writeProcessMemory(),请忘记它,它不会发生。writeProcessMemory()是一个OS接口,可让您更改另一个过程的虚拟内存空间的内容,无论使用哪种说明,您都无法直接从用户空间过程中进行操作。无论是内联还是在单独的汇编源文件中,没有任何装配物都能够施放允许您的过程所需的魔法法术,从编写到另一个过程的虚拟内存沙盒中,而无需通过OS到另一个过程的虚拟内存沙盒这样做。在您的用户模式程序中操作时,设置了MMU,以使您的流程访问其自己的内存&没有其他的。即使尝试访问未分配给您的过程的内存也会给您某种访问违规错误(这在Linux-Land中称为SigSeGV;我知道您在Windows上)。
要在另一个过程的地址空间中访问内存,您必须在操作系统上呼叫。每个系统都有一种控制操作调用的控制方法,可以将处理器从用户模式切换到内核模式。在X86中,这些被称为"环",其中OS在最私密的" Ring 0"中运行,并且在最不私有的" Ring 3"中运行的用户模式代码。驾驶员在其他两个环中操作。您不能简单地将CPU从环3转换为环0;试图这样做会引发特权侵犯。在环3中,您无法更改MMU以允许您的过程访问(读取或写下或执行)其他过程的内存空间。
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 内联asm编译器屏障(内存阻塞器)是算作外部函数,还是算作静态函数调用
- 内联ASM将值写入内存
- 使用XMM寄存器和内存获取(c++代码)比只使用XMM寄存器的ASM快两倍——为什么?
- 如何使用 ASM 将 FARPROC 的内存地址移动到另一个功能?
- 将ASM jmp内联到新内存