x86保护模式

来源:本网整理

不如看30天自制操作系统,简单,也有实模式跳转到保护模式的完整代码

处理器架构实际上是不断扩展的,新处理器必须延续旧的设计思路,并保持兼容性和一致性;同时还会有所扩充和增强。

初步鉴定你是WIN10吧,亲。64位系统是模拟运行32位程序,效率会稍差,而且你文件是12年的,当时条件下对现在的系统支持度肯定是有兼容问题的。 解决方法一:兼容模式运行 解决方法二:百度asm editor下个win10-64位的 解决方法三:wei聊Fancywan

尽管8086是16位的处理器,但它也是32位架构内的一部分。原因在于,32为处理器架构是从8086那里发展来的,是基于8086的,具有延续性和兼容性。

寄存器的扩展

实模式也就是8086汇编,限制在 1M 的内存范围内编程。 保护模式则进行了扩展,可以在 16M 的内存范围内编程,相对就复杂些。 ----但不管是实模式,还是保护模式,都是已过时的技术。 ----后来的技术有386增强模式以及AMD64技术,支持的

32位处理器在16位处理器的从基础上,扩展了这8个通用寄存器(AX,BX,CX,DX,SI,DI,BP,SP)的长度,使之达到32位。

我刚下载到了扫描版。。68MB。。要不要百度盘share给你。。。链接:/s/1pJFUbwR密码:fn86

32位通用寄存器的高16位是不可独立使用的,但低16位保持同16位处理器兼容性。因此,在任何时候他们都可以照往常一样使用。

反复看吧,如果有可能去看英文资料

但是32位处理器并不是16位处理器简单的增强。事实上32位处理器有自己的32位工作模式,而我学习的32模式是32位保护模式。在这种模式下,处理器可以使用它全部的32跟地址线,能够访问4GB内存。

选择送和不送都没有错,大家根据自己的经济能力等多种因素综合判断。有几个这样的建议:1.如果你选择送礼给老师,老师也接受了,请不要在孩子面前大放厥词:老师没有职业道德,老师居然收礼等等的段子,孩子都看在眼里,会导致孩子对老师产生某种不可描述的特殊情绪,这对孩子没有好处。因为送和不送的选择都在于你自己,没有任何一个老师会强迫哪个学生家长给他们送礼,你送是出于你的心意,老师收和不收在于他们的选择。2.如果你选择送礼给老师,最好不要让你的孩子知道,孩子知道之后就会在学校同学之间相互沟通,这对孩子没好处,道理同第一条。3.如果你选择送礼给老师,也要和孩子一起手工制作一些卡片等,那是代表孩子的心意,和成人

在32位模式下,为了生成32位物理地址,处理器需要使用32位的指令指针寄存器。为此,32位处理器扩展了IP,使之达到32位,工作在32位模式下时使用EIP,但是当工作在16位模式下仍使用IP。

我家喵能听懂简单人话,如他的名字,叫他吃喝拉撒他都知道,但主要还是观察人的行为理解人的意思,猫咪是哑巴会啊啊,以下是我家喵的基本回应:见到小鸟、飞虫:急促的\"啊!啊!\"我看手机,猫求摸摸:细长问调\"啊?~~\"摸得开心了:\"呼噜,呼噜~~\"猫在休息,我抱他,他不愿意:妞捏声\"嗯?~~\"找女朋友求爱:\"嗯啊?嗯啊?\"见到特别想吃的食物讨吃的:\"喵呜!喵呜!\"

对于32位模式下因为IA-32架构的处理器是基于分段模型,可是32位模式下,对内存的访问从理论上不需要分段,因为它可以自由访问任何一个内存位置。所以引入了平坦模型,即只分一个段,段的基址是0x00000000,段的长度是4GB,在这种情况下视为不分段。

最经典的莫过于那句我们白着呢……真是为她的机智和敏捷的思维反应点赞!现在甜馨儿吐槽起妈妈李小璐来也是不留情面哈哈,在李小璐亮相的某节目中,小编看了花絮采访,甜馨儿狂吐槽妈妈抢她的零食,唱歌不好听,跳舞不好看。真是可爱死了……真是羡慕李小璐和贾乃亮,有个这么可爱的女儿。

在32位模式下,处理器要求在加在程序时,先定义该程序所拥有的段,然后允许使用这些段。定义段时,除了基地址外,还附加了段界限,特权级别,类型等属性。当程序访问一个段时,处理器将用固件实施各种检查工作,以防止对内存的违规访问。

每日小情书让月光透过纱窗,带着我的思念,轻抚你,熟睡的脸庞。让星星排成行,睁大眼睛,去见证,爱你的力量。想在梦里,飞到你的身旁,睡在我的臂弯,轻轻滴为你歌唱。我爱你!每日小情书如果你一贫如洗,我就是你最后的行李,就像我爱你,长的像你不行,脾气像你也不行,总之不是你就不行。我爱你!

在32位模式下,传统的段寄存器,如CS,SS,DS,ES,保存的不再是16位段基地址,而是段的选择子(实模式下是段寄存器,在保护模式下就是段选择子,因为在保护模式下他们存储的不再是段地址而是段描述符在描述符表中的索引号),即用于选择要访问的段,除了段选择子外,每个段寄存器还包括一个不可见部分,称为描述符高速缓冲器,里面有段的基地址和各种访问属性。

在保护模式下访问一个段的时候,传送到段选择器的是段选择子。他由三个部分组成,第一部分是索引号,用来在描述符表种选择一个段描述符。T1是描述符表指示器,T1=0时,描述符在GDT中,T1=1时,描述符在LDT中。RPL是请求特权级,表示给出当前选择子的那个程序的特权级

这里写图片描述

线性地址

我们传统上讲的,段地址个偏移地址称为逻辑地址,偏移地址叫做有效地址,在指令中给出有效地址的方式叫做寻址方式。

然而段的管理是由处理器的段部件负责进行的,段部件将段地址和偏移地址相加,得到访问内存的地址。一般来说,段部件产生的地址就是物理地址。

但是为了解决内存空间碎片化(内存每次分配大小不定,时间长后会产生过多过小的内存空间块),IA-32处理器支持分页功能,分页功能将物理内存空间划分成逻辑上的页。通过使用页,可以简化内存管理。

当页功能开启时,段部件产生的地址就不再是物理地址了,而是线性地址,线性地址还要经过页部件转换后,才是物理地址。

线性地址的概念用来描述任务的地址空间。IA-32处理器上的每个任务拥有4GB的虚拟内存空间,这是一段长4GB的平坦空间,就像一段平直的线段。相应的,由段部件产生的地址,就对应着线性地址空间上的每一个点,这就是线性地址。

全剧描述符表

在保护模式下,对内存的访问仍能使用段地址和偏移地址,但是,在每个段能够访问之前,必须先进行登记。当你访问的偏移量超出段的界限时,处理器就会阻止这种访问,并产生一个叫做内部异常的中断。

断描述符,用八个字节来描述一个段有关的信息。为了存放这些描述符,需要在内存中开辟一段空间,在这段空间里,所有的描述符都是挨在一起,集中存放的,这就形成了一个描述符表。

最主要的描述符表是全局描述符表(GDT),在进入保护模式前,必须要定义全局描述符表。

这里写图片描述图品出自

为了跟踪全局描述符表,处理器内部有一个48位的寄存器,称为全局描述符表寄存器(GDTR)。该寄存器高32为存放全局描述符表线性基地址,低16位存放全局描述符表边界。

因为GDT的界限是16位所以表的大小最多是2^16字节(64KB),又因为全局描述符大小为8字节,所以最多可以定义8192个描述符。

虽说基地址有32位,但是由于在进入保护模式之后,处理器立即要按新的内存访问模式工作,所以,必须在进入保护模式之前定义GDT。但是,由于在实模式下只能访问1MB的内存,故GDT通常都定义在1MB以下的范围内。也允许在进入保护模式之后换位置重新定义GDT。

段描述符中的段属性也被安排在两个域中。下面对其定义及意义作说明。

(1)G为就是段界限粒度(Granularity)位

G=0表示界限粒度为字节;G=1表示界限粒度为4K 字节。注意,界限粒度只对段界限有效,对段基地址无效,段基地址总是以字节为单位。

(2)D/B位是一个很特殊的位在描述可执行段、向下扩展数据段或由SS寄存器寻址的段(通常是堆栈段)的三种描述符中的意义各不相同

在描述可执行段的描述符中,D位决定了指令使用的地址及操作数所默认的大小。

D=1表示默认情况下指令使用32位地址及32位或8位操作数,这样的代码段也称为32位代码段;

D=0 表示默认情况下,使用16位地址及16位或8位操作数,这样的代码段也称为16位代码段,它与80286兼容。可以使用地址大小前缀和操作数大小前缀分别改变默认的地址或操作数的大小。

在向下扩展数据段的描述符中,D位决定段的上部边界。

D=1表示段的上部界限为4G;

D=0表示段的上部界限为64K。

在描述由SS寄存器寻址的段描述符中,D位决定隐式的堆栈访问指令(如PUSH和POP指令)使用何种堆栈指针寄存器。

D=1表示使用32位堆栈指针寄存器ESP;

D=0表示使用16位堆栈指针寄存器SP。

(3)AVL位是软件可利用位

80386对该位的使用未做规定,此位被linux和windows操作系统忽略。

(4)P位称为存在(Present)位

P=1表示描述符对地址转换是有效的,或者说该描述符所描述的段存在,即在内存中;P=0表示描述符对地址转换无效,即该段不存在。使用该描述符进行内存访问时会引起异常。

(5)DPL表示描述符特权级(Descriptor Privilege level)

共2位。它规定了所描述段的特权级,用于特权检查,以决定对该段能否访问。

(6)DT位说明描述符的类型

对于存储段描述符而言,

DT=1,以区别与系统段描述符和门描述符(DT=0)。

(7)TYPE说明存储段描述符所描述的存储段的具体属性

这里写图片描述

其中的位0指示描述符是否被访问过(Accessed),用符号A标记。

A=0表示尚未被访问,

A=1 表示段已被访问,

当把描述符的相应选择子装入到段寄存器时,80386把该位置为1,表明描述符已被访问,操作系统可测试访问位,已确定描述符是否被访问过。

此为位1,对应的type为奇数,因此type对应的数值为奇数时标识该描述符被访问过,否则为偶数标识未被访问过(可从前面的表中看出)

综上我们可以看到在类型不同时,段描述符的区别之处,如下所示

代码段描述符

表示这个段描述符代表一个代码段,它可以放在GDT中。该描述符置S标志为1。

数据段描述符

表示这个段描述符代表一个数据段,它可以放在GDT中,该描述符置S标志为1。

任务状态段描述符

表示这个段描述符代表一个任务状态段,也就是说这个段用于保存处理器寄存器的内容。它只能出现在GDT中,根据相应的进程是否正CPU上运行,其Type字段的值分别为11或9。这个描述符的S标志置为0。 $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

    ').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
  • ').text(i)); }; $numbering.fadeIn(1700); }); });

    本文转载自wrx1721267632博客,版权归wrx1721267632所有

    扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

    80x86 保护模式 保护的是什么?

    简单地理解,保护模式中给每一个段都添加了一些权限的控制,还增加了执行权限的概念。

    每个段可以单独设置可执行,可读,可写等权限。

    对于执行的时候,分为内核态和用户态两种,内核态可以执行一些特殊的指令,而用户态只能只能执行一些比较简单普通的指令,这样可以防止用户直接操作硬件。

    上面的特性都是实模式下没有的。更多追问追答追问谢谢你的回答,但是我还是不太清楚,保护模式到底保护的的是什么,,,追答你看,每一个段都加上正确的权限之后,就不是什么操作都能执行的了,比如,一个只读的段就不会被写了,这只是保护的一个例子。追问在您举的这个例子当中,读写的权限是谁决定的呢,决定的依据是什么?追答这个权限一般是由操作系统来决定的。比如C程序中生命了const的东西会放到.rodata,这个段显然是不可写的,但是可读。

    编译器在编译源代码的时候会把代码和数据放到正确的段中。

    比如操作系统需要执行一个可执行程序的时候,会把可执行程序一个段一个段地加载到内存,当操作系统发现当前段是代码段的时候就把这个段设置为可读且可执行,但是不可写,如果发现是数据段,那么这个段就是可读可写但是不可执行,通过这样的方法来保证不该被执行的代码被执行。

    小女子求:x86汇编语言-从实模式到保护模式完整版

    我刚下载到了扫描版。。68MB。。要不要百度盘share给你。。。

    链接: http://pan.baidu.com/s/1pJFUbwR 密码: fn86

    在进程Intel x86保护模式下,如果数据段寄存器DS装入的选择符是022CH。该选择符指向局部描述符中

    局部描述符中

    80x86保护模式编程的好书如题 谢谢了

    x86汇编语言-从实模式到保护模式 不错 你还可以下个 《保护模式下80386编程》!想买就买 《x86汇编语言-从实模式到保护模式》 和《X86/X64结构探索及编程》前者 网上只有前13章 后者只能买

    Intel x86的架构模式

    x86架构是重要地可变指令长度的CISC(复杂指令集计算机,Complex Instruction Set Computer)。字组(word, 4字节)长度的存储器访问允许不对齐存储器地址,字组是以低位字节在前的顺序储存在存储器中。向前兼容性一直都是在x86架构的发展背后一股驱动力量(设计的需要决定了这项因素而常常导致批评,尤其是来自对手处理器的拥护者和理论界,他们对于一个被广泛认为是是落后设计的架构的持续成功感到不解)。但在较新的微架构中,x86处理器会把x86指令转换为更像RISC的微指令再予执行,从而获得可与RISC比拟的超标量性能,而仍然保持向前兼容。x86架构的处理器一共有四种执行模式,分别是真实模式,保护模式,系统管理模式以及虚拟V86模式。

    在这篇简短的文章中出现的指令和寄存器助忆符号的名称,都在Intel文件中有所指定以及使用在 Intel组译器(Assembler)中(和兼容的,比如微软的MASM、Borland的TASM、CAD-UL的as386 等等)。一个以Intel语法指定的指令mov al, 30h与AT&T语法的movb x30, %al相当,都是会被转译为两个位的机器码B0 30(十六进制)。你可以发现在这段程序中的mov或 al,都是原来的Intel助忆符号。如果我们想要的话,我们可以写一个组译器由代码'move immediate byte hexadecimally encoded 30 into low half of the first register'(移动立即值位十六进制编码30到第一个寄存器的低半部位),来产生相同的机器码。然而,传统上汇编器(Assembler)一直使用Intel的助忆符号。

    x86汇编语言会在x86 汇编语言文章中有更详细的讨论。 Intel 8086和8088有14个16位寄存器。其中四个(AX, BX, CX, DX)是通用目的(尽管每个寄存器都有附加目的;举个例子:只有CX可以被用来当作loop(循环)指令的计数器。)每个寄存器可以被当成两个分开的字节访问(因此BX的高位可以被当成BH,低位则可以当成BL)。除了这些寄存器,还有四个区段寄存器(CS、DS、SS、ES)。他们用来产生存储器的绝对地址。还有两个指针寄存器(SP是指向堆栈的底部,BP可以用来指向堆栈或存储器的其它地方)。两个指针寄存器(SI和DI)可以用来指向数组的内部。最后,有标志寄存器(包含状态标志比如进位、溢出、零标志,等等)。以及IP是用来指向目前运行指令的地址。

    在实模式下,存储器的访问是被区段开来。为了得到最后20位的存储器地址,要将区段的地址往左移动4位,并且加上偏移的地址。因此,实模式下总共可以寻址的空间是2字节,或者是1MB,于1979年是相当让人印象深刻的象征。在实模式下有两种寻址模式:near和far。在 far模式,区段跟偏移都需要被指定;在near模式,只需要偏移模式被指定,而存储器区段是由适当的区段寄存器获得。以数据而言是使用DS寄存器,代码是CS寄存器,堆栈是SS寄存器。举个例子,如果DS是A000h且SI是5677h,DS:SI会指向计忆体的绝对地址DS × 16 + SI = A5677h

    在这种架构下,两对不同的区段/偏移可以指向一个相同的绝对地址。因此如果DS是A111h且SI是4567h,DS:SI会指向跟上一段相同的A5677h。除了duplicity之外,这种架构无法同时一次拥有4个以上的区段。此外,CS、DS和SS是为了程序正确功能而必须的,因此仅仅只有ES可以被用来指向其它的地方。这种模式原本是为了与Intel 8085兼容,导致程序设计师永无止尽的痛苦。

    除了以上所说的,8086也拥有8-bit的64K(另一种说法是16-bit的32K)输入输出(en:I/O)空间,以及一个由硬件支持的64K(一个区段)存储器堆栈。只有words(2字节)可以被推入到堆栈中。堆栈是由存储器的上端往下成长,他的底端是由SS:SP指向。有256个中断(interrupts),可以由硬件或是软件同时组成。中断是可以串连在一起,使用堆栈来储存返回被中断的程序地址。 Intel 80286可以在不改变任何东西下,支持8086的实模式16位软件,然而它也支持额外的工作模式称为保护模式,可以将可寻址的物理内存扩充到16MB,可寻址的虚拟内存最大到 1GB。这是使用节区寄存器来储存在节区表格中的索引值。处理器中有两个这样的表格,分别为GDT和LDT,每一个可以储存最多8192个节区的描述子,每一个节区可以给予最大到64KB的存储器访问。节区表格提供一个24位的基底地址(base address),可以用此基底地址增加想要的偏移量来创造出一个绝对地址。此外,每一个节区可以被赋予四种权限等级中的一种(称为 rings)。

    尽管这个推出的功能是一项进步,但是他们并没有被广泛地使用,因为保护模式的操作系统无法运行现有的实模式软件。这样的能力只有在随后80386处理器的虚拟86模式中出现。

    在同时,操作系统比如OS/2尝试使用类似乒乓的方法,让处理器在保护和实模式间切换。这样都会让计算机变慢且不安全,像是在实模式下的程序可以轻易地使计算机当机。OS/2也定义了*性的程序设计规则允许Family API或bound程序可以在实模式或保护模式下运行。然而这是给原本为保护模式下设计的程序有关,反之则不然。保护模式程序并不支持节区选择子和物理内存之间的关系。有时候会错误地相信在16位保护模式下运行实模式的程序,导致IBM必须选择使用Intel保留给BIOS的中断调用。事实上这类的程序使用任意的选择子数值和使用在上面提到的“节区运算”的方式有关。

    这个问题也在Windows 3.x上出现。这个推出版本想要在16位保护模式下运行程序,而先前的版本只能在实模式下运行。理论上,如果Windows 1.x或2.x程序是写得“适当”且避免使用节区运算的方式,它就有可能在真实和保护模式两者下运行。Windows程序一般来说都会避免节区运算,这是因为Windows实现出软件的虚拟内存方式,及当程序不运行时候,搬移存储器中的代码和数据,所以操作绝对地址的方式是很危险的;当程序不运行时,被认为要保持存储器区块的“handles”,这样的handles已经非常相当于保护模式的选择子。在保护模式下的Windows 3.0运行一个旧的程序,会触发一个警告对话盒,建议在实模式下运行Windows(推测还是仍然可以使用扩充存储器,可能是在80386机器用EMM386模拟,因此它并不被局限于640KB)或是从厂商那更新到新的版本。好的行为之程序可能可以使用特别的工具来避免这样的对话盒。不可能有些GUI程序在16位保护模式下运行,且其它GUI程序在实模式运行,可能是因为这会需要两个分开的环境且会依于前面所提到的处理器在两个模式间的乒乓效应。从Windows 3.1版开始,实模式就消失了。 Intel 80386推出后,也许是到目前为止x86架构的最大跃进。除了需要值得注意的Intel 80386SX是32位架构但仅只有24位寻址(和16位数据总线)。除此之外其他架构都是32位 - 所有的寄存器、指令集、输出输入空间和存储器寻址。为了能够在后者所说的功能工作,要使用32位扩充的保护模式。然而不像286,386所有的区段可以使用32位的偏移量,即使存储器空间有使用区段,但也允许应用程序访问超过4GB空间而不需要区段的分隔。此外,32位保护模式提供分页的支持,是一种让虚拟内存得以实现的机制。

    没有新的通用寄存器被加入。所有16位的寄存器除了区段寄存器外都扩充为32位。Intel在寄存器的助记符号上加入“E”来表示(因此扩充的AX变成EAX,SI变成ESI,依此类推)。因为有更多的寄存器数量、指令、和运算单元,因此机器码的格式也被扩充。为了提供与先前的架构兼容,包含运行码的区段可以被标示为16或是32位的指令集。此外,特殊的前置符号也可以用来在16位的区段包含32位的脚本,反之亦然。

    分页跟区段的存储器访问是为了支持现在多任务操作系统所必须要的。Linux、386BSD、Windows NT和Windows 95都是一开始为386所发展,因为它是第一颗提供可靠地程序分离存储器空间的支持(每个程序拥有自己的寻址空间)以及可以在必要的情况下打断他们程序的运行(使用ring,一种x86保护模式下权力分级的名称)。这种386的基本架构变成未来所有x86系列发展的基础。

    Intel 80386数学辅助运算处理器也在集成到这个CPU之后的x86系列中,也就是Intel 80486。新的FPU可以帮助浮点数运算,对于科学计算和图形设计是非常重要。 2001年Intel推出SSE2指令集,增加了:

    完整地补充了整数指令(与MMX相似)到原来的SSE寄存器。 64位的SIMD浮点运算指令到原来的SSE寄存器。 第一个的增加导致MMX几乎是过时可以舍弃的,第二个则允许这些指令可以让传统的编译器现实地产生。 2007年1月,Intel公开发表使用其45纳米制程Penryn芯片家族的PC和服务器。Penryn是这一系列依据英特尔Core微架构之笔记本电脑、台式机和服务器芯片家族的代号,首次正式发布时共有16款处理器,除了一款Intel Core 2 Extreme QX9650是针对普通台式机市场外,其余的双核Xeon 5200系列和四核5400系列都是服务器处理器。基本上Penryn是继Merom之后的缩小版Core 2 Duo,再加上47条新的SSE4指令集等额外配备。SSE4指令集之首次发表时间为2006年9月的英特尔开发者论坛(IDF,Intel Developer Forum)。

    另外,x86处理器制造厂商AMD也在该公司最新K10架构的Phenom处理器中,加入4条新的SSE4A指令集。注意,SSE4与SSE4A无法彼此兼容。 到2002年,由于32位特性的长度,x86的架构开始到达某些设计的极限。这个导致要处理大量的信息储存大于4GB会有困难,像是在数据库或是影片编辑上可以发现。

    Intel原本已经决定在64位的时代完全地舍弃x86兼容性,推出新的架构称为IA-64技术作为他的Itanium处理器产品线的基础。IA-64与x86的软件天生不兼容;它使用各种模拟形式来运行x86的软件,不过,以模拟方式来运行的效率十分低下,并且会影响其他程序的运行。

    AMD主动把32位x86(或称为IA-32)扩充为64位。它以一个称为AMD64的架构出现(在重命名前也称为x86-64),且以这个技术为基础的第一个产品是单内核的Opteron和Athlon 64处理器家族。由于AMD的64位处理器产品线首先进入市场,且微软也不愿意为Intel和AMD开发两套不同的64位操作系统,Intel也*采纳AMD64指令集且增加某些新的扩充到他们自己的产品,命名为EM64T架构(显然他们不想承认这些指令集是来自它的主要对手),EM64T后来被Intel正式更名为Intel 64。

    这是由非Intel的制造商所发起和设计的第一次重大的x86架构升级。也许更重要的,它也是第一次Intel实际上从外部来源接受这项本质的技术。 虚拟x86是很困难的,因为它的架构并未达到波佩克与戈德堡虚拟化需求。然而,有好几个商业的虚拟x86产品,比如VMware和微软的Virtual PC。Intel和AMD两者都有公开宣布未来的x86处理器将会有新的增强来容易达到更有效率的虚拟。Intel针对这项虚拟特性的代号称为Vanderpool和Silvervale;AMD则使用Pacifica这个代号。

  • 本文相关:
  • Git--创建与合并分支
  • SimRank--基于结构的相似度度量方法学习笔记
  • 《UNIX环境高级编程》--6系统数据文件和信息
  • 【在线笔试题解题报告系列】微软在线笔试之 2016微软探星夏令营在线技术笔试(时间:2016.07.17)
  • [从头读历史] 第307节 星球战争 BC2699 至 BC2600(公元前27世纪)
  • ISO8583报文协议详解
  • cs231n - assignment1 - neural net 梯度推导
  • 80x86微处理器结构及其工作模式
  • 五大NAT穿透方法,解决内网问题
  • 动态代理及其两种实现方式(JDK、CGLIB)
免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
Copyright © 2017 www.zgxue.com All Rights Reserved