_start_app: ; void start_app(int eip, int cs, int esp, int ds, int *tss_esp0);
PUSHAD
MOV EAX,[ESP+36] ;EIP
MOV ECX,[ESP+40] ;CS
MOV EDX,[ESP+44] ;ESP
MOV EBX,[ESP+48] ;DS
MOV EBP,[ESP+52] ;tss_esp0
MOV [EBP ],ESP
MOV [EBP+4],SS
MOV ES,BX
MOV DS,BX
MOV FS,BX
MOV GS,BX
OR ECX,3
OR EBX,3
PUSH EBX ;SS
PUSH EDX ;ESP
PUSH ECX ;CS
PUSH EAX ;EIP
RETF
书中有一段这样的代码,代码的功能是跳转到一个局部段表中去(LDT)
也就是一个应用程序的调用,代码段和数据段全部在局部段表中,
现在要从全局段表(GDT)中跳转到局部段表中,调用的就是这个函数,我想问一下
这段程序是如何把esp,和ss段都给赋值上去的?还有作者说OR ECX,3和OR EBX,3是小技巧,请问一下,是什么技巧?