我目前正在学习汇编x64的youtibe教程(https://www.youtube.com/watch?v=VNDNvm0UY8E&list=RDCMUCq7dxy_qYNEBcHqQVCbc20w&index=3)。我知道链接不是首选,但在这种情况下,确实没有其他选择。
我用的是visual studio,这里有c++代码,用来调用汇编函数:
#include <iostream>
using namespace std;
extern "C" int SomeFunction();
int main() {
SomeFunction();
return 0;
}
和下面的汇编代码:
.code
SomeFunction proc
mov ax, -1
ret
Somefunction endp
end
现在,我在"mov ax, -1"线。当遇到断点时,右击ax并添加一个手表。在视频中,ax上的手表的值为54864,当调试器转到下一行时,它是65535。当我创建手表时,它只有1作为值,无论我做什么,断点在哪里。为什么会这样?
我用VS2015运行了一个64位的例子-调试-观察rax -似乎对我有用。前|mov rax,-1|, rax == 0x00000000cccccccc,后rax = 0xffffffffffffffffffffff .
c++代码:
#include <iostream>
typedef unsigned long long uint64_t;
extern "C" uint64_t tst();
int main()
{
tst();
return 0;
}
asm代码:
.data
.data?
align 16
.code
public tst
tst proc
mov rax,-1
ret 0
tst endp
end