Und*_*der 5 c++ assembly x86-64 visual-studio visual-studio-debugging
我目前正在 YouTube上查看x64汇编教程。
我现在所做的只是一些基本的事情,例如使用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;
}
Run Code Online (Sandbox Code Playgroud)
这是ASSEMBLY代码:
.code
SomeFunction proc
mov ax, -1
ret
SomeFunction endp
end
Run Code Online (Sandbox Code Playgroud)
问题:每当我运行Local Window Debugger并尝试将Watch添加到寄存器时ax,我都在使用Visual Studio Community 2017 ,但我一直收到错误消息'Error reading register value'。
我要去哪里错了?
抱歉,如果不清楚,请让我知道,我可以尝试更好地解释。
更新:因此,我尝试使用rbx寄存器代替,并且能够为其添加手表。但是现在的问题是,尽管我mov以前-1在寄存器中移动了值,但它告诉我它不包含任何值(“值”部分仅显示0)。
不知道此信息是否有帮助。
已解决:为了解决这个问题,我首先在每条指令上添加了一个断点。这使我们能够“逐步”运行该程序。
然后在调试期间我转到顶部菜单并选择:
Debug >> Windows >> Registers。
这将使您能够看到所有寄存器。
然后我保存了两者ASSEMBLY和C++文件,然后运行它(您可以使用 F5 作为运行的快捷方式)。
注意:程序将执行断点之前的所有指令。
因此,如果我在 处设置断点mov ax -1,则 BEFORE ONLY 之前的所有指令都将被执行。