 |
|

17.01.2009, 23:16
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
С нами:
9746420
Репутация:
119
|
|
Вот, какое-то подобие dumpbin'у

З.Ы. пока только работает с import table
Последний раз редактировалось criz; 18.01.2009 в 00:21..
|
|
|

18.01.2009, 02:21
|
|
Новичок
Регистрация: 28.11.2007
Сообщений: 26
С нами:
9711197
Репутация:
11
|
|
Есть книжка "Ассемблер и дизассемблирование" Пирогова, там в приложении еще одно подобие, но выводит импорт, экспорт, ресурсы и отладочную информацию, вобщем вот сурс - http://slil.ru/26553218 
|
|
|

22.02.2009, 11:04
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
С нами:
9746420
Репутация:
119
|
|
Товарищи, как прочитать таблицу импорта/экспорта запущенных процессов?
|
|
|

22.02.2009, 11:44
|
|
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
С нами:
9981026
Репутация:
1564
|
|
Сообщение от criz
Товарищи, как прочитать таблицу импорта/экспорта запущенных процессов?
1) вызываете функцию CreateToolhelp32Snapshot, затем Process32First, Process32Next (так же следует вызыввать Module32First/Next для получения списка модулей в процессе) пока не закончаться процессы
2)читаете из структуры PROCESSENTRY32 поле szExeFile. Маппите исп. модуль себе и работаете с импортом/экспортом. Второй вариант - можно так же прочесть поле MODULEENTRY32 modBaseAddr - получить базу загрузки модуля и modBaseSize - его размер. Скопировать себе с помощью ReadProcessMemory и п.3.
3) а далее работать с директорией экспорта/импорта. хорошо расписано тут
http://www.wasm.ru/article.php?article=green2red02#_Toc100906487
|
|
|

22.02.2009, 13:51
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
С нами:
9746420
Репутация:
119
|
|
0x0c0de, спасиб. Вроде бы все так и делал.... только вот выдает ошибку доступа ("процесс уже занят") или как-то так... Будем искать ошибку.
|
|
|

25.02.2009, 20:05
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
С нами:
9746420
Репутация:
119
|
|
Сообщение от 0x0c0de
1) вызываете функцию CreateToolhelp32Snapshot, затем Process32First, Process32Next (так же следует вызыввать Module32First/Next для получения списка модулей в процессе) пока не закончаться процессы
2)читаете из структуры PROCESSENTRY32 поле szExeFile. Маппите исп. модуль себе и работаете с импортом/экспортом.
Если в CreateFile передавать szExeFile, то получаю:
Error 32: Процесс не может получить доступ к файлу, так как этот файл занят друг
им процессом.
побороть это пока не удалось...
P.S. пытался через OpenFileMapping:
Код:
OpenFileMapping(FILE_MAP_ALL_ACCESS, 0, "calc");
Error 2: Не удается найти указанный файл.
Последний раз редактировалось criz; 25.02.2009 в 20:27..
|
|
|

27.02.2009, 15:38
|
|
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
С нами:
9981026
Репутация:
1564
|
|
Я хз как вы там писали
Код:
// toolhelp.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <Tlhelp32.h>
#include <ntdll.h>
#pragma comment (lib,"ntdll.lib");
VOID SetNeededPrivelege(VOID)
{
HANDLE hndl;
TOKEN_PRIVILEGES newpriv,prevpriv;
DWORD retl;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hndl))
{
if (LookupPrivilegeValue(0, L"SeDebugPrivilege", &newpriv.Privileges[0].Luid))
{
newpriv.PrivilegeCount = 1;
newpriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hndl, 0, &newpriv, sizeof(newpriv), &prevpriv, &retl);
}
CloseHandle(hndl);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hSnap,hFile,hMSnp;
PROCESSENTRY32 proc32;
MODULEENTRY32 moduleentry32;
NTSTATUS status;
OBJECT_ATTRIBUTES ObjAttr;
UNICODE_STRING usExeModName;
IO_STATUS_BLOCK ioStatus;
WCHAR wcPath[500];
SetNeededPrivelege();
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if( hSnap != INVALID_HANDLE_VALUE )
{
proc32.dwSize = sizeof(PROCESSENTRY32);
if( Process32First( hSnap, &proc32 ) )
{
do
{
hMSnp = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE,proc32.th32ProcessID);
if(hMSnp!=INVALID_HANDLE_VALUE)
{
moduleentry32.dwSize = sizeof( MODULEENTRY32 );
if(Module32First(hMSnp, &moduleentry32))
{
do{
if(lstrcmp(moduleentry32.szModule,proc32.szExeFile)==0)
{
memset(wcPath,0,500*2);
if(!((_wcsnicmp(moduleentry32.szExePath,
L"\\??\\",
lstrlen(L"\\??\\")) == 0)||
(_wcsnicmp(moduleentry32.szExePath,
L"\\SystemRoot\\",
lstrlen(L"\\SystemRoot\\")) == 0)
))
{
lstrcpy(wcPath,L"\\??\\");
lstrcat(wcPath,moduleentry32.szExePath);
}else
{
lstrcpy(wcPath,moduleentry32.szExePath);
}
RtlInitUnicodeString(&usExeModName,wcPath);
InitializeObjectAttributes(&ObjAttr,
&usExeModName,
OBJ_CASE_INSENSITIVE,
NULL, NULL);
status = NtCreateFile(&hFile,
FILE_READ_DATA,
&ObjAttr,
&ioStatus,
0,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_WRITE|FILE_SHARE_READ,
FILE_OPEN,
FILE_NON_DIRECTORY_FILE,
NULL,
0);
if (NT_SUCCESS(status))
{
wprintf(L"File %ws opened successfully\n",
wcPath);
wprintf(L" file size = %d bytes\n",GetFileSize(hFile,0));
NtClose(hFile);
}else
{
wprintf(L"Cannot open file %ws status = %X\n",
wcPath,
status);
}
}
}while( Module32Next(hMSnp, &moduleentry32));
}
}
}while(Process32Next(hSnap, &proc32));
}
}
Sleep(-1);
return 0;
}
Проверка конечно довольно ненадежная [если нет \SystemRoot\ или \??\ вначале добавляем \??\], но если вам надо разберетесь и доделаете
Последний раз редактировалось 0x0c0de; 27.02.2009 в 15:54..
|
|
|

28.02.2009, 19:35
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
С нами:
9746420
Репутация:
119
|
|
Сообщение от 0x0c0de
Я хз как вы там писали
Че-т херня какая-то... Как бы я не пытался открыть файл, получаю ошибку открытия файла 
|
|
|

28.02.2009, 19:51
|
|
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
С нами:
9981026
Репутация:
1564
|
|
И сейчас проблемы? Мэппите потом, после того как хендл получили
xpsp2
xpsp3
vista
win7
Я вообще-то тестирую код, перед тем как постить
Последний раз редактировалось 0x0c0de; 28.02.2009 в 19:56..
|
|
|

28.02.2009, 20:16
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
С нами:
9746420
Репутация:
119
|
|
Усе сделалось  Проблема была в правах доступа к файлу.
Сообщение от 0x0c0de
Я вообще-то тестирую код, перед тем как постить
Я ж не сказал, что ваш код не рабочий 
Мои глюки и мои ошибки 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|