`__asm nop` 在 Windows 中相当于 GCC 编译器中的 `asm volatile("nop");`

2024-04-20

在 Windows 中,可以__asm nop被交换为asm volatile("nop");(在 GCC 编译器中使用)并产生相同的结果?

我读过volatile()(在 GCC 中)保证调用不会被优化掉。然而,它不能直接移植到 Windows,我很好奇它是否可以简单地删除或者是否需要用类似的结构替换。


The __asmMSVC 中关键字的实现非常简单。它始终发出未更改的机器代码,并且优化器不会触及它。它也不对 __asm 之后的机器状态做出任何假设,这有击败其他优化的技巧。

所以,不,没有什么类似的volatile()是必须的,不能消失。清楚的__asm { nop }永远会安然无恙,相当于GCC大会。

请记住,内联汇编并不是一个好的长期策略,对它的支持在 x64 编译器中已被完全删除,并且不太可能回来。您必须退回到以汇编语言编写并使用 ml64.exe 等程序进行编译的内在函数或链接代码。这确实击败了 NOP 注入,但是优化器已经很好地处理了代码对齐,并且不需要帮助。这也是您可能根本不应该这样做的原因。

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

`__asm nop` 在 Windows 中相当于 GCC 编译器中的 `asm volatile("nop");` 的相关文章

  • return 语句是否为按值返回的函数创建临时对象?

    当我学习 C 11 右值引用和移动语义时 我开始对函数如何返回值来初始化变量感到困惑 看下面的例子 Widget makeWidget Widget w return w Widget w1 makeWidget 这里我假设没有 RVO 即
  • 是否有一种快速替代方法可以从 XNA 中的位图对象创建 Texture2D?

    我环顾四周 发现从位图创建Texture2D的唯一方法是 using MemoryStream s new MemoryStream bmp Save s System Drawing Imaging ImageFormat Png s S
  • 是否已经有一些基于 std::vector 的 set/map 实现?

    对于小型集合或地图 通常使用排序向量而不是基于树的向量要快得多set map 特别是对于 5 10 个元素的情况 LLVM 有一些类本着这种精神 http llvm org docs ProgrammersManual html ds se
  • 正确别名向量

    我无法在其他地方找到答案 所以我想我只需要问这个 我正在尝试获取向量 其中存储 int 指针 的别名 如下所示 void conversion Engine ENGINES The Engine class has a vector of
  • 如何将 list 对象附加到另一个对象

    在 C 中 我有两个list
  • 将 CryptoStream 解密为 MemoryStream

    我编写了一个过程 其中文件被加密并上传到 Azure 然后必须解密下载过程 这会失败并出现 填充无效且无法删除 错误 或 要解密的数据长度为无效的 错误 我在网上尝试了很多解决方案 包括C 使用 RijndaelManaged 和 Cryp
  • JObject ToString 与 StringEnumConverter 不起作用

    我正在尝试序列化一个匿名类 如下所示 public enum ErrorCode A B C var response JObject FromObject new Error new Message Test Code ErrorCode
  • 在 Asp.net Web API 中处理 CORS 预检

    我的架构中有三个应用程序 它们位于同一服务器上 但具有不同的端口号 A Token Application port 4444 Asp net WebApi B API Application port 3333 Asp net WebAp
  • 这个对象的内存会是什么样子?

    我想知道这个类 它的对象 的内存布局是什么样的 class MyClass string myString int myInt public MyClass string str int i myString str myInt i MyC
  • 如何存储生成的格式化 C 字符串

    这是一个新手问题 为了创建格式化的 C 字符串 我使用printf like int n 10 printf My number is i 10 但是 怎么样 int n 10 char msg My number is i 10 prin
  • 将 size_t 变量添加到指针

    我想向指针添加 size t 类型 有些像这样 void function size t sizeA size t sizeB void pointer pointer malloc sizeA pointer pointer sizeB
  • 即使我确实为变量设置了初始值,数据段也没有被初始化

    我已经编写了一个代码 该代码应该生成某种数字列表 但是即使我为它们分配了初始值 我的数据段变量也没有被初始化 This is how DS 0000 looks when I run it 这是我的代码 但数据段只保留垃圾值 MODEL s
  • 实体框架..自引用表..获取深度=x的记录?

    我成功地在实体框架中使用自引用表 但我不知道如何获得所需深度的记录 这应该是什么逻辑 Model public class FamilyLabel public FamilyLabel this Children new Collectio
  • 更改子进程中的 iostream

    现在 我正在开发一个项目 其中我需要启动一个子进程来使用 C 在 Linux 中执行一个新程序 并且我需要重定向标准输入和输出 就像在 C 中一样 它们是cin and cout 到一个文件 这意味着在子进程中 标准输入和输出都是文件 子进
  • 拦截C# HttpClient GetAsync

    我有一个 Web 项目 C MVC5 但没有 WebAPI 和一个简单的 HTTP REST 客户端 该客户端调用外部 REST 服务并获取 accessToken 等 我想检查所有 Get PostAsync 调用对 statusCode
  • 使用 Entity Framework Core 在运行时迁移

    我正在将 PHP Illuminate 应用程序移植到 ASP NET Core EF Core 其中一部分由类似 Wordpress 的安装过程组成 该过程要求提供数据库凭据 然后创建应用程序运行所需的表 本质上 我想在运行时运行某种迁移
  • 宏中 do { } while(0) 与 ({ }) 的优点?

    Stack Overflow 上有很多关于使用的问题do while 0 在宏中 但这有点不同 我明白为什么do while 0 用于将多行代码包装在宏扩展中 但我经常看到另一种形式 The form 的优点是它是一个表达式并且可以有 返回
  • 如何在c#中打印全尺寸图像

    我正在尝试用 C 打印图像 它是由 Adob e Acrobat 从 PDF 创建的完整 8 5x11 尺寸的 tiff 当我使用下面的代码用 C 打印它时 它垂直打印正确 但水平打印不正确 水平方向被推了大约半英寸 我将图像的原点设置为
  • Windows 终端中的图标和背景图像字段无法识别父进程目录

    Windows 终端版本 1 12 10732 0 Windows 内部版本号 19043 1645 Issue 如果这个问题已经在其他地方得到解决 请原谅我 但我意识到当Use parent process directory被检查 Co
  • 我该怎么做才能完全关闭与mcu的tcpClient连接?

    我现在正在研究与 ESP32 中运行的 tcp 服务器的 tcp 套接字连接 通信工作正常 但我无法关闭连接 在搜索关闭 重置 tcpClient 上的解决方案后 似乎关闭 tcpClient 的正确方法应该是 tcpClient GetS

随机推荐

  • 升级到 MT 4.0 后不显示索引 TableView

    升级到 MT 4 0 后 以前在右侧边框上显示索引的 TableView 不再工作 表视图仍按部分显示并正常工作 但未显示索引 我在 UITableViewSource 中定义了这三种方法 并且这三种方法似乎都有效 public overr
  • 表更新事件处理程序

    我正在研究 AX 2012 中新委托和事件订阅模式的功能 目前我希望检测特定字段何时被修改 例如何时SalesTable SalesStatus更改为SalesStatus Invoiced 我创建了以下事件后处理程序并附加到 SalesT
  • 如何从 SQLAlchemy 映射对象中发现表属性

    我有一个与表映射的类 在我的例子中是以声明的方式 我想从这个类中 发现 表属性 列 名称 关系 engine create engine sqlite databasePath echo True setting up root class
  • virtualenv ImportError:没有名为 urllib3 的模块

    我在ubuntu上安装了virtualenv 但是 当我尝试创建 virtualenv 时 出现错误 我的 Zenv 文件夹不包含 activate 我该如何修复它 我会经常这样做 这是我第一次收到此错误 ubuntu ip 172 31
  • 从打包序列中获取每个序列的最后一项

    我试图通过 GRU 放置打包和填充的序列 并检索每个序列最后一项的输出 当然我的意思不是 1项目 但实际上是最后一个 未填充的项目 我们预先知道序列的长度 因此应该很容易为每个序列提取length 1 item 我尝试了以下方法 impor
  • 如何获取资产文件夹中图像的字符串路径

    我需要向第三方库传递存储在我的资产文件夹中的图像的路径 我读过一些答案 但没有一个有帮助 我努力了file android asset uk jpg但它不起作用 我需要向第三方库传递存储在我的资产文件夹中的图像的路径 没有路 您的资产不是文
  • 宁静的路线和 Django

    我正在将 Rails 项目迁移到 Django 中 Rails 项目是使用 Restful 路线构建的 它从不接触数据库 相反 它只是重定向到不同的方法 这些方法都使用指定的操作方法调用外部服务 现在 我已经找到了许多 django 框架
  • 渲染 selectManyCheckbox 而不使用 HTML 表

    有没有办法从渲染的html中删除由创建的表格h selectManyCheckbox服务器面孔中的标签 我正在使用 twitter bootstrap 并将复选框放置在下拉菜单中 ul class dropdown menu dropdow
  • Innosetup - 在安装开始之前引用[Code]中的文件

    这是一种延续这个问题 https stackoverflow com questions 5658488 adding a help button to an innosetup wizard page 我想将一个文件包含在我的安装包中 C
  • 在 Swift 中以编程方式创建 UITableViewController

    正如标题所示 我试图以编程方式设置 UITableViewController 经过几个小时的尝试 我希望有人可以帮助我 是的 我已经查看了有关此事的其他帖子 import UIKit class MainViewController UI
  • 导出为 pdf 在 ggplot2 中无法正确显示

    我有一个由 Fig NPK 和 Barchart fert 组成的复杂图形 P 它们是使用数据表 Fert 制作的 列包括 Vil N P 和 K 我的目标是创建一个pdf文件并使用ghostscript在pdf文件中嵌入 Times Ne
  • 从 Visual Studio 的哪个版本开始 vsnprintf 基本上符合标准?

    根据微软的文档vsnprintf https msdn microsoft com en us library 1kt27hek aspx 至少从 2003 版 Visual Studio 开始 该函数就是 C 运行时库的一部分 int v
  • word2vec中单词的向量代表什么?

    word2vec https code google com p word2vec 是 Google 的开源工具 它为每个单词提供一个浮点值向量 它们到底代表什么 还有一篇论文关于段落向量 http cs stanford edu quoc
  • 双指针作为函数参数

    我遇到过很多链表函数和 C 函数 它们打算将双指针而不是单指针传递给函数 例如 下面的函数用于在链表中排序插入 void sortedinsert struct node headref struct node newnode while
  • 如何发送http basic auth post?

    我的任务是使用基本身份验证创建 http 帖子 我正在 asp net MVC 应用程序中使用 C 进行开发 我也得到过这个例子 POST v2 token endpoint HTTP 1 1 Authorization Basic Y2x
  • 驻留内存与活动字节

    假设 我正在使用 Cocos2d 2 0 和 ARC 开发一个 iPhone 项目 并使用 XCode 4 5 2 的 Instruments 简短的问题 为什么驻留内存比活动字节高得多 我这样说是因为 使用仪器 我确实收到了内存不足的警告
  • 如何在节点redis客户端上设置读取超时?

    在 github 上我没有看到读取超时的选项 https github com NodeRedis node redis https github com NodeRedis node redis There s connect timeo
  • 使用“npm install”安装 jquery-ui

    我从这里看到https github com jquery jquery ui https github com jquery jquery uijquery ui 的最新版本是 1 11 4 但是 当我使用 npm install jqu
  • 为什么构造函数被调用两次

    我不明白怎么办constructors work 这里我声明了一个对象obj2 它调用构造函数abc 这完全没问题 但是当我分配时 obj2 100 为什么编译器允许将整数初始化为类对象 如果它允许的话 那么它是如何销毁对象的 然后是如何调
  • `__asm nop` 在 Windows 中相当于 GCC 编译器中的 `asm volatile("nop");`

    在 Windows 中 可以 asm nop被交换为asm volatile nop 在 GCC 编译器中使用 并产生相同的结果 我读过volatile 在 GCC 中 保证调用不会被优化掉 然而 它不能直接移植到 Windows 我很好奇