我試圖弄清楚Linux內核中MACRO電流的細節。 電流的最終彙編代碼:有關Linux x86 x86中MSR_GS_BASE的詳細信息
movq %%gs:0xb000,%0
上面的代碼可以工作!但是當我打印%% gs時,它的值爲0,所以%% gs指向GDT NULL的第一項!怎麼運行的?
mov %%gs, %0
相反,GS的基地在MSR_GS_BASE,而目前可以更換,如:
/*0xb000 is the offset of per_cpu__current_task*/
cur_task = (unsigned long*)(x86_rdmsr64(MSR_GS_BASE) + 0xb000);
println("cur_task:%p",*cur_task);
我的問題是:
%GS點GDT NULL的第一項!! ??它如何從MSR_GS_BASE中讀取,它是一個CPU特性?我需要一些關於這個的參考。
謝謝!這是一個很好的幫助! – hellolwq 2012-07-16 04:45:22
鏈接已損壞。 [This](http://developer.amd.com/wordpress/media/2012/10/24593_APM_v21.pdf)可能是正確的。 – Ruslan 2015-07-30 05:57:45