2015-06-03 48 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個線程。非常感謝! –