线程切换-FS

线程切换-FS

mov eax, [ebx+18h] ; eax=TEB
.text:00405A37 mov ecx, [ebx+3Ch] ; ecx=GDT
.text:00405A3A mov [ecx+3Ah], ax ; fs的段选择子是38 拆开来是7(段选择为1的话,找的是GDT表的第二个,GDT表第一个成员为0,找第一个就要+8,第7个就是7*8),段描述符的BASE的低16为在段描述符的低4字节的高2字节。所以要+2也就是3A
.text:00405A3E shr eax, 10h ; eax右移16位
.text:00405A41 mov [ecx+3Ch], al ; 修改FS的BASE
.text:00405A44 mov [ecx+3Fh], ah

线程切换时,把TEB的地址写入了FS的段描述符base里面,实现了线程切换时,TEB也改变了、