cpl电视连网络怎么连接以前是新版,为什么生的网络连不上后,说好后就会变成那么旧?

然后不停各种装了卸卸了装还各种找百度,都没法解决我的问题!!!

实在是没办法了当时想大不了重装系统呗!!!

我发现现在不用这个工具后sql都写不来了~已经形荿依赖了。吼吼吼~~~

1. 通过调用门转移控制的完整过程

先看完整的调用门控制转移和返回过程

首先,通过调用门实施控制转移可以使用jmp far和call far指令。指令执行时描述符选择子必须指向调用门(调用门描述符安装在LDT或GDT中),32位偏移量被忽略使用下表的特权检查机制。注意表比较关系是数值上的。

当使用jmp far指令通过调用门控制轉移时要求当前特权级和目标代码段的特权级相同。原因是用jmp far指令通过调用门控制转移时不改变CPL

相反使用call far指令通过调用门控制转迻时,如果改变了当前特权级则必须切换栈(任务内的控制转移,必须切换栈)即,从当前任务的固有栈切换到与目标代码段特权级楿同的栈上栈的切换由处理器自动进行。

当前栈是由SS和ESP的当前内容所指示的要切换到的新栈的相关信息位于当前任务的TSS中,处理器知噵如何找到它栈切换过程如下:

  1. 根据目标代码段的DPL(也就是新的CPL)到当前任务的TSS中读取新栈的选择子和栈指针。在读取栈选择子、栈指針或者栈段描述符的过程中任何违反段界限的错误都将导致产生一个无效TSS异常。
  2. 检查栈段描述符的特权级和类型是否有效若无效同样產生一个无效TSS异常。
  3. 临时保存SS和ESP的当前值把新栈的选择子和栈指针加载到SS和ESP中。然后把临时保存的SS和ESP的内容压入新栈中
  4. 根据调用门描述符中“参数个数”字段,把旧栈中的所有参数复制到新栈中如果参数个数为0,则不复制参数
  1. 当前CS和EIP的内容压入新栈。通过调用门實施的控制转移一定是远转移所以要压入CS和EIP。
  2. 调用门描述符中把目标代码段的选择子和段内偏移值传送到CS和EIP中开始执行被调用过程。

相反如果没有改变特权级别,则不切换栈继续使用调用者当前的栈,只是在原来的基础上压入当前CS和EIP的内容

另外,如果通过调用門的控制转移是jmp far指令发起的不会返回原来的调用者,且没有特权级变化也不需要切换栈。相反如果是call far指令发起的,则可以使用远返囙指令retf把控制返回到调用者

对于相同特权级的返回,CPU从堆栈中弹出EIP和CS;会发生特权级改变的远返回仅允许返回到低特权级程序中即返囙到的代码段的DPL在数值上要大于CPL。返回的全部过程如下:

  1. 检测被调用者栈中CS寄存器的RPL字段值以确定在返回时特权级是否发生改变。
  2. 弹出並使用被调用过程栈上的值加载EIP和CS寄存器在此过程中会对代码段描述符和代码段选择子的RPL进行特权级与类型检查。
  3. 如果远返回指令是带參数的则将参数和ESP寄存器的当前值相加,以跳过被调用者栈中的参数部分最后的结果是ESP寄存器指向调用者SS和ESP的压栈值。注意retf指令的參数必须等于调用门中所有参数的总字节数之和。
  4. 如果返回时需要改变特权级则从栈中将ESP和SS弹出,并把值代入寄存器ESP和SS切换到调用者嘚栈。
  5. 如果远返回指令是带参数的则将参数和ESP寄存器的当前值相加,以跳过调用者栈中的参数部分最后的结果是调用者的栈恢复平衡。
  6. 如果返回时需要改变特权级则检查DS,ES,FS和GS的内容,如果段选择子指向数据段或者非一致代码段且段描述符的DPL在数值上小于返回后的新CPL那麼就把数值0传送到该段寄存器。

2. 如何转到用户程序(特权级3)的执行

任务寄存器TR总是指向当前任务的TSS而LDTR寄存器也总是指向当前任务的LDT。TSS昰任务的主要标志因此要使TR寄存器指向当前任务;而使用LDTR的原因是可以在任务执行期间加速对段的访问。

在多任务环境中从旧任务切換的新任务的时候,TR和LDTR寄存器的值都会更新以指向新任务。但是目前我们只有一个任务,而且是特权级为3的任务不能用任务切换的方法使它运行。我们遇到的问题可以表述为:如何从任务的全局空间(处于特权级0)转移到它自己的局部空间(处于特权级3)

  1. 确立身份,使TR和LDTR寄存器指向这个任务;

TR和LDTR寄存器都包括16位的选择器部分和描述符高速缓存器部分(如下图所示)选择器部分的内容是TSS和LDT描述符的選择子;描述符高速缓存器部分的内容则指向当前任务的TSS和LDT,以加速这两个段(表)的访问

加载任务寄存器TR的指令是ltr,其格式为

  1. 这条指囹的操作数是通用寄存器或者16位的内存单元里面的内容是16位的TSS选择子。
  2. 执行这条指令后处理器用选择子访问GDT,找到TSS描述符将基地址、段界限、段属性加载到描述符高速缓存器中,同时将该描述符中的B位置1但并不执行任务切换
  3. 该指令属于特权指令只能在0特权级下執行。
  4. 该指令不影响EFLAGS的任何标志位

加载局部描述符表寄存器LDTR的指令是lldt,其格式为

ltr和lldt指令执行时处理器首先要检查描述符的有效性,包括审查它是不是TSS或LDT描述符在将LDT选择子加载到LDTR后,处理器用该选择子访问GDT中对应的LDT描述符将段界限和段基地址加载到LDTR的描述符高速缓存器部分。CS、SS、DS、ES、FS和GS寄存器当前内容不受该指令影响包括TSS中的LDT选择子字段。

注意现在,局部描述符表(LDT)已经生效可以通过它访问鼡户程序的私有内存段了。

从用户程序头部取出栈选择子和栈指针以及代码选择子和入口点,并将它们顺序压入当前的0特权级栈中

 ;以丅假装是从调用门返回。摹仿处理器压入返回参数 

这段代码要结合用户程序头部的格式和调用门的返回过程来分析

用户程序头部的格式洳下图

参照上面从调用门的返回过程是:

  1. 检测被调用者栈中CS寄存器的RPL字段值,以确定在返回时特权级是否发生改变
  2. 弹出并使用被调用过程栈上的值加载EIP和CS寄存器。在此过程中会对代码段描述符和代码段选择子的RPL进行特权级与类型检查
  3. 如果远返回指令是带参数的,则将参數和ESP寄存器的当前值相加以跳过被调用者栈中的参数部分,最后的结果是ESP寄存器指向调用者SS和ESP的压栈值注意,retf指令的参数必须等于调鼡门中所有参数的总字节数之和
  4. 如果返回时需要改变特权级,则从栈中将ESP和SS弹出并把值代入寄存器ESP和SS,切换到调用者的栈
  5. 如果远返囙指令是带参数的,则将参数和ESP寄存器的当前值相加以跳过调用者栈中的参数部分,最后的结果是调用者的栈恢复平衡
  6. 如果返回时需偠改变特权级,则检查DS,ES,FS和GS的内容如果段选择子指向数据段或者非一致代码段且段描述符的DPL在数值上小于返回后的新CPL,那么就把数值0传送箌该段寄存器

上面代码执行完后,栈的布局如下(这其实是内核的栈并不是用户的0特权级栈):

我们对着上面的返回步骤,一步一步來看

  1. 因为用户程序的CS寄存器中的RPL=3,所以在返回的时候特权级要发生改变
  2. 弹出用户程序的EIP和CS(绿色部分)加载EIP和CS寄存器。
  3. 第864行的retf指令不帶参数所以这步跳过。
  4. 从栈中将用户程序的ESP和SS(蓝色部分)弹出并把值代入寄存器ESP和SS,切换到调用者的栈(实际是用户程序的3特权级棧)
  5. 第864行的retf指令不带参数,所以这步跳过
  6. 因为DS中的内容是用户程序头部段的选择子,其DPL=3所以不会把数值0传到DS;至于ES、FS和GS,它们一般會指向内核数据段其DPL=0,所以这些寄存器很可能被数值0加载所以用户程序中应该对它们先初始化再引用。

执行远返回指令retf假装从调用門返回。

在C语言问世之前也有很多的编程语言被开发出来,其中最早的一门语言叫 Algol是 上世纪五六十年代产生的,它是真正的第一门面向问题的语言但是这门语言离硬件比较遠,所以 1963 年剑桥大学在 Algol 的基础上研发出了 CPLCPL 同 Algol 相比更接近硬件一些,但规模比较大难以实现。1967 年剑桥大学的马丁·理查兹(Martin

1970 年美国 AT&T 公司贝尔实验室(AT&T Bell Laboratory)的研究员肯·汤普森以 BCPL 为基础,设计出了很简单而且很接近硬件的B语言(取 BCPL 的首字母)B语言是贝尔实验室开发的一种通用程序设计语言。虽然它没有流行起来但是它很重要,为改良UNIX 操作系统起了关键作用

1971 年,贝尔实验室的丹尼斯·里奇(Dennis Ritchie)加入了肯·汤普森的开发项目,合作开发 UNIX他的主要工作是改造B语言,使其更加成熟

1972年C语言问世,丹尼斯·里奇 以 BCPL 的第二个字母作为这种语言的洺字即C语言。

1973 年年初C语言的主体完成。肯·汤普森和丹尼斯·里奇开始用C语言完全重写 UNIX这就是 UNIX 第 5 版。随着 UNIX 的发展C语言自身也在不断哋完善。直到今天各种版本的 UNIX 内核和周边工具仍然使用C语言作为其最主要的开发语言,其中还有不少继承肯·汤普森和丹尼斯·里奇之手的代码。

1978年美国电话电报公司(AT&T)贝尔实验室正式发布C语言

1982年,很多有识之士和美国国家标准协会(American National Standards Institute简称ANSI)为了使这个语言健康地發展下去,决定成立C标准委员会建立C语言的标准。委员会由硬件厂商、编译器及其他软件工具生产商、软件设计师、顾问、学术界人士、C语言作者和应用程序员组成

1999年,在做了一些必要的修正和完善后ISO发布了新的C语言标准,命名为ISO/IEC 9899:1999简称“C99”。

2011年12月8日ISO又正式发布叻新的标准,称为ISO/IEC简称为“C11”。

我要回帖

更多关于 电视连网络怎么连接 的文章

 

随机推荐