gpt4 book ai didi

c++ - Visual Studio 中生成的匿名命名空间变量的损坏名称的数字部分是什么意思?

转载 作者:行者123 更新时间:2023-11-28 04:16:00 26 4
gpt4 key购买 nike

我正在使用相同的源重新编译 C++ 二进制文件。操作系统为Windows Server 2008 R2,编译器为Microsoft Visual Studio 2005。

之后,我运行 dumpbin.exe/ALL/DISASM/RAWDATA:NONE 并比较输出。反汇编没有区别,但匿名 namespace 中的某些名称的损坏方式有所不同。

例如 .cpp 文件中的以下定义:

namespace {
TCHAR l_pszSlashes[] = _T("\\/");
}

我可以有以下变化:

?l_pszSlashes@?A0x79ec3b0d@@3PA_WA (wchar_t * `anonymous namespace'::l_pszSlashes)
?l_pszSlashes@?A0xa9cc3791@@3PA_WA (wchar_t * `anonymous namespace'::l_pszSlashes)

仅当我比较新构建的 dll 和来自另一台机器的旧 dll 时才会出现差异。如果我在同一台 PC 上编译此 dll,则不会有这种差异。

所以问题是:损坏名称中的这个十六进制数字部分是什么意思?为什么这个十六进制数字部分在某些情况下不同?我怎样才能编译这个项目使这些名称相同。

最佳答案

匿名命名空间仍然是唯一的。每个都不一样。所以,在内部,他们仍然需要一个名字。

这似乎是一种自动生成一个的方法,大概是用一个随机数(十六进制表示法)。

您将不得不停止依赖这些名称的确定性。在比较匿名命名空间的修饰名称时,您可以留意 ?A 然后忽略后续的十六进制数字。

但是,这可能会导致误报,具体取决于您在做什么,因为这两个 namespace 可能确实位于原始源中的不同位置。没有真正的方法可以知道。

关于c++ - Visual Studio 中生成的匿名命名空间变量的损坏名称的数字部分是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56650345/

26 4 0
文章推荐: c++ - 在分层窗口的子对话框中未单击 CMFCButton
文章推荐: html - 使用显示: inline-block; HTML CSS时出现添加框
文章推荐: html - 如何在
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com