假设以下功能:
void asmFunction(const int *first, ...) {
__asm {
xor eax, eax
add eax, [first][0]
; ...
}
}
这是这样称呼的:
int first[] = { 0, 0, 0, 0, 0, 0, 0, 5, 7, 6, 2, 4, 3, 5 };
asmFunction2(first, ...);
据我了解,第二个装配线必须将0
数组first
添加到eax
。但是,正在添加随机值。调试时,first[0]
等于0,必须如此。代码有什么问题?
我在64位计算机上使用Visual Studio 2013进行编码。
答案 0 :(得分:1)
这是一种奇怪的语法,可能并不是你想要的。如果您反汇编生成的代码,您很可能会看到add eax, [ebp+8]
之类的内容。添加的随机值应该是first
的值,这是一个指针。您已经有效地完成了eax += first
。要获得元素,您需要一个间接级别,即eax += *first
。例如,这可能有效:
mov edx, [first]
add eax, [edx]