回答
現代操作系統(如Linux和Windows)中的fs
和gs
寄存器指向線程特定的和其他OS定義的結構。修改段寄存器是一個受保護的指令,所以只有操作系統可以爲你設置它們。
這個問題應該有助於解釋到底是什麼點:amd64 fs/gs registers in linux。
fs
寄存器的實際值不是地址。它是一個選擇器 - GDT中的偏移量,它描述了該段可以/不能用於的內容。您無法看到隱藏的fs基址和限制寄存器的值是什麼 - 它們是內部CPU寄存器,只有通過向fs寫入新的「選擇器」(在此處基準/限制寄存器從GDT更新)纔會更新。
但是,如何從GDB內部自己讀取這些內存? – ioctlvoid
在具有FSGSBASE功能的CPU上,64位代碼可以使用['rdfsbase'](https://hjlebbink.github.io/x86doc/html/RDFSBASE_RDGSBASE.html)和'wrfsbase'。他們沒有特權。 (我不確定那個擴展是多大的。) –
另外,修改一個段寄存器本身並沒有特權;您需要內核的幫助,因爲沒有FSGSBASE,內核需要更新LDT中該段描述的基地址,這當然是用戶空間無法訪問的。如果有第二段描述有你想要的基地址,我*想*你可以在用戶空間中使用'mov fs,eax',並在多個FS基地之間來回切換,而不用調用內核。 –
- 1. 「mov offset(%rip),%rax」是做什麼的?
- 2. fs:[register + value]是什麼意思彙編?
- 3. mov eax,dword ptr [eax]是做什麼的?
- 4. 8086彙編mov指令沒有錯誤
- 5. MOV與MOV.B彙編語言指令
- 6. MOV BYTE PTR指令如何工作?
- 7. 爲什麼在x64彙編器中調用printf時需要「mov rcx,rax」?
- 8. 彙編指令轉換是做什麼的?
- 9. cmp DWORD PTR和mov DWORD PTR是什麼意思?
- 10. 彙編代碼是什麼:mov edx,2,3,4是做什麼的?
- 11. MOV RAX,[RES]不macho64
- 12. 「rep stos」x86彙編指令序列的作用是什麼?
- 13. FS登記在彙編代碼
- 14. eax在mov後有什麼eax,dword ptr [edi]
- 15. mov dword ptr [rsp],eax ss:00000000`0011ddc0 = 00000060是什麼意思?
- 16. LEAL彙編指令有什麼作用?
- 17. 關於這個彙編程序在做什麼MOV的建議?
- 18. 反彙編輸出:mov edx,DWORD PTR [ebp-28]
- 19. 總是可以使用「mov eax,0x1」而不是「mov rax,0x1」?
- 20. 有什麼區別 - MOV指令
- 21. x86彙編代碼中「mov eax,cr3; mov cr3,eax」的功能是什麼?
- 22. 是什麼*(&PTR)和*(PTR)
- 23. 彙編MOV問題
- 24. 彙編MOV問題
- 25. smulwb彙編指令
- 26. 彙編語言中的「MOV AH,4CH」是什麼意思?
- 27. 彙編語言指令
- 28. ARM彙編:MOV指令的基本用法
- 29. x86彙編寄存器和mov指令,並跳轉抵消
- 30. 內聯彙編,out指令
http://stackoverflow.com/questions/10325713/why-does-this-memory-address-have-a-random-value – Abhineet
請參閱http://stackoverflow.com/questions/10325713/why-does-這個內存地址有一個隨機值的第一部分 –
感謝,從我看到它類似的指令,它看起來像它只是從[FS + 0x28]讀取rax。由於fs是0x0,這應該轉化爲簡單的0x28,但是當我嘗試從GDB中的0x28讀取時,我不允許這樣做,但程序本身可以執行此指令。因此,這可能不是對這個指令的正確理解嗎? – ioctlvoid