/TSAWARE 链接器标志对 PE 可执行文件有什么作用?

2024-03-11

将 /TSAWARE 链接器标志添加到我的一个项目 (Visual Studio 6) 后,我惊讶地发现 PE 文件 (.idata) 中出现了一个新部分。如果我不设置该标志,导入将合并到 .rdata 中。

为了说明“问题”,我们从一个简单的控制台程序开始:

#include <stdio.h>
int main() 
{
    printf("hello world\n");
    return 0;
}

并编译:cl /Og /O1 /GF /WX /c main.c

然后链接到

  • link /MACHINE:IX86 /SUBSYSTEM:CONSOLE /RELEASE /OUT:a.exe main.obj
  • link /MACHINE:IX86 /SUBSYSTEM:CONSOLE /RELEASE /OUT:b.exe /TSAWARE main.obj

让我们比较一下 dumpbin 的输出:

Dump of file a.exe

File Type: EXECUTABLE IMAGE

  Summary

        4000 .data
        1000 .rdata
        5000 .text

Dump of file b.exe

File Type: EXECUTABLE IMAGE

  Summary

        4000 .data
        1000 .idata
        1000 .rdata
        5000 .text

因此,由于某种原因,链接器决定不能合并导入。

但如果我们跑editbin /TSAWARE a.exe仅 PE 可选标头中的 DLL 特征字段发生变化。

谁能向我解释一下吗?这是链接器中的错误还是由 editbin 更改的可执行文件最终无法在某些系统上运行?


只是一个猜测:在终端服务器系统上,您希望图像尽可能写入几页。如果与该图像相对应的内存页没有被修改,则物理RAM的单页可以被映射到正在使用该图像的eash会话中。如果修改了映像中的页面,则系统必须为所有会话中页面的每个实例执行写时复制操作,并使用不同的物理内存块来表示每个会话中的页面。

由于如果必须重新定位正在导入的 DLL,则通常需要修复图像的导入,因此保存导入的页面通常会被修改,因此无法参与会话之间的共享。如果链接器将导入与通常不修改的其他数据合并,则可能会不必要地增加写时复制页的数量。

这可能是一种优化,有助于减少跨会话复制页面的数量。

就像我说的——这纯粹是一个猜测。

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

/TSAWARE 链接器标志对 PE 可执行文件有什么作用? 的相关文章

  • 使用 BitmapEncoder 生成时如何使 GIF 循环重复

    我能够使用 BitmapEncoder C WinRT 创建动画 gif 但是 我一直无法弄清楚如何让GIF循环回来并从头开始 没有尝试太多 因为我不确定要尝试什么 搜索了更多要在 GIF 上设置的属性 但找不到任何相关内容 好吧 终于能弄
  • PostgreSql“运行安装后步骤...数据库集群初始化失败”

    我是一名 Windows 用户 我花了几个小时不断地安装和卸载 然后才使其正常工作 前 10 次左右才看到标题中的错误消息 我将其作为一个自我回答的问题放在这里 以防止其他人在安装时可能遇到同样的问题 并为像我这样第一次使用 Postgre
  • 使用 Windows 批处理文件在文本文件中添加新行

    我有一个文本文件 其中有 200 多行 我只想在第 4 行之前添加一个新行 我使用的是 Windows XP 输入前的示例文本文件 header 1 header 2 header 3 details 1 details 2 输出后 hea
  • 将文件夹中的所有文件及其所有子文件夹移动到一个大文件夹中 - windows xp

    我有一个文件夹 c downloads ffme 里面有很多子文件夹 每个子文件夹中都有不同数量的文件 我想将所有这些单独的文件合并到一个大文件夹中 同时将它们从子文件夹中删除 我希望最终得到一个包含大量文件的文件夹 但没有子文件夹 我怎样
  • 从 Python 下载/安装 Windows 更新

    我正在编写一个脚本来自动安装 Windows 更新 我可以将其部署在多台计算机上 这样我就不必担心手动更新它们 我想用 Python 编写这个 但找不到任何关于如何完成此操作的信息 我需要知道如何搜索更新 下载更新并从 python 脚本安
  • 在运行时,我如何判断我是否在 WinXP+ 上? win32

    我正在进行一些 win32 字符串 API 调用 并假设字符串以宽字符串形式出现 这在 XP 和更高版本上有效 我该如何断言这一点 这是运行时检查还是编译时检查 我做错了吗 这是一个例子 typedef std basic string
  • Jenkins 可以检测到任何 svn 用户每次提交代码吗?

    Jenkins 可以检测到任何 svn 用户每次提交代码吗 我想知道每次 Jenkins 提交 svn user 时 有什么方法或 jenkins 插件吗 现在我用svn updateJenkins 中的 cmd 来更新 svn 您可以按照
  • 串行 I/O 与 Windows/Windows CE 重叠/不重叠

    抱歉 这不是一个大问题 但更多的是帮助那些在这些特定问题上遇到问题的人 我正在解决的问题需要使用串行 I O 但主要在 Windows CE 6 0 下运行 然而 最近有人问我该应用程序是否也可以在 Windows 下运行 所以我开始着手解
  • 通过不同 DLL 或 EXE 中的指针或引用访问 STL 对象时发生访问冲突

    我在使用旧版 VC6 时遇到以下问题 我只是无法切换到现代编译器 因为我正在处理遗留代码库 http support microsoft com kb 172396 http support microsoft com kb 172396
  • VB - 以隐式方式链接 DLL

    我正在开发 VB6 图形界面 并且需要隐式链接到 DLL 这样做的动机来自于我上一个问题 https stackoverflow com questions 5194573 有问题的 DLL 使用静态 TLS declspec thread
  • 在头文件中声明和定义并仅在其 cpp 文件中使用的变量存在多重定义错误

    我正在将为一个芯片编译而编写的代码移动到另一芯片上 出现的一个问题是存在大量的多重定义错误 其中一些似乎是由于第一个芯片的链接器让我在跨多个源文件使用变量时懒于声明变量 extern 我以前根本没有使用 extern 在 Something
  • 什么是WINVER?

    我正在查看一些代码 他们有这一行 define WINVER 0x0501 in stdafx h文件 为什么需要定义WINVER 它如何影响您的代码 有人可以解释一下吗 WINVER 确定构建应用程序所需的最低平台 SDK 这反过来又会在
  • 如何使用Python在Django for Windows中激活虚拟环境?

    我被告知要在 Django for Windows 中激活虚拟环境 我应该尝试 environment path Scripts activate 但是当我输入该命令时 cmd 返回此错误 该系统找不到指定的路径 我通过输入以下命令创建了虚
  • Windows 上的递归移动命令

    我需要做一个 sh 的 bat 副本 我不太了解 Windows cmd 在 Linux 上我可以做 mv or rsync a SOURCE DEST remove sent files ignore existing whole fil
  • “printf”在 Windows 非控制台应用程序中写入何处?

    如果我选择创建 Windows 非控制台应用程序 并实施printf cout在代码中 在哪里printf cout写 它是否写到stdout缓冲 如果是 有什么办法可以读取它stdout并将其打印到某个文本文件或执行MessageBox与
  • 如何在 Windows 下向 .sh 脚本传递参数?

    我正在尝试在 Windows 下执行 sh 脚本 我安装了 Git 它允许我执行 sh 文件 但是 如果不使用 sh 作为执行前缀 我似乎无法传递任何参数 我的 sh 文件 echo Test 1 如果我用以下命令执行它 gt sh tes
  • 如何为 Windows 构建静态 Qt 库并将其与 Qt Creator 一起使用

    我已经下载了以下 Qt 源 http download qt nokia com qt source qt everywhere opensource src 4 7 3 zip http download qt nokia com qt
  • 什么是 SO_SNDBUF 和 SO_RCVBUF

    你能解释一下到底是什么吗SO SNDBUF and SO RCVBUF选项 好的 出于某种原因 操作系统缓冲传出 传入数据 但我想澄清这个主题 他们的角色 通 常 是什么 它们是每个套接字的缓冲区吗 传输层的缓冲区 例如 TCP 缓冲区 和
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF
  • 用于推送通知的设备令牌

    我正在实施推送通知服务 我需要创建一个数据库来存储 4 个移动平台的所有设备令牌 我想根据他们的平台 iOS Android BlackBerry WP7 来组织它们 但是有什么方法可以区分平台 这样如果我只想向 Android 用户发送消

随机推荐

  • 是否可以阻止 textDocumentProxy “分割”​​表情符号?

    我目前正在为 iOS 开发第三方键盘 并遇到了一个小烦恼textDocumentProxy我希望你们能够帮助我 所以我定义了以下两个变量 并将其打印到控制台 selectedContextAfterInput textDocumentPro
  • C++11:使用 std::function::target() 指向成员函数的指针

    我知道这已经是一个讨论已久的话题 但我还找不到令我满意的答案 简而言之 问题是 即使使用 C 11 的 function target 功能 是否也无法将成员函数指针传递给 c 风格的方法 以下代码将不起作用 对 mbf target 的调
  • 如何使用系统对话框图标加载图像列表

    如何加载TCustomImageList对话框中 Windows 使用的所有系统图标 标准图标 如警告 错误 信息 确认 我想找到一个适用于 Windows XP 及更高版本的解决方案 See LoadImage https msdn mi
  • Perl 中的 $dxyabc 和 ${dxyabc} 有什么区别?

    字符串定义有什么区别 dxyabc和字符串 dxyabc 在 Perl 中 嗯 这取决于上下文 例如 foo dxyabcdef bar dxyabc def foo将具有以下价值 dxyabcdef代替 dxyabc附加有def 这是的值
  • 在字符串内使用带有 LESS 的函数

    我搜索了文档和 SO 但找不到我的查询的答案 使用 LESS 将函数结果包含在字符串中的正确方法是什么 例如 我定义了一个变量 并希望将其变亮以形成盒子阴影 例如 这就是我想做的事情 box shadow inset 0 1px 1px r
  • AngularJS:如何模拟注入范围内的 FormController?

    我在控制器内部发生了一些验证逻辑 我想对该逻辑进行单元测试 问题是我不知道如何模拟自动注入范围的表单控制器 任何想法 AFAIK 你可以尝试两种方法 use the compile服务 并使用适当的方法编译您的模板 scope 别忘了所有
  • 使用 knitr 制作动画 rgl 图表

    我想加入动画rgl我的图表 Rnw文档通过knitr 这是我的 MWE documentclass article lt lt label setup include FALSE gt gt opts chunk set fig path
  • 如何根据视图边界在Cesium Map中向左或向右旋转

    想要模仿 CesiumJS 应用程序中的左右箭头键 类似于 Google 地球导航 按向右或向左箭头键应分别向右或向左旋转地球约 5 的视图边界 如果缩小 则旋转较大范围 而放大则旋转较小范围 已经查看了文档Viewer https ces
  • C# 延迟初始化 && 竞争初始化?

    After about LazyInitializer那是 它提供了另一种具有多线程的初始化模式 竞赛初始化 这是一个示例 Expensive expensive public Expensive Expensive get Impleme
  • flex-direction 列属性不起作用

    我有一个ul标记为display flex 我需要按列排序flex direction column 但它不起作用 容器的 CSS nav li four columns ul sub menu width 600px display fl
  • Emacs:与 TAB 的键绑定会破坏迷你缓冲区中的自动完成功能

    简而言之 我只是在 TAB 键上设置了键绑定 但是现在当我将 TAB 推入迷你缓冲区以自动完成命令时 它会失败并显示以下消息 The mark is not set now so there is no region 换句话说 当我的光标位
  • 任务“:audioplayers:compileDebugKotlin”执行失败

    当我尝试将我的 Flutter 应用程序编译到 Android 模拟器中时 我遇到了这个讨厌的错误 这是错误日志 太长 无法完整粘贴 在调试模式下在 sdk gphone x86 上启动 lib main dart 运行 Gradle 任务
  • 将 Sqlite 数据导入 Google App Engine

    我有一个相对广泛的 sqlite 数据库 我想将其导入到我的 Google App Engine python 应用程序中 我使用 appengine API 创建了模型 该模型与现有架构很接近 但并不完全相同 我编写了一个导入脚本来从 s
  • 将一个 UIView 的绘制内容复制到另一个 UIView

    我想采用 UITextView 并允许用户在其中输入文本 然后触发将内容复制到石英位图上下文上 有谁知道我如何执行此复制操作 我应该重写drawRect方法并调用 super drawRect 并且then获取生成的上下文并复制它 如果是这
  • 是否可以在 phpmyadmin 中分页浏览视图? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 运行 phpmyadmin 版本 3 4 8 我刚刚注意到 显示视图时没有 分页 按钮 可以让您像浏览表格一样跳转到下一页或最后一页 我知
  • Mvc Api 从请求中获取凭据

    我花了很长时间才找到这方面的东西 尽管我认为这很简单 我正在使用 NET MVC 4 5 开发 API 我希望最终用户能够发送类似 PowerShell 的请求 webclient new object System Net WebClie
  • 如何解决AdjustCapsLockLEDForKeyTransitionHandling问题?

    我正在尝试使用KeyListener输入信息 例如使用箭头键在平面上移动对象 但是一旦我按下第一个键 就会抛出以下错误 2021 05 20 09 55 35 400 java 36269 3330310 TSM AdjustCapsLoc
  • SwiftUI TabView PageTabViewStyle 阻止更改选项卡?

    我有一个TabView在 SwiftUI 中PageViewTabStyle这样我就可以从一页滑动到另一页 我想要一个设置来 锁定 当前视图 这样用户就无法滑动 谷歌搜索和阅读文档并没有给我带来任何明显的结果 所以我希望 SO 上的专家可以
  • setTimeout 的最小毫秒值是多少?

    我想把 var minValue 0 if typeof callback function setTimeout callback minValue 当我用 JavaScript 实现回调函数时 这段代码 但我发现现代浏览器和一些旧浏览器
  • /TSAWARE 链接器标志对 PE 可执行文件有什么作用?

    将 TSAWARE 链接器标志添加到我的一个项目 Visual Studio 6 后 我惊讶地发现 PE 文件 idata 中出现了一个新部分 如果我不设置该标志 导入将合并到 rdata 中 为了说明 问题 我们从一个简单的控制台程序开始