吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 378|回复: 6
收起左侧

[求助] 如图所示,如何获得被调试程序的完整路径?

[复制链接]
冥界3大法王 发表于 2024-10-21 10:26
image.png
在调试器中,似乎只有
文件=》最近打开的文件
和    文件=》改变命令行
是自动的得到了路径

有啥方法,我能拿到路径?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

董督秀 发表于 2024-10-21 10:36
本帖最后由 董督秀 于 2024-10-21 10:37 编辑

创建进程快照。从结构体里取,里面包含路径,名称等。也可以从调试事件里取。
 楼主| 冥界3大法王 发表于 2024-10-21 11:32
董督秀 发表于 2024-10-21 10:36
创建进程快照。从结构体里取,里面包含路径,名称等。也可以从调试事件里取。

以下两个各有不足(一个不是全部进程的,第二个不是路径的,怎么杂交到一起呢?)
[Pascal] 纯文本查看 复制代码
procedure TForm13.Button3Click(Sender: TObject);
var
  SnapshotHandle: THandle;
  ModuleEntry: TModuleEntry32;
  ProcessID: DWORD;
begin
  begin
  // 获取当前活动的进程ID
    ProcessID := GetCurrentProcessId;
  // 创建包含模块列表的快照
    SnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessID);
    if SnapshotHandle <> INVALID_HANDLE_VALUE then
    try
    // 初始化模块入口结构体的大小
      ModuleEntry.dwSize := SizeOf(TModuleEntry32);
    // 获取快照中的第一个模块信息
      if Module32First(SnapshotHandle, ModuleEntry) then
      begin
      // 遍历模块列表
        repeat
        // 输出模块的完整路径
          Memo1.Lines.Add(ModuleEntry.szExePath);
        // 获取下一个模块信息
        until not Module32Next(SnapshotHandle, ModuleEntry);
      end;
    finally
    // 关闭快照句柄
      CloseHandle(SnapshotHandle);
    end;
  end;

end;

procedure TForm13.Button4Click(Sender: TObject);
var
  Snapshot: THandle;
  Entry: TProcessEntry32;
  Success: Boolean;
begin
  Snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);           // 创建进程快照
  if Snapshot = INVALID_HANDLE_VALUE then
    RaiseLastOSError;
  try
    Entry.dwSize := SizeOf(Entry);                                     //初始化 PROCESSENTRY32 结构
    Success := Process32First(Snapshot, Entry);                        //取快照中的第一个进程信息
    while Success do
    begin
      Memo1.Lines.Add(Format('Process ID: %d, Name: %s', [Entry.th32ProcessID, Entry.szExeFile]));           // 输出进程信息
      Success := Process32Next(Snapshot, Entry);                      // 获取下一个进程信息
    end;
    if not Success then         // 检查是否有错误发生
      RaiseLastOSError;
  finally
    CloseHandle(Snapshot);       // 关闭快照句柄
  end;
end;
无闻无问 发表于 2024-10-21 11:45
如果临时单纯拿,任务管理器应该就行,查看--选择列--映象路径名称……
无闻无问 发表于 2024-10-21 12:00
在x64dbg中下GetModuleFileNameW的断点通常能得到……
 楼主| 冥界3大法王 发表于 2024-10-21 12:06
无闻无问 发表于 2024-10-21 12:00
在x64dbg中下GetModuleFileNameW的断点通常能得到……

我要编程的方式获得。

又搞了一个,该有的路径没有,不该有的倒有了。
[Delphi] 纯文本查看 复制代码
program Project6;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Messages,
  Windows,
  Tlhelp32;

var
  processRec: Thandle;
  pe32: TProcessEntry32;
  processNum: Integer;

procedure EnumModule(processid: DWORD);
var
  moduleRec: THandle;
  pm: TModuleEntry32;
begin
    // create module snapshot
  moduleRec := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, processid);
     //module size
  pm.dwSize := sizeof(TModuleEntry32);
     //  first module?
  if (module32First(moduleRec, pm)) then
  begin
    while Module32Next(moduleRec, pm) do
    begin
      Writeln('module name: ', StrPas(pm.szExePath));
    end;
  end;
  CloseHandle(moduleRec);
end;

procedure OutProcessName(processName: string);
begin
  WriteLn('Process Name:', processName);
end;

begin
  processNum := 0;
 //create process snapshot
  processRec := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  pe32.dwSize := sizeOf(TPROCESSENTRY32);
  if Process32First(processRec, pe32) then
  begin
   // enum the process module
    OutProcessName(pe32.szExeFile);
    EnumModule(pe32.th32ProcessID);
    inc(processNum);    //inc process count
    while Process32Next(processRec, pe32) do
    begin
      OutProcessName(pe32.szExeFile);
      EnumModule(pe32.th32ProcessID);
      inc(processNum); //inc process count
    end;
    WriteLn('Total System Process:', processNum);
    CloseHandle(processRec);
    Readln;

  end;
end.
lies2014 发表于 2024-10-21 16:50
冥界3大法王 发表于 2024-10-21 12:06
我要编程的方式获得。

又搞了一个,该有的路径没有,不该有的倒有了。

你需要打印的主模块是 Module32First,如果不打印进程的所有模块,后面的 Module32Next 可以不要,现在是只打印了 Module32Next
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 12:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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