2015-06-03 26 views
1

我使用Visual Studio 2012并创建了一个x64位程序,该程序返回SIDT函数的值(不带偏移量)。问题是,当我最初运行程序,它会返回正确的价值,但是当我运行该程序多次,它返回正确的价值偶尔x64程序偶尔会返回正确的SIDT值(x64程序集)

main.cpp中

#include <iostream> 
#include <conio.h> 
#include <stdlib.h> 

using namespace std; 
extern "C" unsigned long long int sidt_function(); 

int main() 
{ 
    printf("%llx\n", sidt_function()); 
    _getch(); 
    return 0; 
} 

sidt_function.asm

.code 

sidt_function proc 
push rbp 
mov rbp, rsp 
sub rsp, 130h 
sidt tbyte ptr [rbp-10] 
mov rax, [rbp-8] 
leave 
ret 

sidt_function endp 
end 

回答

1

多核CPU中的每个核心(物理或虚拟)具有其自己的IDT。你所看到的是系统中不同内核的IDTR值。他们都不正确。

+0

所以这就是为什么我每次都得到8个不同的值......我有一个Core i7,有4个物理内核和8个线程。非常感谢! –