gpt4 book ai didi

c++ - Microsoft 系统可执行拷贝差异

转载 作者:可可西里 更新时间:2023-11-01 11:18:54 27 4
gpt4 key购买 nike

我一直在探索 Windows 系统文件的来龙去脉,并注意到一个奇怪的事情:如果我执行 Windows 系统的低级按位复制可执行到我选择的目标位置生成的文件小于原来的。

例子:我写了一个小程序来复制无处不在的calc.exe可执行文件...

C:\test> copyit c:\windows\system32\calc.exe c:\test\calc.exe

这是生成的文件:

C:\test>dir
Volume in drive C is OS
Volume Serial Number is DEAD-BEEF

Directory of C:\test

02/08/2014 03:37 PM <DIR> .
02/08/2014 03:37 PM <DIR> ..
02/08/2014 03:37 PM 798,720 calc.exe
1 File(s) 798,720 bytes
2 Dir(s) 291,059,347,456 bytes free

这很有趣,因为查看 C:\windows\system32\calc.exe 让我...

C:\test>dir c:\Windows\System32\calc.exe
Volume in drive C is OS
Volume Serial Number is DEAD-BEEF

Directory of c:\Windows\System32

08/22/2013 05:51 AM 922,112 calc.exe <------Why is this larger?
1 File(s) 922,112 bytes
0 Dir(s) 291,059,322,880 bytes free

为了您的观看乐趣,我用 C++ 编写的“copyit”程序:

int main(int argc, char* argv[])
{
std::ifstream is( argv[0], std::ios::in | std::ios::binary );
std::ofstream os( argv[1], std::ios::out| std::ios::binary );

is.seekg(0, std::ios::end);
std::streampos size = is.tellg();
is.seekg(0);

char* buffer = new char[(size_t)size];

is.read(buffer, size);
os.write(buffer, size);

delete [] buffer;

os.close();
is.close();

return 0;
}

如果我在应用程序中设置断点并在 tellg() 调用后检查大小变量参见 798720。

???

请注意,生成的 calc.exe 不会在我的测试目录中运行,但如果我降低我的它将运行的 UAC 安全设置。

是什么导致了这种大小差异?一些软元数据与system32\calc.exe?如果是这样,为什么我的小复制程序不直接复制它呢?因为它在同一个文件中? Microsoft 是否为 TrustedInstaller 捆绑了一些证书使用?如果是这样,为什么我的小应用程序没有复制它?

如果我使用 peexplorer 查看这两个文件...它们看起来完全相同。与使用十六进制编辑器。

使用 Cywin 的 md5sum,文件会产生不同的哈希值。

在其他非 MS 系统可执行文件上运行我的应用程序会得到一个完美的拷贝,无论是大小还是哈希和可执行文件在不接触 UAC 控件的情况下运行。

我使用 CopyFile API 重写了 copyit... 结果相同。还有 _fopen()。同上。我高度怀疑我遇到了一些未记录的安全功能。

最佳答案

您可能正在运行 64 位版本的 Windows,而您的程序是 32 位的。当您打开 c:\Windows\System32 中的文件时,它将被重定向到 C:\Windows\SysWOW64。因此,您不是复制 c:\windows\system32\calc.exe,而是复制 C:\Windows\SysWOW64\calc.exe。我假设 calc.exe 的文件大小为 798720。

另见 File System Redirector .

关于c++ - Microsoft 系统可执行拷贝差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21651945/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com