MASM 表达式与 C++ 表达式
MASM 表达式计算与 C++ 表达式计算的最大区别如下:
在 MASM 表达式中,任何符号的数值都是其内存地址。 在 C++ 表达式中,变量的数值是其实际值,而并非其地址。 数据结构没有数值。 相反,它们被视为实际结构,必须相应地使用它们。 函数名或任何其他入口点的值都是内存地址,并会被视为函数指针。 如果使用了与 C++ 数据类型不对应的符号(如未修改的模块名),则会出现语法错误。
MASM 表达式计算器会将所有数字都视为 ULONG64 值。 C++ 表达式计算器会将数字转换为 ULONG64,并保留所有数据类型的类型信息。
MASM 表达式计算器允许将任何运算符与任何数字一起使用。 如果将运算符与不正确的数据类型一起使用,则 C++ 表达式计算器会产生错误。
在 MASM 表达式计算器中,所有运算都是按字面进行的。 在 C++ 表达式计算器中,指针运算会被适当缩放,在不合适时不允许使用。
MASM 表达式可以使用两个下划线 ( __ ) 或两个冒号 ( :: ) 来表示类的成员。 C++ 表达式计算器只使用双冒号语法。 调试器输出总是使用两个冒号。
在 MASM 表达式中,除最常用的寄存器外,都应在所有寄存器前添加 at 符号 (@)。 如果省略此符号,寄存器名称可能会被解释为十六进制数或符号。 在 C++ 表达式中,所有寄存器都需要使用此前缀。
MASM 表达式可能包含对源行的引用。 这些引用用重音符号 ( ` ) 表示。 不能在 C++ 表达式中引用源行号。