我目前正在YouTube上通过x64 Assembly Tutorial工作。
我现在所做的就是基本的东西,比如在C++
中使用ASSEMBLY
函数,并使用mov
指令将值移动到寄存器中。
这是C++
代码:
#include <iostream>
using namespace std;
extern "C" void SomeFunction();
int main() {
SomeFunction();
// Just putting this here to stop the program from closing immediately after opening
cin.get();
return 0;
}
这是ASSEMBLY
代码:
.code
SomeFunction proc
mov ax, -1
ret
SomeFunction endp
end
问题:我正在使用Visual Studio Community 2017,每当我运行Local Window Debugger并尝试将Watch添加到寄存器ax
时,我会不断收到错误消息'Error reading register value'
。
我哪里错了?
如果不清楚,请道歉,请告诉我,我可以尝试更好地解释。
更新:所以我尝试使用rbx
寄存器,我能够添加一个手表。但现在的问题是,它告诉我它不包含任何值(值部分只显示0),尽管我使用mov
在寄存器中移动值-1
。
不知道这些信息是否有帮助。
已解决:为了解决这个问题,我首先在每条指令上添加了一个断点。这使我们能够“分步”运行程序。
然后在调试期间,我转到顶部菜单并选择:
Debug >> Windows >> Registers
。
这将使您能够查看所有寄存器。
然后我保存了两个ASSEMBLY
和C++
文件,然后运行它(你可以使用F5作为运行的快捷方式)。
注意:程序将在BREAKPOINT之前执行所有指令。
因此,如果我在mov ax -1
设置断点,则仅执行所有指令。