使用mt.exe查看PE文件的manifest

本文介绍Visual Studio 2005如何使用程序集发布程序,并解释了manifest文件的作用及其提取方法。当遇到程序启动错误时,可以通过提取manifest文件检查依赖程序集是否完整。

Visual Studio 从2005开始使用程序集发布所有的托管/非托管程序。保存程序集信息的是一个manifest文件,这个文件可以单独存在,也可以内嵌到PE文件中,默认就是内嵌到PE文件中。当运行程序出现"应用程序配置不正确,程序无法启动"错误时,就要考虑是否是依赖的程序集无法定位。manifest中就保存了程序集所依赖的所有程序集,对于内嵌到PE中的程序集当然就得手动提取出这个manifest文件。可以用VS2005附带的工具mt.exe完成,示例如下:

mt -inputresource:Tester.exe;#1 -out:extracted.manifest

将Tester.exe中内嵌的manifest提取出来,然后保存到extracted.manifest文件中。这样就可以通过查看extracted.manifest文件来了解此PE文件所依赖的程序集。

PowerShell 7 环境已加载 (版本: 7.5.2) PS C:\Users\Administrator\Desktop> cd E:\PyTorch_Build\pytorch PS E:\PyTorch_Build\pytorch> python -m venv rtx5070_env PS E:\PyTorch_Build\pytorch> .\rtx5070_env\Scripts\activate (rtx5070_env) PS E:\PyTorch_Build\pytorch> # 修改 cmake_config.ps1 (rtx5070_env) PS E:\PyTorch_Build\pytorch> @" >> # cmake_config.ps1 >> # 修复源目录路径 - 指向PyTorch源码目录 >> `$sourceDir = (Get-Item -Path "..").FullName # 关键修改:使用上级目录 >> >> `$cmakeArgs = @( >> "-G", "Ninja", >> "-DCMAKE_BUILD_TYPE=Release", >> "-DCMAKE_C_COMPILER=cl.exe", >> "-DCMAKE_CXX_COMPILER=cl.exe", >> "-DCMAKE_CUDA_COMPILER=E:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v13.0/bin/nvcc.exe", >> "-DCMAKE_CUDA_HOST_COMPILER=cl.exe", >> "-DCMAKE_SYSTEM_VERSION=10.0.22621.0", >> "-DCUDA_NVCC_FLAGS=-Xcompiler /wd4819 -gencode arch=compute_89,code=sm_89", >> "-DTORCH_CUDA_ARCH_LIST=8.9", >> "-DUSE_CUDA=ON", >> "-DUSE_NCCL=OFF", >> "-DUSE_DISTRIBUTED=OFF", >> "-DBUILD_TESTING=OFF", >> "-DBLAS=OpenBLAS", >> "-DCUDA_TOOLKIT_ROOT_DIR=E:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v13.0", >> "-DCUDNN_ROOT_DIR=E:/Program Files/NVIDIA/CUDNN/v9.12", >> "-DPYTHON_EXECUTABLE=`$((Get-Command python).Source)" >> ) >> >> Write-Host "运行 CMake: cmake `$sourceDir @cmakeArgs" >> cmake `$sourceDir @cmakeArgs # 指向正确的源码目录 >> "@ | Set-Content cmake_config.ps1 -Force (rtx5070_env) PS E:\PyTorch_Build\pytorch> # 修改 compile_cuda_test.ps1 (rtx5070_env) PS E:\PyTorch_Build\pytorch> @" >> # compile_cuda_test.ps1 >> `$cudaTest = @' >> #include <cuda_runtime.h> >> #include <iostream> >> #include <cuda.h> // 添加必要头文件 >> >> __global__ void addKernel(int *c, const int *a, const int *b) { >> int i = threadIdx.x; >> c[i] = a[i] + b[i]; >> } >> >> int main() { >> const int arraySize = 5; >> const int a[arraySize] = {1, 2, 3, 4, 5}; >> const int b[arraySize] = {10, 20, 30, 40, 50}; >> int c[arraySize] = {0}; >> >> int *dev_a, *dev_b, *dev_c; >> cudaMalloc((void**)&dev_a, arraySize * sizeof(int)); // 修复指针转换 >> cudaMalloc((void**)&dev_b, arraySize * sizeof(int)); >> cudaMalloc((void**)&dev_c, arraySize * sizeof(int)); >> >> cudaMemcpy(dev_a, a, arraySize * sizeof(int), cudaMemcpyHostToDevice); >> cudaMemcpy(dev_b, b, arraySize * sizeof(int), cudaMemcpyHostToDevice); >> >> // 修复内核调用语法 >> addKernel<<<1, arraySize>>>(dev_c, dev_a, dev_b); >> >> cudaMemcpy(c, dev_c, arraySize * sizeof(int), cudaMemcpyDeviceToHost); >> >> std::cout << "CUDA测试结果: "; >> for (int i = 0; i < arraySize; i++) { >> std::cout << c[i] << " "; >> } >> return 0; >> } >> '@ >> >> `$cudaTest | Set-Content cuda_test.cu # 改为.cu扩展名 >> >> `$ccbinPath = "`$env:VCToolsInstallDir\bin\Hostx64\x64" >> >> # 添加显式包含路径 >> nvcc -ccbin "`$ccbinPath" -I "E:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.0\include" cuda_test.cu -o cuda_test >> >> if (Test-Path cuda_test.exe) { >> .\cuda_test.exe >> } else { >> Write-Host "CUDA编译失败,请检查环境" >> } >> "@ | Set-Content compile_cuda_test.ps1 -Force (rtx5070_env) PS E:\PyTorch_Build\pytorch> # 1. 更新问题脚本 (rtx5070_env) PS E:\PyTorch_Build\pytorch> # 执行上面的两个脚本修改命令 (rtx5070_env) PS E:\PyTorch_Build\pytorch> (rtx5070_env) PS E:\PyTorch_Build\pytorch> # 2. 清理构建目录并重新构建 (rtx5070_env) PS E:\PyTorch_Build\pytorch> Remove-Item build -Recurse -Force -ErrorAction SilentlyContinue (rtx5070_env) PS E:\PyTorch_Build\pytorch> .\full_build.ps1 === 开始完整构建 === 环境设置完成! Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Requirement already satisfied: numpy in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (2.2.6) Requirement already satisfied: ninja in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (1.13.0) Requirement already satisfied: pyyaml in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (6.0.2) Requirement already satisfied: mkl in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (2025.2.0) Requirement already satisfied: mkl-include in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (2025.2.0) Requirement already satisfied: setuptools in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (65.5.0) Requirement already satisfied: cmake in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (4.1.0) Requirement already satisfied: cffi in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (1.17.1) Requirement already satisfied: typing_extensions in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (4.15.0) Requirement already satisfied: future in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (1.0.0) Requirement already satisfied: six in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (1.17.0) Requirement already satisfied: requests in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (2.32.5) Requirement already satisfied: dataclasses in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (0.6) Requirement already satisfied: intel-openmp<2026,>=2024 in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (from mkl) (2025.2.1) Requirement already satisfied: tbb==2022.* in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (from mkl) (2022.2.0) Requirement already satisfied: tcmlib==1.* in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (from tbb==2022.*->mkl) (1.4.0) Requirement already satisfied: pycparser in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (from cffi) (2.22) Requirement already satisfied: idna<4,>=2.5 in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (from requests) (3.10) Requirement already satisfied: certifi>=2017.4.17 in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (from requests) (2025.8.3) Requirement already satisfied: urllib3<3,>=1.21.1 in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (from requests) (2.5.0) Requirement already satisfied: charset_normalizer<4,>=2 in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (from requests) (3.4.3) Requirement already satisfied: intel-cmplr-lib-ur==2025.2.1 in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (from intel-openmp<2026,>=2024->mkl) (2025.2.1) Requirement already satisfied: umf==0.11.* in e:\pytorch_build\pytorch\rtx5070_env\lib\site-packages (from intel-cmplr-lib-ur==2025.2.1->intel-openmp<2026,>=2024->mkl) (0.11.0) [notice] A new release of pip available: 22.3.1 -> 25.2 [notice] To update, run: python.exe -m pip install --upgrade pip 运行 CMake: cmake E:\PyTorch_Build\pytorch @cmakeArgs CMake Warning at CMakeLists.txt:418 (message): TensorPipe cannot be used on Windows. Set it to OFF -- Current compiler supports avx2 extension. Will build perfkernels. -- Current compiler supports avx512f extension. Will build fbgemm. -- The CUDA compiler identification is NVIDIA 13.0.48 with host compiler MSVC 19.44.35215.0 -- Detecting CUDA compiler ABI info -- Detecting CUDA compiler ABI info - failed -- Check for working CUDA compiler: E:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v13.0/bin/nvcc.exe -- Check for working CUDA compiler: E:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v13.0/bin/nvcc.exe - broken CMake Error at E:/PyTorch_Build/pytorch/rtx5070_env/Lib/site-packages/cmake/data/share/cmake-4.1/Modules/CMakeTestCUDACompiler.cmake:59 (message): The CUDA compiler "E:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v13.0/bin/nvcc.exe" is not able to compile a simple test program. It fails with the following output: Change Dir: 'E:/PyTorch_Build/pytorch/CMakeFiles/CMakeScratch/TryCompile-9hsd61' Run Build Command(s): E:/PyTorch_Build/pytorch/rtx5070_env/Scripts/ninja.exe -v cmTC_917ed [1/2] "E:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.0\bin\nvcc.exe" -forward-unknown-to-host-compiler -ccbin=C:\PROGRA~1\MICROS~3\2022\COMMUN~1\VC\Tools\MSVC\1444~1.352\bin\Hostx64\x64\cl.exe -DLIBCUDACXX_ENABLE_SIMPLIFIED_COMPLEX_OPERATIONS -Xfatbin -compress-all -Xcompiler=" -Zi -Ob0 -Od /RTC1" "--generate-code=arch=compute_75,code=[compute_75,sm_75]" -Xcompiler=-MDd -MD -MT CMakeFiles\cmTC_917ed.dir\main.cu.obj -MF CMakeFiles\cmTC_917ed.dir\main.cu.obj.d -x cu -c E:\PyTorch_Build\pytorch\CMakeFiles\CMakeScratch\TryCompile-9hsd61\main.cu -o CMakeFiles\cmTC_917ed.dir\main.cu.obj -Xcompiler=-FdCMakeFiles\cmTC_917ed.dir\,-FS main.cu tmpxft_00004ff4_00000000-10_main.cudafe1.cpp [2/2] C:\WINDOWS\system32\cmd.exe /C "cd . && E:\PyTorch_Build\pytorch\rtx5070_env\Lib\site-packages\cmake\data\bin\cmake.exe -E vs_link_exe --intdir=CMakeFiles\cmTC_917ed.dir --rc=C:\ProgramData\mingw64\mingw64\bin\windres.exe --mt="" --manifests -- C:\ProgramData\mingw64\mingw64\bin\ld.exe /nologo CMakeFiles\cmTC_917ed.dir\main.cu.obj /out:cmTC_917ed.exe /implib:cmTC_917ed.lib /pdb:cmTC_917ed.pdb /version:0.0 /debug /INCREMENTAL cudadevrt.lib cudart.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib -LIBPATH:"E:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v13.0/lib/x64" && cd ." FAILED: [code=4294967295] cmTC_917ed.exe C:\WINDOWS\system32\cmd.exe /C "cd . && E:\PyTorch_Build\pytorch\rtx5070_env\Lib\site-packages\cmake\data\bin\cmake.exe -E vs_link_exe --intdir=CMakeFiles\cmTC_917ed.dir --rc=C:\ProgramData\mingw64\mingw64\bin\windres.exe --mt="" --manifests -- C:\ProgramData\mingw64\mingw64\bin\ld.exe /nologo CMakeFiles\cmTC_917ed.dir\main.cu.obj /out:cmTC_917ed.exe /implib:cmTC_917ed.lib /pdb:cmTC_917ed.pdb /version:0.0 /debug /INCREMENTAL cudadevrt.lib cudart.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib -LIBPATH:"E:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v13.0/lib/x64" && cd ." RC Pass 1: command "C:\ProgramData\mingw64\mingw64\bin\windres.exe /fo CMakeFiles\cmTC_917ed.dir/manifest.res CMakeFiles\cmTC_917ed.dir/manifest.rc" failed (exit code 1) with the following output: Usage: C:\ProgramData\mingw64\mingw64\bin\windres.exe [option(s)] [input-file] [output-file] The options are: -i --input=<file> Name input file -o --output=<file> Name output file -J --input-format=<format> Specify input format -O --output-format=<format> Specify output format -F --target=<target> Specify COFF target --preprocessor=<program> Program to use to preprocess rc file --preprocessor-arg=<arg> Additional preprocessor argument -I --include-dir=<dir> Include directory when preprocessing rc file -D --define <sym>[=<val>] Define SYM when preprocessing rc file -U --undefine <sym> Undefine SYM when preprocessing rc file -v --verbose Verbose - tells you what it's doing -c --codepage=<codepage> Specify default codepage -l --language=<val> Set language when reading rc file --use-temp-file Use a temporary file instead of popen to read the preprocessor output --no-use-temp-file Use popen (default) -r Ignored for compatibility with rc @<file> Read options from <file> -h --help Print this help message -V --version Print version information FORMAT is one of rc, res, or coff, and is deduced from the file name extension if not specified. A single file name is an input file. No input-file is stdin, default rc. No output-file is stdout, default rc. C:\ProgramData\mingw64\mingw64\bin\windres.exe: supported targets: pe-x86-64 pei-x86-64 pe-bigobj-x86-64 elf64-x86-64 pe-i386 pei-i386 elf32-i386 elf32-iamcu elf64-little elf64-big elf32-little elf32-big srec symbolsrec verilog tekhex binary ihex plugin ninja: build stopped: subcommand failed. CMake will not be able to correctly generate this project. Call Stack (most recent call first): cmake/public/cuda.cmake:47 (enable_language) cmake/Dependencies.cmake:43 (include) CMakeLists.txt:853 (include) -- Configuring incomplete, errors occurred! You have changed variables that require your cache to be deleted. Configure will be re-run and you may have to reset some variables. The following variables have changed: CMAKE_CXX_COMPILER= cl.exe CMAKE_C_COMPILER= cl.exe -- Generating done (0.0s) CMake Warning: Manually-specified variables were not used by the project: BLAS BUILD_TESTING CUDNN_ROOT_DIR PYTHON_EXECUTABLE TORCH_CUDA_ARCH_LIST CMake Generate step failed. Build files cannot be regenerated correctly. Traceback (most recent call last): File "<string>", line 1, in <module> AttributeError: module 'torch' has no attribute '__version__' (rtx5070_env) PS E:\PyTorch_Build\pytorch> (rtx5070_env) PS E:\PyTorch_Build\pytorch> # 3. 验证CUDA编译 (rtx5070_env) PS E:\PyTorch_Build\pytorch> .\compile_cuda_test.ps1 cuda_test.cu cuda_test.cu(1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 E:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v13.0/include\cuda.h(23283): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 cuda_test.cu(1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 E:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v13.0/include\cuda.h(23283): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 tmpxft_00004e0c_00000000-10_cuda_test.cudafe1.cpp CUDA娴嬭瘯缁撴灉: 11 22 33 44 55 (rtx5070_env) PS E:\PyTorch_Build\pytorch> (rtx5070_env) PS E:\PyTorch_Build\pytorch> # 4. 最终验证 (rtx5070_env) PS E:\PyTorch_Build\pytorch> python -c @" >> import torch >> print(f'PyTorch版本: {torch.__version__}') >> print(f'CUDA可用: {torch.cuda.is_available()}') >> if torch.cuda.is_available(): >> print(f'CUDA设备数量: {torch.cuda.device_count()}') >> print(f'设备0名称: {torch.cuda.get_device_name(0)}') >> "@ Traceback (most recent call last): File "<string>", line 2, in <module> AttributeError: module 'torch' has no attribute '__version__' (rtx5070_env) PS E:\PyTorch_Build\pytorch>
09-03
### mt.exe 运行失败的原因分析 mt.exe 是 Microsoft 提供的一个工具,用于处理清单文件manifest files)。当遇到 `general error c101008d` 时,这通常表示在尝试更新目标文件的资源部分时发生了某种错误。以下是可能的原因及其对应的解决方案: #### 可能原因一:目标文件已损坏或无法访问 如果目标文件(即 `.exe` 或 `.dll` 文件)本身存在问题或者权限不足,则可能导致此错误。 - **解决方案**:确认目标文件是否存在以及是否有足够的权限对其进行修改[^1]。可以尝试复制该文件到其他位置并重新执行命令以排除路径或权限问题。 #### 可能原因二:堆被破坏或其他内部逻辑错误 某些情况下,应用程序中的代码可能会引发堆破坏行为,例如在不同模块之间不恰当地分配和释放内存。这种问题也可能间接影响 mt.exe 对其操作的结果。 - **具体案例描述**:在一个场景下,开发者编写了一个程序,在动态链接库 (DLL) 中通过 malloc 函数分配了一块内存,但在可执行文件 (.exe) 中调用了 free 来释放这块内存。由于不同的编译器设置或运行时环境差异,这样的做法容易造成堆破坏,从而进一步导致类似 mt.exe 执行失败的情况发生[^3]。 - **建议措施**:确保所有内存管理遵循单一所有权原则——即由同一个模块负责分配与释放同一片内存区域;同时启用调试模式下的诊断选项来捕获潜在的非法操作。 #### 可能原因三:缺少必要的依赖项或配置不当 有时即使源码层面没有任何明显缺陷,但如果项目构建过程中遗漏了一些重要的依赖关系定义,同样会引起此类异常现象。 - **排查手段**:利用 Visual Studio 的输出窗口仔细观察整个构建流程日志,寻找额外提示信息以便定位根本症结所在[^2]。此外还可以借助 Dependency Walker 工具检测外部 dll 是否全部正常加载。 --- ### 总结 综上所述,针对 `mt.exe : general error c101008d` 错误可以从以下几个方面入手解决问题: 1. 验证输入参数及对象状态; 2. 审查应用层面上是否存在越界存取等隐患; 3. 考虑完善开发环境中各项支持条件。 希望上述指导能够帮助您有效应对当前困境! ```python # 示例 Python 脚本验证内存泄漏情况 import ctypes def test_memory_leak(): buffer_size = 1024 * 1024 # Allocate a large chunk of memory allocated_buffer = ctypes.create_string_buffer(buffer_size) if __name__ == "__main__": try: test_memory_leak() except Exception as e: print(f"Error occurred during execution: {e}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值