win32汇编中段寄存器还有什么用处?
答案:3 悬赏:40 手机版
解决时间 2021-03-01 23:29
- 提问者网友:人生佛魔见
- 2021-03-01 03:21
win32汇编中的段寄存器(段选择器)还有什么用?在汇编的时候只是所有的段都是flat 平坦模式,可以访问全部的4GB空间,我看到说32位汇编里面段寄存器的作用是段描述符,可以指定段的属性等,可是在汇编的时候所用的段只是数据和代码的分类段,并不是段选择器所指的段,访问写入属性也是由分类后的内存页指定的,根本就不是段描述符的属性,在汇编和反汇编的时候根本用不到段寄存器。而且我反汇编的时候看到,段选择器只用到了8位,前面两位是00,后面两位才是索引。有没有人能帮我具体解释解释啊。有没有好点的32位汇编反汇编的论坛啊?我在这问汇编的问题从来就没有解决过。
最佳答案
- 五星知识达人网友:长青诗
- 2021-03-01 04:29
段寄存器指的是cs,ds,ss,es,fs,gs这些。在win32保护模式下,他们指向各自的描述符。那些描述符,都指向同一个段起始地址(fs除外)。所以win32编程,不需要制定cs,ds,ss等等,因为他们都是一样的。可以认为ds=es=ss=...这就是flat的含义。在编程者看来,各个段都是平坦的,一样的,没有区别。
至于数据代码的访问属性,那是在PE文件的节里面定义的。PE文件在加载的时候,文件从磁盘映射到内存之后,会根据节的属性来修改相应内存的访问属性。这个属性跟cs,ds等等没有任何关系
.text .code之类,实际上定义的是节(英文:section),跟段(英文:segment)是2个不同的概念。
推荐去bbs.pediy.com看看那里的精华帖
希望能对你有帮助
至于数据代码的访问属性,那是在PE文件的节里面定义的。PE文件在加载的时候,文件从磁盘映射到内存之后,会根据节的属性来修改相应内存的访问属性。这个属性跟cs,ds等等没有任何关系
.text .code之类,实际上定义的是节(英文:section),跟段(英文:segment)是2个不同的概念。
推荐去bbs.pediy.com看看那里的精华帖
希望能对你有帮助
全部回答
- 1楼网友:话散在刀尖上
- 2021-03-01 06:25
win32里段寄存器里存放的是段选择子, 作用也是带定址的, 与实模式相比,段选择子代替了原来的段基址。从本质上来讲,段选择子最终还是要转化成段基址
段选择子长16位,其格式如上图所示。从图中可见,段选择子的高13位是描述符的索引值。所谓描述符索引是指描述符在描述符表中的序号。由于描述符总是8个字节的,所以将描述符索引值逻辑左移3位即可得到对应描述符在描述符表中的偏移地址,再加上描述符表起始地址就可以确定描述符的位置,这算是一个小技巧。段段选择子的第2位是引用描述符表指示位,标记为ti(table indicator),ti=0表示该选择子指示的是全局描述符表gdt中的描述符,ti=1表示该选择子指示的是局部描述符表ldt中的描述符。第0和第1位称为rpl(request privilege level请求特权级),用于特权级控制,在上一个问题中有详细描述。通过段选择子,我们可以从gdt或ldt中找到需要的段描述符,段描述符中存储着目标段的基址(起始地址),界限(段的范围)以及其他一些控制信息,由此,我们完成了段选择子到段基址的转化。
- 2楼网友:雪起风沙痕
- 2021-03-01 05:19
现在的操作系统使用段表寄存器,载入段的! 主要的作用就是代码保护,比如.text就是代码,这个是只读的,作为一个段,段表中段的属性为只读,这样代码就不会被修改!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯