我可以使用 rsp 作为通用寄存器吗?

2023-12-06

有人告诉我如果我使用rsp作为通用寄存器,操作系统可能会在发生中断时将寄存器转储到它指向的位置,从而导致出现问题的行为。

这是真的吗?如果不是的话,如果我不需要堆栈,我可以使用rsp作为通用寄存器?

编辑:在用户空间中运行。


如果发生中断,你不会被搞砸吗?

那些曾经在 DOS 中编程过的人此时可能会对中断的可能性感到不安。通常,像这样重用堆栈指针是一个非常糟糕的主意,因为您不知道中断何时会发生,而当发生中断时,CPU 会尽职尽责地将当前程序计数器和标志推送到堆栈上。如果您重复使用了 ESP,这将导致随机数据结构被丢弃。在这种环境中,ESP 必须始终指向有效且足够的堆栈空间来服务中断,只要这不成立,就必须禁用中断。长时间禁用中断的情况下运行会降低系统响应能力(丢失中断和糟糕的延迟),并且对于大型例程来说并不实用。

然而,我们在这里运行在保护模式下。

当在 Win32 的用户空间中运行时,中断不会推送到用户堆栈上,而是推送到内核堆栈上。你想一想,用户栈是不可能用的。如果线程超出堆栈空间,或者甚至只是有一个无效堆栈,当 CPU 尝试推送 EIP 和 EFLAGS 时,就会出现页面错误,并且您无法在中断处理程序中出现页面错误。因此,调度程序可以在无堆栈例程运行时执行任意数量的上下文切换,并且指向 ESP 的任何数据结构都不会受到影响。

From http://www.virtualdub.org/blog/pivot/entry.php?id=85

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以使用 rsp 作为通用寄存器吗? 的相关文章

  • 在 x86 ASM 中测试零通常哪个更快:“TEST EAX, EAX”与“TEST AL, AL”?

    测试 AL 中的字节是否为零 非零通常哪个更快 TEST EAX EAX TEST AL AL 假设之前有一个 MOVZX EAX BYTE PTR ESP 4 指令加载了一个带有零扩展的字节参数到 EAX 的其余部分 防止了我已经知道的组
  • 寄存器寻址模式与直接寻址模式

    我在试卷中遇到过这个问题 它指出 哪种给定的寻址模式更快 为什么 寄存器寻址方式 直接寻址方式 现在根据我的说法 寄存器寻址模式应该更快 因为寄存器是计算机中最快的存储位置 这是正确答案吗 请帮忙 谢谢 两种寻址模式之间的区别是 地址的来源
  • AVX-512CD(冲突检测)与原子变量访问有何不同?

    所以我在看他们展示了如何 void Histogram const float age int const hist const int n const float group width const int m const float o
  • 阴影空间示例

    EDIT 我接受了下面的答案 并添加了我自己的代码的最终修订版 希望它向人们展示影子空间分配的实际示例 而不是更多的文字 编辑 2 我还设法在 YouTube 视频 所有内容 的注释中找到了一个调用约定 PDF 的链接 其中有一些关于 Li
  • 如何将 x86 GCC 风格的 C 内联汇编转换为 Rust 内联汇编?

    我在 C 中有以下内联汇编 unsigned long long result asm volatile byte 15 byte 49 shlq 32 rdx orq rdx rax a result rdx return result
  • 设置 IRQ 映射

    我正在遵循一些教程和参考文献来尝试设置我的内核 我在教程中遇到了一些不熟悉的代码 但根本没有解释它 这是我被告知映射的代码16 IRQs 0 15 到 ISR 地点32 47 void irq remap void outportb 0x2
  • 这个反斜杠在这段汇编代码中起什么作用?

    我不确定这些推线有什么区别 修剪下来来自 Linux 的 x86 entry calling h https github com torvalds linux blob 241e39004581475b2802cd63c111fec43b
  • 如何在程序中将自己缝合到自己的尾部,无限循环地封装 64KB 代码段?

    如果指令的顺序执行经过偏移量 65535 则8086将从同一代码段中的偏移量 0 处获取下一个指令字节 接下来的 COM 程序利用这一事实 不断将其整个代码 总共 32 个字节 缝合到自己的尾部 环绕在 64KB 代码段中 你可以称之为二元
  • 在 x86 程序集中存储大量布尔值的最佳方法是什么?

    最近我一直在处理充满布尔值的大型数组 目前 我将它们存储在 bss部分有一个 space指令 它允许我创建字节数组 但是 由于我只需要存储布尔值 因此我希望从数组中逐位读取和写入数据 目前 我能想到的最好方法是有一个 space指令所需存储
  • 为什么我的代码显示垃圾?

    当我也想打印列表中的每个数字时 我的代码显示垃圾 有什么问题吗 输出应如下所示 给定的数组是 2G 4 PT为什么这是垃圾总数是 7 Code ASSUME CS CODE DS DATA SS STK ORG 0000H DATA SEG
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • LC3 LEA指令和存储的值

    我对这个问题感到困惑 指令后寄存器0中存储的值是多少 LEA R0 A 被处决了吗 为什么答案是x370C 我认为应该将A的地址加载到R0中 如果是这样我们怎么知道地址 有人可以帮忙吗 非常感谢 ORIG X3700 LEA R0 A LD
  • 错误 LNK2019:函数 main 中引用的外部符号无法解析

    我正在尝试在 C 中运行我的简单汇编代码 我只有两个文件 cpp 文件和 asm 文件 编译时出现错误 见下文 如果有人可以提供帮助 我将不胜感激 这是我的 main cpp 文件 include
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 为什么在展开的 ADD 循环内重新初始化寄存器会使其运行速度更快,即使循环内有更多指令?

    我有以下代码 include
  • 整数溢出问题

    我不断遇到整数溢出问题 我不知道如何解决它 有人可以帮忙吗 edx 包含 181 eax 包含 174 xor eax edx mov edx 2 div edx 假设你谈论的是x86 div edx这实际上没有意义 32位div将edx
  • movzbl(%rdi, %rcx, 1), %ecx 在 x86-64 汇编中意味着什么?

    我想我明白 movzbl rdi rcx 1 ecx 意思是 将零扩展字节移至长整型 并表示将 ecx 扩展为 32 位 但我不完全确定语法 rdi rcx 1 指的是什么 我在某处看到该语法指的是 Base Index Scale 但我找
  • 英特尔的最后分支记录功能是英特尔处理器独有的吗?

    最后分支记录是指存储与最近执行的分支相关的源地址和目标地址的寄存器对 MSR 的集合 它们受英特尔酷睿 2 英特尔至强和英特尔凌动处理器系列的支持 http css csail mit edu 6 858 2012 readings ia3
  • Grub 和进入实模式(低级汇编语言编程)

    我一直在开发一个玩具操作系统 并一直使用 grub 作为我的引导加载程序 最近尝试使用 VGA 时 我发现无法使用硬件中断 我发现这是因为我被 grub 置于保护模式 有人知道如何在不删除 grub 的情况下回到实模式吗 如果您使用 GRU
  • SSE:跨页边界的未对齐加载和存储

    我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道

随机推荐

  • Facebook feed 对话框:允许用户选择目标页面或组

    我通过 JavaScript 使用 Facebook 提要对话框 var p method feed name Title caption Subtitle 26 02 2013 description My text link windo
  • PostgreSQL 查询性能不佳

    更新 我突然想到 pgAdmin是否有可能计算的不是查询的实际时间 而是在网格中绘制结果所需的时间 我只是使用命令行 psql 执行查询并将结果输出到 txt 文件中 速度非常快 最多 1 2 秒 在这种情况下 问题不是 postgresq
  • 如何在iOS上的某个帧中显示GIF,直到完全加载后才显示,并允许缩放?

    当用户选择 GIF 时 我想在显示 GIF 的所有内容之上呈现一个叠加层 我知道 iOS 上有几种方法可以做到这一点 那里有伟大的UI图像 GIF动画它工作得很好 但对于较长的 GIF 它们非常慢 并且不能以与 UIWebView 相同的速
  • jQuery - 单击按钮时增加计数器的值

    我正在制作一个系统 用户单击按钮 他们的分数就会增加 有一个计数器 我想在单击按钮时增加使用 jQuery 的值 以便页面不需要刷新 我该怎么办呢 update 是按钮 counter 是计数器 在 php 中 增加了某些东西的价值 等效的
  • 为什么将 JavaScript 放在页面的页脚中?

    所以我最近从 ThemeForest 购买并下载了一个模板 我在本地服务器上设置了模板 我使用 codeigniter 生成了带有下拉菜单的导航 我已经正确编码了菜单中的所有内容 我只生成了标题并对其进行了测试 并意识到下拉菜单不起作用 我
  • 如何用html写小数值?

    我想写分数值 如下图 如何在不使用图像的情况下使用 html 编写分数值 注意 我不想要这个 1 1 2 图案 但严格如上图所示 请尝试以下操作 1
  • 象征崩溃

    我使用以下脚本来表示我从用户那里得到的崩溃报告 Developer Platforms iPhoneOS platform Developer Library Xcode Plug ins iPhoneRemoteDevice xcodep
  • 如何在 Xamarin 中更改 MasterMainPage 的导航栏颜色

    我正在构建一个 Xamarin 跨平台应用程序 问题是我想改变颜色NavigationBar of MainPage这是MasterPage里面有一个抽屉菜单 我尝试使用此代码来更改颜色 但导航栏上出现了一个我不想要的额外栏 应用程序 xa
  • Haskell 中给定种子的随机数质量

    我正在玩一个小型 ascii 游戏中的程序生成 并且在 haskell 中遇到了随机数的问题 基本思想是提供一个随机数 该随机数以游戏世界某些部分的 x y 为种子 例如确定那里是否有一棵树 这家伙解释得很好 这是我为每一代尝试不同的种子时
  • Intellij IDEA:如何更改组织导入功能

    我想知道如何避免让 IntelliJ IDEA 自动将包的所有类与 例如 假设我导入了以下类 import java util Arrays import java util Scanner import java util Collect
  • Pyyaml:修改aws-auth-cm.yaml,保留多行字符串

    我正在尝试在 python 中加载 YAML 文件 修改它并将其转储回来 YAML 看起来像这样 data mapRoles username system node EC2PrivateDNSName groups system boot
  • 是否有一个函数接受一个列表并返回该列表中重复元素的列表?

    是否有一个 Haskell 函数接受一个列表并返回该列表中重复 冗余元素的列表 我知道nub and nubBy功能 但它们remove重复项 我想保留这些受骗者并将它们收集在一个列表中 是否有一个 Haskell 函数接受一个列表并返回该
  • 在另一个源代码控制项目中引用源代码控制项目(使用 TFS)

    我有三个VS解决方案 人力资源解决方案薪资解决方案 和一个主网站 外壳 人力资源是一个解决方案 也是一个团队项目 工资单是相同的 主网站 Shell 也是如此 我需要的是引用人力资源解决方案中的 外壳 以及工资单 这在TFS中可能吗 如果是
  • 我的处理器的汇编指令集

    亲爱的大家 我认为这是一个简单的问题 如何找到适合我的处理器的指令集 proc cpu给我 一个普通的CPU processor 0 vendor id GenuineIntel cpu family 6 model 23 model na
  • 如何在 ios 中使用 Facebook SDK 检索朋友的生日?

    我已经实施了FBFriendPickerDelegate在我的 h 文件中并使用以下委托来检索信息 BOOL friendPickerController FBFriendPickerViewController friendPicker
  • 我收到“语法错误,意外的 T_VARIABLE”错误。我不明白我做错了什么?

    我收到此错误 PHP 解析错误 语法错误 var www vhosts 中第 66 行出现意外的 T VARIABLE 这是我的代码 function combine charArr k currentsize sizeof charArr
  • 如何限制 UIDatePicker 视图中的日期?

    大家好 谁能帮我弄清楚如何限制最短日期UIDatePickerView 我尝试设置属性minumumDate from xib文件 但它不起作用 即使我这样设置模式 datePicker setDatePickerMode UIDatePi
  • UITableView不会滚动到特定位置

    self tableView setContentOffset CGPointMake 0 48 animated NO 我有一个 UITableView 标题中有一个 UIView 我的 UITableView 不会滚动到 0 48 除非
  • 如何使用plotlyexpress创建热图动画?

    我有一个方阵列表 M t 其中 t 的范围从 0 到 N 我希望使用plotly express 创建动画热图 每行 列中的条目对应一个列表 a a1 a2 aN 关于动画的情节文档相当稀疏 仅关注散点图和条形图 https plotly
  • 我可以使用 rsp 作为通用寄存器吗?

    有人告诉我如果我使用rsp作为通用寄存器 操作系统可能会在发生中断时将寄存器转储到它指向的位置 从而导致出现问题的行为 这是真的吗 如果不是的话 如果我不需要堆栈 我可以使用rsp作为通用寄存器 编辑 在用户空间中运行 如果发生中断 你不会