问题标签 [protected-mode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1065 浏览

assembly - 我可以运行在 dosbox 中切换到保护模式的汇编程序吗?

我们正在研究一个汇编程序,它将 386 处理器从实模式切换到保护模式,然后再切换回实模式。该程序是使用 TASM 编译的。

因为这个程序需要做一些特权操作,而且需要实模式启动,所以我们需要从DOS下运行。为此,我们被告知带上软盘,这样我们就可以在大学的计算机上启动 DOS。

我想知道是否可以使用 Dosbox。但它需要在保护模式和实模式下忠实地模拟 I386,我不确定它是否这样做。

0 投票
1 回答
264 浏览

assembly - 关于保护模式下间接jmp的问题

因为地址 xxxx:yyyyyyyy 在保护模式下是 32 位的,所以我把一个 48 位的地址放在一块内存中,想给间接jmp的,下面是我写的:

但是 nasm 表明这jmp fword [address]是错误的,我已经阅读了一些类似的建议 但也没有帮助,那我该怎么办?

0 投票
0 回答
428 浏览

x86 - 英特尔 32 位保护模式启用分页导致三重故障

我正在开发一个爱好者操作系统,但在身份映射和启用分页方面遇到了麻烦。我正在使用 Bochs 模拟器,我收到以下错误消息:=

00691299602e[CPU0] 中断():门描述符无效 sys seg(向量 = 0x0e)

00691299602e[CPU0] 中断():门描述符无效 sys seg(向量 = 0x08)

00691299602i[CPU0] CPU 处于保护模式(活动)

00691299602i[CPU0] CS.d_b = 32 位

00691299602i[CPU0] SS.d_b = 32 位

00691299602i[CPU0] | EAX=e0000011 EBX=00000209 ECX=00000f9f EDX=00000f9f

00691299602i[CPU0] | ESP=0000ff5c EBP=00000001 ESI=00000209 EDI=0001d000

00691299602i[CPU0] | IOPL=0 id vip vif ac vm RF nt of df if tf SF zf af PF cf

00691299602i[CPU0] | SEG 选择器基本限制 GD

00691299602i[CPU0] | SEG sltr(index|ti|rpl) 基本限制 GD

00691299602i[CPU0] | CS:0008(0001|0|0)00000000 ffffffff 1 1

00691299602i[CPU0] | DS:0018(0003|0|0)00000000 ffffffff 1 1

00691299602i[CPU0] | SS:0018(0003|0|0)00000000 ffffffff 1 1

00691299602i[CPU0] | ES:0018(0003|0|0)00000000 ffffffff 1 1

00691299602i[CPU0] | FS:0018(0003|0|0)00000000 ffffffff 1 1

00691299602i[CPU0] | GS:0018(0003|0|0)00000000 ffffffff 1 1

00691299602i[CPU0] | EIP=00102764 (00102764)

00691299602i[CPU0] | CR0=0xe0000011 CR2=0xe0000011

00691299602i[CPU0] | CR3=0x00014000 CR4=0x00000000

00691299602i[CPU0] 0x00102764>> 添加字节 ptr ds:[eax], al : 0000

00691299602e[CPU0] exception():第 3 (13) 个异常,无解决,关机状态为 00h,正在重置

我正在尝试做的是标识整个可用内存的映射,而我用来执行此操作的代码是:=

与 PT_SET_ATTRIB 和 PT_SET_FRAME 类似。我认为映射是错误的,Bochs 停止的实际行看起来像是引用了一个空指针:=

但它看起来也像 CPU 试图加载页面错误和双重错误处理程序并最终导致三重错误导致 CPU 重置。我希望有人可以帮助指出错误。

谢谢

0 投票
3 回答
1726 浏览

assembly - 在汇编中切换到保护模式后跳转到内核

我的第一个问题在这里

我正在 32 位模式下开发一个简单的操作系统(只是为了好玩),但我遇到了一个问题,即在切换到(32 位)保护模式后我无法跳转到我的内核

这是我的 bootloader.asm

代替

我用过

但这些都不起作用

但是如果我只是加载了我的内核而没有切换到保护模式它可以工作

顺便说一句,这是 bootloader.asm 中包含的我的 disk.asm

编辑:所有包含的内容 switch_to_pm.asm

gdt.asm

对不起,我的错误以任何方式编辑标题添加了大部分内容并尝试了 Babysteps,我使用了调试器并加载了内核,所以问题出在哪里

0 投票
0 回答
286 浏览

assembly - 命令 mov 在保护模式下中断

我正在学习 IA-32 任务切换,这是我的代码:

有一些关于初始化描述符和在屏幕上打印字母的代码,我没有粘贴。这里是问题:进程成功进入task0,然后跳转到task1,我认为这是成功的(我检查了tr,ldtr ss,esp改得很好)然后奇怪的事情发生了:当eip移动到命令mov cl,'b'时,bochs告诉我发生中断并且中断门无效(因为我没有设置除用于打印功能的数字 0x50 中断之外的其他 idt 编号),这是我第一次遇到由mov!我的代码有什么问题引起的中断?bug在哪里?

0 投票
0 回答
345 浏览

windows - 在 CreateDesktop() 中使用启用了保护模式的 Flash

我正在尝试使用 CreateDesktop() Windows 函数在新桌面中启动 Firefox,但是在启用 Flash 的保护模式时我遇到了 Flash 问题。

当我在默认桌面上启动 Firefox 时,Flash 可以完美运行,但 Firefox 在新桌面上挂起,因为 Flash 永远不会启动。

禁用 Flash 的保护模式可以解决这个问题,但我希望能够运行它而不必禁用 Flash 的保护模式。

它可能类似于这个问题: CreateDesktop() with vista and UAC on (C, windows)

我正在尝试从默认桌面读取安全信息并将其设置为新桌面,但我得到“权限被拒绝”。但是我仍然不知道这是否是正确的方法。

有谁知道如何在使用 CreateDesktop() Windows 函数创建的桌面中启动一个进程,以便 Flash 可以在启用保护模式的情况下运行?

有没有办法在不从旧桌面获取信息的情况下设置新桌面的安全信息?

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682124%28v=vs.85%29.aspx

这是我用来在新桌面上启动 Firefox 的代码:

0 投票
2 回答
295 浏览

security - x86 - 保护模式下的分段有什么用途?

我读到了 x86 内存分段,我认为我遗漏了一些东西,线性(虚拟)地址是通过从 GDT 条目(基地址)中获取 32 位,从偏移地址中获取 32 位和将它们相加得到一个 32 位的虚拟地址。

现在,正如我所见,32 个偏移位可以跨越所有 VA 空间,因此实际上不需要使用 32 位基地址。所以我得出结论,基地址在翻译过程中并没有真正发挥作用,这让我想到使用分段的内存保护(在 x86 保护模式下)是无用的,因为我们可以获得具有环 0 权限的段的 VA与偏移地址本身。(例如,跳转 0x08000001 - 当我们的段具有环 3 特权时到内核 VA)

那么我们所有的内存保护都基于分页吗?

0 投票
1 回答
312 浏览

assembly - 受保护平面模式下数据和指令的起始地址

我目前正在阅读 Jeff Duntemann 的“Assembly Language step by step”。我对描述受保护平面模型的内存组织的图片感到有些沮丧。它显示了一块 4GB 大小的内存。在那里,指令区靠近底部(低地址),然后是上面的数据区,堆栈靠近顶部。同时,如果我理解正确的话,平面模式下的 DS 和 CS 寄存器不会影响指令或数据的起始地址(在 4GB 内)。

我的问题是:

那么,谁在这 4GB 中分配代码和数据区域(下面的代码,上面的数据)?谁决定指令从哪个地址开始,数据从哪个地址开始?书中有一些汇编程序,但看起来程序员没有为指令和数据选择内存位置(在他自己的 4GB 内)。他只是在某处声明数据部分并输入指令。另一方面,*.lst 文件已经有指令和数据块的地址。那么是汇编程序决定地址吗?

0 投票
1 回答
220 浏览

internet-explorer-8 - 模糊的 IE8 不透明度问题

我在处理 IE8 和 Websphere 6.1 时遇到了一个奇怪的不透明度问题。

有一个非常基本的不透明度设置,我们在某个屏幕上方有一个模态类型对话框。我在后台的屏幕顶部放置了一个不透明的 div,因此用户无法单击任何控件但可以看到它,然后在顶部添加对话框并强制他们回答问题。看起来很基本,很容易做到。

这是用于创建上述不透明效果的 css:

这是用于创建对话框的 CSS:

该方案在所有浏览器的开发中都能正常工作。在我的机器上本地运行良好,在集成环境上也运行良好。以为我很清楚。

但是,一旦进入我们的 ST 环境或更高版本,不透明度在 IE8 中无法正常工作。它仍然适用于 Chrome 和 FF,但由于某种原因 IE8 无法正常工作。使用 'wipeOutDiv' CSS 类的 div 变得完全可靠,看起来很奇怪。我尝试过修改 IE 的浏览器模式和文档模式,但我所做的任何更改都无法让它在这些环境中工作。

我比较了环境之间的 DOM 文档,它们是相同的。留给我的唯一变量是应用程序服务器本身,在本例中是 Websphere 6.1。我注意到一个区别是它工作的环境是通过 http 提供的,而它不是 https 的环境。这似乎更像是一个巧合,而不是真正的根本原因。

我很生气。有人有什么建议或类似的经历吗?

0 投票
1 回答
329 浏览

x86 - Running code built for x86 unpaged protected mode

I'm currently trying to reverse engineer a program (~30KB, mostly code) that appears to be built for x86 unpaged protected mode. It contains instructions that access physical memory (or memory mapped device registers to be more precise) directly, e.g.:

I would like to run said program in QEMU and ideally be able to step through it in a debugger such as gdb.

Now the problem is that the absolute memory addresses encoded in the code result in segmenation faults in any operating system with paging enabled.

I've been thinking of ways to circumvent this:

  • Map physical memory into user space by using mmap on /dev/mem and run the program in user space. While this allows access to physical memory, the hardcoded memory addresses in the analyzed program would need to be patched as the mapped address will not be the same as the physical address. This seems hardly feasible due to the large amount of encoded absolute addresses.
  • Install a segmentation fault handler that tries to fix the illegal memory access by rewriting the address. Then run the program in user space.
  • Write a bootloader that loads the program code from disk into memory, enters protected mode (including setup of the GDT) and jumps to it. As I've never written any comparable code, I'm not even sure this would work.

Are there any other options to run this program I've missed so far? Or do you have any suggestions, additions or experiences with the ideas mentioned above?