HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 17.01.2009, 23:16
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
С нами: 9746420

Репутация: 119
По умолчанию

Вот, какое-то подобие dumpbin'у
Цитата:
http://slil.ru/26552715

З.Ы. пока только работает с import table

Последний раз редактировалось criz; 18.01.2009 в 00:21..
 
Ответить с цитированием

  #2  
Старый 18.01.2009, 02:21
dnd
Новичок
Регистрация: 28.11.2007
Сообщений: 26
С нами: 9711197

Репутация: 11
По умолчанию

Есть книжка "Ассемблер и дизассемблирование" Пирогова, там в приложении еще одно подобие, но выводит импорт, экспорт, ресурсы и отладочную информацию, вобщем вот сурс - http://slil.ru/26553218
 
Ответить с цитированием

  #3  
Старый 22.02.2009, 11:04
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
С нами: 9746420

Репутация: 119
По умолчанию

Товарищи, как прочитать таблицу импорта/экспорта запущенных процессов?
 
Ответить с цитированием

  #4  
Старый 22.02.2009, 11:44
0x0c0de
Постоянный
Регистрация: 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
 
Ответить с цитированием

  #5  
Старый 25.02.2009, 20:05
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
С нами: 9746420

Репутация: 119
Unhappy

Цитата:
Сообщение от 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..
 
Ответить с цитированием

  #6  
Старый 22.02.2009, 13:51
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
С нами: 9746420

Репутация: 119
По умолчанию

0x0c0de, спасиб. Вроде бы все так и делал.... только вот выдает ошибку доступа ("процесс уже занят") или как-то так... Будем искать ошибку.
 
Ответить с цитированием

  #7  
Старый 27.02.2009, 15:38
0x0c0de
Постоянный
Регистрация: 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..
 
Ответить с цитированием

  #8  
Старый 28.02.2009, 19:35
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
С нами: 9746420

Репутация: 119
По умолчанию

Цитата:
Сообщение от 0x0c0de  
Я хз как вы там писали
Че-т херня какая-то... Как бы я не пытался открыть файл, получаю ошибку открытия файла
 
Ответить с цитированием

  #9  
Старый 28.02.2009, 19:51
0x0c0de
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
С нами: 9981026

Репутация: 1564
По умолчанию

И сейчас проблемы? Мэппите потом, после того как хендл получили

xpsp2



xpsp3


vista



win7





Я вообще-то тестирую код, перед тем как постить

Последний раз редактировалось 0x0c0de; 28.02.2009 в 19:56..
 
Ответить с цитированием

  #10  
Старый 28.02.2009, 20:16
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
С нами: 9746420

Репутация: 119
По умолчанию

Усе сделалось Проблема была в правах доступа к файлу.
Цитата:
Сообщение от 0x0c0de  
Я вообще-то тестирую код, перед тем как постить
Я ж не сказал, что ваш код не рабочий
Мои глюки и мои ошибки
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Статья от novichka про АНтичат. Егорыч+++ Болталка 48 14.07.2006 17:09
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы про Ip Dimann Болталка 8 11.09.2005 22:49



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.