Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Вопросы про EXE и DLL (https://forum.antichat.xyz/showthread.php?t=101229)

criz 14.01.2009 22:03

Вопросы про EXE и DLL
 
Всем драсьте =)
Есть процесс, я получил список длл-ок, которые она использует. Как мне получить список функций, используемые процессом?
P.S. кто-нить качал сорцы отсюда?

KaZ@NoVa 14.01.2009 22:06

2 года прошло!!! Здохли? :(
Ты на дату посмотри!!!!... :(

criz 14.01.2009 22:13

Цитата:

2 года прошло!!! Здохли?
это шутко)))
Сабж?

cash$$$ 14.01.2009 22:36

criz

Для получения списка всех процессов в системе, если я не ошибаюсь можно получить так:

Код:

type
 TPROCESS = packed record
    ProcessId : dword;
    ImageName : array [0..15] of Char;
    pEPROCESS : dword;
    ParrentPid: dword;
    end;

 PSYS_PROCESSES = ^TSYS_PROCESSES;
 TSYS_PROCESSES = packed record
  ProcessesCount: dword;
  Process: array[0..0] of TPROCESS;
  end;
 
{ Получение списка процессов прямым доступом к структурам ядра. }
function GetProcesses(): PSYS_PROCESSES;
var
 Eprocess: array [0..$600] of byte;
 CurrentStruct: dword;
 CurrSize: dword;
 OldPriority: dword;
begin
 CurrSize := SizeOf(TSYS_PROCESSES);
 GetMem(Result, CurrSize);
 ZeroMemory(Result, CurrSize);
 ZeroMemory(@Eprocess, $600);
 CurrentStruct := UndocData.BaseProcStrAdr + UndocData.ActivePsListOffset;
 OldPriority := GetThreadPriority($FFFFFFFE);
 SetThreadPriority($FFFFFFFE, THREAD_PRIORITY_TIME_CRITICAL);
 repeat
  CurrentStruct := CurrentStruct - UndocData.ActivePsListOffset;
  Ring0CopyMemory(pointer(CurrentStruct), @Eprocess, $220);
  if pdword(dword(@Eprocess) + UndocData.ppIdOffset)^ > 0 then
    begin
      Inc(CurrSize, SizeOf(TPROCESS));
      ReallocMem(Result, CurrSize);
      Result^.Process[Result^.ProcessesCount].ProcessId :=
                                pdword(dword(@Eprocess) + UndocData.PidOffset)^;
      Result^.Process[Result^.ProcessesCount].pEPROCESS := CurrentStruct;
      lstrcpyn(@Result^.Process[Result^.ProcessesCount].ImageName,
              PChar(dword(@Eprocess) + UndocData.NameOffset), 16);
      Result^.Process[Result^.ProcessesCount].ParrentPid :=
                                pdword(dword(@Eprocess) + UndocData.ppIdOffset)^;

      Inc(Result^.ProcessesCount);
    end;
  CurrentStruct := pdword(dword(@Eprocess) + UndocData.ActivePsListOffset)^;
  if CurrentStruct < $80000000 then break;
 until CurrentStruct = UndocData.BaseProcStrAdr + UndocData.ActivePsListOffset;
 SetThreadPriority($FFFFFFFE, OldPriority);
end;


criz 14.01.2009 22:46

cash$$$, нет. Мне надо получить список функций, которые использует процесс

bons 14.01.2009 23:35

смотри в таблицу импорта exe-файла процесса.

criz 14.01.2009 23:39

Цитата:

Сообщение от bons
смотри в таблицу импорта exe-файла процесса.

Как? :)
P.S. нашел функцию ImageLoad()...

St0nX 14.01.2009 23:43

Есть плагин для Тотал командера им можно посмотреть таблицу импорта

Называется PEViewer

criz 15.01.2009 00:00

St0nX, замечательная вещь. Еще есть у Руссиновича ProccessExplorer и dumpbin(или как-то так) у VC++ :)
Только вот мне свое хочется.

bons 15.01.2009 00:31

в статье есть примеры по работе с таблицей импорта
http://wasm.ru/article.php?article=green2red02


Время: 09:41