无全球运营商的裸机 new

2024-01-18

考虑安全软件,其中一般不允许动态分配并且不允许例外。仅当类显式定义运算符时才允许动态分配new and delete。使用运算符new对于其他类应该会导致编译失败。

在上述情况下导致编译失败的最简单方法是删除全局 new 运算符:

void* operator new(std::size_t) = delete;

一方面,这会对标准库造成副作用。例如包括<array>将包容性传播到<new_allocator> by <stdexcept>. <new_allocator> uses ::new运算符,即使您不想使用异常和内存分配,这也会导致构建失败。根据斯科特·迈耶斯的说法<array>应该是裸机友好的。

另一方面,这会导致编译器内置运算符出现错误

src/main.cpp:91:31: error: deleted definition of 'void* operator new(std::size_t)'
 void* operator new(std::size_t) = delete;                               ^
<built-in>: note: previous declaration of 'void* operator new(std::size_t)'

有什么办法可以禁止::new并使用<array>?

有什么办法可以禁止::new全球at all?


如果你使用 GCC 和 GNU LD,那么我想你可以添加--wrap=malloc到你的链接器标志。作为全球::new uses malloc()在内部,所有调用malloc()您的应用程序中将替换为__wrap_malloc()。如果该函数未定义,则链接将失败。

另一个可能更简单的选择是添加ASSERT(DEFINED(malloc) == 0, "Dynamic allocation used!");到您的链接器脚本。这将断言malloc()没有定义。

这些选项都不能保护您重新定义全局::new使用某种其他形式的全局分配。您可以对全局符号执行相同的操作::new在链接器脚本中,但它的名称被破坏了(在这里_Znwj),所以这会有点奇怪......

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

无全球运营商的裸机 new 的相关文章

  • C# 创建函数队列

    我写了一个名为 QueueManager 的类 class QueueManager Queue functionsQueue public bool IsEmpty get if functionsQueue Count 0 return
  • SharpZipLib - 将文件夹/目录添加到 zip 存档

    通过示例 我很好地掌握了如何提取 zip 文件 几乎在每个示例中 识别 ZipEntry 是否为目录的方法如下 string directoryName Path GetDirectoryName theEntry Name string
  • 键盘加速器在 UWP 应用中停止工作

    我正在尝试将键盘加速器添加到 UWP 应用程序中的 CommandBar 菜单项 当应用程序启动时 这工作正常 但在我第一次打开溢出菜单后 加速器停止工作 这似乎不会发生在主要命令 菜单之外 上 只有溢出菜单内的辅助命令才会发生 此外 单击
  • 使用 OpenGL 着色器进行数学计算 (C++)

    我有一个矩阵 例如 100x100 尺寸 我需要对每个元素进行计算 matrix i j tt 8 5例如 我有一个巨大的矩阵 我想使用 OpenGL 着色器来实现该算法 我想使用着色器 例如 uniform float val unifo
  • 为什么这个函数指针赋值在直接赋值时有效,但在使用条件运算符时无效?

    本示例未使用 include 在 MacOS10 14 Eclipse IDE 上编译 使用 g 选项 O0 g3 Wall c fmessage length 0 假设这个变量声明 int fun int 这无法通过 std touppe
  • 如何在 Asp.net Gridview 列中添加复选框单击事件

    我在 asp 中有一个 gridview 其中我添加了第一列作为复选框列 现在我想选择此列并获取该行的 id 值 但我不知道该怎么做 这是我的 Aspx 代码
  • Paradox 表 - Oledb 异常:外部表不是预期的格式

    我正在使用 Oledb 从 Paradox 表中读取一些数据 我遇到的问题是 当我将代码复制到控制台应用程序时 代码可以工作 但在 WinForms 中却不行 两者都以 x86 进行调试 我实际上只是复制代码 在 WinForms 应用程序
  • 存储过程上的 OdbcCommand - 输出参数上出现“未提供参数”错误

    我正在尝试执行存储过程 通过 ODBC 驱动程序针对 SQL Server 2005 但收到以下错误 过程或函数 GetNodeID 需要参数 ID 但未提供该参数 ID 是我的过程的 OUTPUT 参数 在存储过程中指定了一个输入 mac
  • 单线程公寓问题

    从我的主窗体中 我调用以下命令来打开一个新窗体 MyForm sth new MyForm sth show 一切都很好 但是这个表单有一个组合框 当我将其 AutoCompleteMode 切换为建议和追加时 我在显示表单时遇到了这个异常
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0”

    我究竟做错了什么 我该如何解决这个问题 我有一个包含多个项目的解决方案 它是一个 MVC NET 4 5 Web 应用程序 在调试模式下启动后调用其中一个项目时 出现此错误 导致此错误的项目具有以下参考 两个都是版本6 0 0 0 应用程序
  • 您可以在一个 Windows Azure 实例上部署多个 Web 应用程序吗?

    是否可以在一个 windows azure 小型计算实例中运行一堆 Web 应用程序 我正在考虑使用 Azure 作为放置一堆处于开发和非生产状态的项目 Web 应用程序 的地方 有些实际上已经被封存了 但我想在某个地方有一个活跃的实例 我
  • 更改 IdentityServer4 实体框架表名称

    我正在尝试更改由 IdentityServer4 的 PersistedGrantDb 和 ConfigurationDb 创建的默认表名称 并让实体框架生成正确的 SQL 例如 而不是使用实体IdentityServer4 EntityF
  • 系统错误 124 - SHFileOperation 的 ERROR_INVALID_LEVEL

    我在使用时遇到问题SHFileOperation SHFileOperation SHFILEOPSTRUCT https stackoverflow com questions 9191415 shfileoperation shfile
  • 设计 Javascript 前端 <-> C++ 后端通信

    在我最近的将来 我将不得不制作一个具有 C 后端和 Web 前端的系统 要求 目前 我对此了解不多 我认为前端将触发数据传输 而不是后端 所以不需要类似 Comet 的东西 由于在该领域的经验可能很少 我非常感谢您对我所做的设计决策的评论
  • 使用 foreach 循环和 XmlNodeList C# 将新节点附加到节点列表

    目前我处理的是这样的XML类型 XML FILE http 20drive google com open id 0By5BxgNi9eGcRldxcEZNU0FDTzQ 参考XML文件 我想检查一个节点 如果找不到该节点 我必须将该节点附
  • 纯虚函数可能没有内联定义。为什么?

    纯虚函数是那些虚函数并且具有纯说明符 0 第 10 4 条第 2 款C 03 的内容告诉我们什么是抽象类 顺便说一句 如下 注意 函数声明不能 同时提供纯说明符和定义 尾注 示例 struct C virtual void f 0 ill
  • ASP.NET Core Razor Page 多路径路由

    我正在使用 ASP NET Core 2 0 Razor Pages 不是 MVC 构建系统 但在为页面添加多个路由时遇到问题 例如 所有页面都应该能够通过 abc com language 访问segment shop mypage 或
  • 启动画面后主窗口出现在其他窗口后面

    我有一个带有启动屏幕的 Windows 窗体应用程序 当我运行该应用程序时 启动屏幕显示正常 消失并加载应用程序的主窗体 但是 当我加载主窗体时 它出现在包含该应用程序的 Windows 资源管理器目录下 这是运行启动画面然后运行主窗体的代
  • FindAsync 很慢,但是延迟加载很快

    在我的代码中 我曾经使用加载相关实体await FindAsync 希望我能更好地遵守 C 异步指南 var activeTemplate await exec DbContext FormTemplates FindAsync exec

随机推荐

  • ArrayAdapter:按索引删除

    我有一个 ListView 其中填充了新闻服务器概要 只是故事列表 和一个用于修改该 ListView 的 arrayAdapter 我可以通过 remove Object 函数删除项目 但是如果有多个 Object 实例怎么办 remov
  • VssUnauthorizedException VS30063 您无权访问突然抛出错误

    我有以下使用 VSTS 客户端 API 的代码 该代码可以正常工作 但现在返回错误 Microsoft VisualStudio Services Common VssUnauthorizedException VS30063 您无权访问h
  • 卡夫卡偏移量管理

    我们正在使用 Kafka 0 10 我在网上 和文档中 看到了一些相互矛盾的信息 这些信息涉及当enable auto commit 为 TRUE 时如何在 kafka 中管理偏移量 检索消息的同一个 poll 方法是否也按配置的时间间隔处
  • 在 NumPy 中使用字符串作为数组索引

    我正在通过 GUI 处理 python 中的大型数值数组 我想将切片功能公开给 GUI 中的文本框 这样我就可以轻松选择用于手头计算的数组部分 我想做的简单例子 arr array 0 10 20 30 40 50 60 70 80 90
  • 如何确定 Android 应用程序是否使用可信执行环境 (TEE) 和安全元件 (SE)?

    我已经解决了问题One https stackoverflow com questions 61225795 how to check whether android phone supports tee 64422042 64422042
  • 如何在 Mongoose/Node.js 中同时保存多个文档?

    目前我使用保存来添加单个文档 假设我有一个文档数组 我希望将其存储为单个对象 有没有一种方法可以通过单个函数调用将它们全部添加 然后在完成后获得单个回调 我可以单独添加所有文档 但管理回调以计算一切何时完成将是有问题的 Mongoose 现
  • Laravel VueJs:“router-view”不渲染组件

    我知道这个网站上有这样的问题 但它们并不能解决我的问题 因此这里出现了这个问题 在我的 Laravel 5 3 和 VueJs 应用程序中 Vue 的根实例位于app js文件指向App vue and in App vue我有router
  • 在 Google App Engine 上返回空列表在开发服务器上和部署时的行为有所不同

    我创建了一个返回项目列表的端点 当列表为空时 我希望在 JSON 中看到一个空列表 但列表字段被省略了 这不是开发服务器上发生的情况 Ex ApiMethod name udinic path udinic public List
  • 如何给盒子一个圆形描边?

    这就是我最终给我的jetpack Compose盒子一个圆角形状的方式 Box modifier Modifier size 32 dp clip CircleShape border BorderStroke 2 dp Color Red
  • Child_process 和 Worker Threads 有什么区别?

    我试图理解ThreadingNodeJS 及其工作原理 目前我的理解是 Cluster 构建在 Child process 之上 但 TCP 分布在集群之间 最适合分配 平衡传入的 http 请求 但不适合 CPU 密集型任务 通过利用 c
  • iPhone SDK 3.1.3 升级到 iPhone SDK 4 ApplicationWillTerminate 且未调用 dealloc

    我已将 iPhone SDK 从 3 1 2 升级到 4 我在之前版本中开发的应用程序运行良好 但只有一个问题 当我关闭应用程序时 它不会调用应用程序终止并释放任何内容 当我单击主页按钮时 应用程序退出 但当我再次打开它时 它会在我离开的位
  • 在 ASP.NET MVC 中,当使用正确类型的对象渲染页面时,我遇到了不正确的类型错误

    我正在使用 MVC Preview 5 开发一个应用程序 我使用了类型化视图 设置 debug false 后 我发现收到以下形式的错误 模型项目传递到 字典的类型是 blah Models UserAdmin IndexData 但是 这
  • 如何从C++程序调用Linux命令?

    我编写了以下简单的 C 程序 以便学习如何从 C 程序调用 Linux 命令 通过使用系统命令 请告诉我为什么 C 编译器会出现错误 我的程序出了什么问题 更多 exm2 cc include
  • 当位置不是整数时平滑过渡

    我正在尝试显示某种时间线 我的目标是让它顺利刷新 我设法使用 css 变换属性获得比绝对定位更好的东西 但我不太高兴 因为有一些闪烁 特别是当背景很暗时 var background document querySelector backg
  • 位字段是否比屏蔽位并手动提取数据更有效(在计算上)?

    我有许多小数据 我希望能够将它们放入一种更大的数据类型中 假设这是一个日期和时间 最明显的方法是通过像这样的位字段 struct dt unsigned long minute 6 unsigned long hour 5 unsigned
  • WordPress 添加新的用户挂钩

    我想添加一些自定义字段以在 Wordpress 中添加新用户 我正在使用以下钩子 show user profile edit user profile 这些挂钩在编辑个人资料页面上显示新的自定义字段 但我希望新的自定义字段显示在 添加新用
  • delphi 中子类化 TTreeNode 的问题

    我正在编写一个 delphi 2009 应用程序 它在对接面板上使用 TTreeView 我发现如果我对 TTreeNode 进行子类化 我可以在我的应用程序中进行很大的简化 它所在的树视图放置在对接面板上 TInfoTreeNode cl
  • 以编程方式创建 ShapeDrawable

    我试图以编程方式创建一个 ShapeDrawable 但以下代码没有显示任何内容 ImageView image new ImageView context image setLayoutParams new LayoutParams 20
  • ffmpeg rtsp解码缓冲区太小

    我在 Android 上使用 ffmpeg 解码 rtsp 当图像快速更新或高分辨率时 我很快就会看到像素化 经过谷歌搜索 我发现它可能与UDP缓冲区大小有关 然后我在 ffmpeg libavformat udp c 中使用以下参数重新编
  • 无全球运营商的裸机 new

    考虑安全软件 其中一般不允许动态分配并且不允许例外 仅当类显式定义运算符时才允许动态分配new and delete 使用运算符new对于其他类应该会导致编译失败 在上述情况下导致编译失败的最简单方法是删除全局 new 运算符 void o