Pointers x86指令编码C++;指针作为地址 我试图编码x86指令来取一个C++指针指定的地址。例如,我有一个32位的数字,我想移动到eax寄存器。在组装中,这很容易 mov eax, number 我想用二进制代码x86编码,用C++指针来对这个数进行编码。mov(寄存器32位的内存)的操作码为0x8B。我不确定Mod-Reg-R/M字节和位移使用什么。有没有办法直接从指针编码地址?还是我必须做一些置换数学?而且,我真的不明白置换是如何工作的

Pointers x86指令编码C++;指针作为地址 我试图编码x86指令来取一个C++指针指定的地址。例如,我有一个32位的数字,我想移动到eax寄存器。在组装中,这很容易 mov eax, number 我想用二进制代码x86编码,用C++指针来对这个数进行编码。mov(寄存器32位的内存)的操作码为0x8B。我不确定Mod-Reg-R/M字节和位移使用什么。有没有办法直接从指针编码地址?还是我必须做一些置换数学?而且,我真的不明白置换是如何工作的,pointers,encoding,x86,Pointers,Encoding,X86,指令将在动态分配的内存中存储和调用。这是针对模拟器的动态重新编译程序。我尝试过各种各样的Mod-Reg-R/M和指针组合,但都没有成功。我也没能在网上找到任何解释它是如何工作的。在32位模式下,mov-eax,[dword]是8b05 dword,这就是你要找的吗?不完全是。在这种情况下得到的编码地址与C++指针非常不同。例如,如果我在一个ASI ASM块中执行,则指令为0x8BAD6CFFFFF,C++指针为0x014FDF0。我不明白x86地址是从哪里来的我不明白这段代码有什么意义,它似乎是

指令将在动态分配的内存中存储和调用。这是针对模拟器的动态重新编译程序。我尝试过各种各样的Mod-Reg-R/M和指针组合,但都没有成功。我也没能在网上找到任何解释它是如何工作的。

在32位模式下,
mov-eax,[dword]
8b05 dword
,这就是你要找的吗?不完全是。在这种情况下得到的编码地址与C++指针非常不同。例如,如果我在一个ASI ASM块中执行,则指令为0x8BAD6CFFFFF,C++指针为0x014FDF0。我不明白x86地址是从哪里来的我不明白这段代码有什么意义,它似乎是在编码
mov ebp,[ebp-148]
我不确定。这就是在使用一个C++变量在一个μ-ASM块中编译时的结果。另一个示例,mov eax,var是0x8B8560FFFFFF。指针是0x002CFB98。我完全没有发现将C++指针转换成程序集地址的信息。有可能吗?等等,你不是正在加载变量吗?85的ModR/M是
eax,[ebp+sdword]
,因此将局部变量加载到
eax
中是有意义的。顺便说一句,指针几乎总是原始地址(成员指针除外)。