无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: mdyblog
打印 上一主题 下一主题

[更新376#2825]PECMD2012.1.80.13_Win32_64.多窗口多线程.裸机系统2.3.3.1+18M酷M...

    [复制链接]
19471#
发表于 2025-9-18 15:32:06 | 只看该作者
本帖最后由 没想到 于 2025-9-18 21:21 编辑

PART -iv=1 list drv C:,分区
这个 分区 是物理号还是分区号

点评

-phy# 加上这个对比一下就知道啦  详情 回复 发表于 2025-9-20 19:25
回复

使用道具 举报

19472#
发表于 2025-9-20 10:01:22 | 只看该作者
唏嘘学习
回复

使用道具 举报

19473#
发表于 2025-9-20 19:25:31 来自手机 | 只看该作者
没想到 发表于 2025-9-18 15:32
PART -iv=1 list drv C:,分区
这个 分区 是物理号还是分区号

-phy#
加上这个对比一下就知道啦
回复

使用道具 举报

19474#
发表于 2025-9-20 20:23:08 来自手机 | 只看该作者
占楼
回复

使用道具 举报

19475#
发表于 2025-9-20 21:04:02 | 只看该作者
红毛樱木 发表于 2025-9-20 19:25
-phy#
加上这个对比一下就知道啦

测试到了,默认分区号
回复

使用道具 举报

19476#
发表于 2025-9-20 23:29:26 | 只看该作者
多看多学习,支持一下!
回复

使用道具 举报

19477#
发表于 2025-9-24 13:12:52 来自手机 | 只看该作者
占楼
回复

使用道具 举报

19478#
发表于 2025-9-25 23:18:55 | 只看该作者
感谢分享
回复

使用道具 举报

19479#
发表于 2025-9-27 11:44:17 来自手机 | 只看该作者
谢谢制作辛苦了
回复

使用道具 举报

19480#
发表于 2025-10-9 16:39:34 | 只看该作者
谢谢分享,学习一下,谢谢。
回复

使用道具 举报

19481#
发表于 2025-10-10 10:21:48 来自手机 | 只看该作者
看看
回复

使用道具 举报

19482#
发表于 2025-10-16 12:17:21 | 只看该作者
多窗口
回复

使用道具 举报

19483#
发表于 2025-10-16 12:17:54 | 只看该作者
多看多学习,支持一下!
回复

使用道具 举报

19484#
发表于 2025-10-16 13:30:38 | 只看该作者
好东西  
回复

使用道具 举报

19485#
发表于 2025-10-16 13:30:58 | 只看该作者
测试
回复

使用道具 举报

19486#
发表于 2025-10-16 16:30:38 | 只看该作者
干货满满!很给力~
回复

使用道具 举报

19487#
发表于 2025-10-16 16:31:20 | 只看该作者
支持大佬,收下备用!
回复

使用道具 举报

19488#
发表于 2025-10-16 16:31:33 | 只看该作者
正需要,很不错
回复

使用道具 举报

19489#
发表于 2025-10-16 16:31:44 | 只看该作者
经典资源,收藏备用
回复

使用道具 举报

19490#
发表于 前天 23:07 | 只看该作者
获取程序图标组中第一个图标的ID
    定位 RT_GROUP_ICON(类型ID=14)的资源目录,跳过无关资源类型。
    简化偏移计算,利用PE文件的 IMAGE_DATA_DIRECTORY 直接定位资源节。
求翻译PECMD怎样写

  1. #include <windows.h>
  2. #include <stdio.h>

  3. DWORD GetFirstIconGroupID(LPCWSTR exePath) {
  4.     HANDLE hFile = CreateFileW(exePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
  5.     if (hFile == INVALID_HANDLE_VALUE) return 0;

  6.     DWORD fileSize = GetFileSize(hFile, NULL);
  7.     HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, fileSize, NULL);
  8.     LPVOID pBase = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
  9.     if (!pBase) { CloseHandle(hMap); CloseHandle(hFile); return 0; }

  10.     PIMAGE_DOS_HEADER dos = (PIMAGE_DOS_HEADER)pBase;
  11.     PIMAGE_NT_HEADERS nt = (PIMAGE_NT_HEADERS)((BYTE*)pBase + dos->e_lfanew);
  12.     if (nt->Signature != IMAGE_NT_SIGNATURE) { UnmapViewOfFile(pBase); CloseHandle(hMap); CloseHandle(hFile); return 0; }

  13.     // 定位资源目录
  14.     auto& resDir = nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE];
  15.     if (resDir.VirtualAddress == 0) { UnmapViewOfFile(pBase); CloseHandle(hMap); CloseHandle(hFile); return 0; }

  16.     // 定位资源节(.rsrc)
  17.     PIMAGE_SECTION_HEADER section = IMAGE_FIRST_SECTION(nt);
  18.     for (int i = 0; i < nt->FileHeader.NumberOfSections; i++, section++) {
  19.         if (resDir.VirtualAddress >= section->VirtualAddress &&
  20.             resDir.VirtualAddress < section->VirtualAddress + section->Misc.VirtualSize) break;
  21.     }

  22.     // 计算资源目录在文件中的实际偏移
  23.     DWORD resOffset = resDir.VirtualAddress - section->VirtualAddress + section->PointerToRawData;
  24.     PIMAGE_RESOURCE_DIRECTORY rootDir = (PIMAGE_RESOURCE_DIRECTORY)((BYTE*)pBase + resOffset);

  25.     // 遍历资源类型,找到 RT_GROUP_ICON(ID=14)
  26.     PIMAGE_RESOURCE_DIRECTORY_ENTRY typeEntry = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(rootDir + 1);
  27.     for (DWORD i = 0; i < rootDir->NumberOfIdEntries; i++, typeEntry++) {
  28.         if (typeEntry->Id == 14) { // RT_GROUP_ICON = 14
  29.             // 获取第一个图标ID(进入ID目录的第一个条目)
  30.             PIMAGE_RESOURCE_DIRECTORY iconDir = (PIMAGE_RESOURCE_DIRECTORY)((BYTE*)rootDir + typeEntry->OffsetToDirectory);
  31.             PIMAGE_RESOURCE_DIRECTORY_ENTRY iconIdEntry = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(iconDir + 1);
  32.             DWORD firstIconId = iconIdEntry->Id;

  33.             UnmapViewOfFile(pBase);
  34.             CloseHandle(hMap);
  35.             CloseHandle(hFile);
  36.             return firstIconId;
  37.         }
  38.     }

  39.     UnmapViewOfFile(pBase);
  40.     CloseHandle(hMap);
  41.     CloseHandle(hFile);
  42.     return 0;
  43. }

  44. // 调用示例:获取 Photoshop.exe 的第一个图标ID
  45. int main() {
  46.     LPCWSTR exePath = L"D:\\软件\\Photoshop\\Photoshop.exe";
  47.     DWORD iconId = GetFirstIconGroupID(exePath);
  48.     printf("第一个图标ID: %u\n", iconId); // 输出:1000 或 1 等
  49.     return 0;
  50. }
复制代码

点评

这里有几个结构体,要用PECMD搞,太烦了。  详情 回复 发表于 1 小时前
回复

使用道具 举报

19491#
发表于 昨天 11:31 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

19492#
发表于 1 小时前 | 只看该作者
Zap 发表于 2025-11-3 23:07
获取程序图标组中第一个图标的ID
    定位 RT_GROUP_ICON(类型ID=14)的资源目录,跳过无关资源类型。
  ...

这里有几个结构体,要用PECMD搞,太烦了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-11-5 11:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表