地址运算符和汇编中的指针之间有区别吗?
Is there a difference between the address operator and a pointer in assembly?
编译器转换地址运算符是否与指针有任何不同?
我想知道,因为反编译器有时会向我显示:
func_test(&a, &b[0x32*ebx])
这应该与
基本相同
func_test((_DWORD *)a,(_DWORD *)(b+0x32*ebx))
正确吗?我对算术 tbh 感到困惑。
这样显示是有什么特殊意义还是只是为了方便阅读?
&a
returns a
的地址,而 (_DWORD *)a
强制编译器将 a
的内容重新解释为指向 _DWORD
。所以这两个表达方式根本不同。
如果 a
是 _DWORD
的数组(像 _DWORD a[A_LENGTH];
那样声明),它可能是等价的。在这种情况下,&a
和 a
本质上与 a
相同,在指针上下文中退化为简单指针,尽管 _DWORD *
强制转换是多余的。
b
的表达式是等价的。
编译器转换地址运算符是否与指针有任何不同?
我想知道,因为反编译器有时会向我显示:
func_test(&a, &b[0x32*ebx])
这应该与
基本相同func_test((_DWORD *)a,(_DWORD *)(b+0x32*ebx))
正确吗?我对算术 tbh 感到困惑。 这样显示是有什么特殊意义还是只是为了方便阅读?
&a
returns a
的地址,而 (_DWORD *)a
强制编译器将 a
的内容重新解释为指向 _DWORD
。所以这两个表达方式根本不同。
如果 a
是 _DWORD
的数组(像 _DWORD a[A_LENGTH];
那样声明),它可能是等价的。在这种情况下,&a
和 a
本质上与 a
相同,在指针上下文中退化为简单指针,尽管 _DWORD *
强制转换是多余的。
b
的表达式是等价的。