【发布时间】:2015-11-18 21:34:15
【问题描述】:
我有 Windows 8.1。我从 E:\ 文件夹中的 C:\Windows\System32 复制了 User32.dll。所以首先,我已经提到,如果你只是复制粘贴,原始User32.dll的内容和User32.dll的副本是不一样的!!!我发现它,使用 WinMerge 程序。所以,我在 C 上编写了我的程序,如下所示:
void copy(FILE* input_dll)
{
FILE* f = fopen("E:\\user32.dll", "wb");
int size_of_base_input_dll_file;
// Get the Size of base_file
fseek(input_dll, 0, SEEK_END);
size_of_base_input_dll_file = ftell(input_dll);
//move on a begin of dll
fseek(input_dll, 0, SEEK_SET);
for (int i = 0; i < size_of_base_input_dll_file; ++i)
{
char symbol = fgetc(input_dll);
fputc(symbol, f);
}
}
int main()
{
FILE* user32 = fopen("C:\\Windows\\System32\\user32.dll","rb");
copy(user32);
}
现在 WinMerge 显示 C:\Windows\System32\user32.dll 和 E:\user32.dll 的内容相同,但是文件 C:\Windows\System32\user32.dll 比 E:\user32 大.dll 100 KB!!!怎么可能?
当我尝试使用 WinApi LoadLibraryA 函数加载 user32.dll(E:\user32.dll) 的副本时,它返回 NULL,无论是否使用了 user32.dll (E:\user32.dll) 的副本我的功能复制或复制粘贴。
所以我的问题:
- 为什么dll的内容一样,而dll的大小却不一样?
- 为什么 dll 的内容一样,但是我不能用 LoadLibraryA 加载 E:\user32.dll 并且可以用 LoadLibraryA 加载 C:\Windows\System32\user32.dll ?
- 为什么复制粘贴会复制错误?
【问题讨论】: