Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Чтение памяти не своего процесса Добавлено: 27.01.06 02:18  

Автор вопроса:  szlodey
Имеем: объект process, связаный с запущеным приложением (т.е. точно знаем pid процесса), win xp sp2, VB.net
Нужно: прочитать пару байт по известному смещению в этом процессе.
Через API ничего не неработает, OpenProcess всегда возвращает 0.
ReadProcessMemory аналогично (еще бы, я же не могу найти правильный pHandle без OpenProcess).
Как то все это возможно проделать не прибегая к апи через marshal, может кто подскажет?
Помогите елки палки, весь инет облазил, нигде решения нет, одни намеки да недомолвки.

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 27.01.06 06:40
На msdn.microsoft.com тоже обмёки и недомолвки?

Ты openrocess вызываешь с FULL_ACCESS? Она тебя и посылает. GetLastError вызови потом, цифру 5 не увидишь ли?

Ответить

Номер ответа: 2
Автор ответа:
 szlodey



Вопросов: 1
Ответов: 2
 Профиль | | #2 Добавлено: 27.01.06 23:37
да как только не открывал этот опенпроцесс (банальный calc.exe, сижу под админом)! и PROCESS_ALL_ACCESS и PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ и просто vm_read и всяко разно, и process.enterdebugmode делал (кстати сделав этот дебуг можно грохнуть любой процесс чисто средствами vb, не прибегая к апи.)
в msdn нет НИ одного примера чтения памяти ДРУГОГО процесса. через маршал там показано как можно работать с памятью где сидят переменные, stream`ы, вобщем все не то.
в инете кое где написано, что для ReadProcessMemory нужно сначала извращаться с какимито токенами доступа....
Покажи простой пример, как всетаки прочитать хотябы 1 байт процесса (того же calc.exe хотябы), буду очень благодарен.

Ответить

Номер ответа: 3
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #3 Добавлено: 28.01.06 05:05
Ещё раз читаем ответ №1 и видим в нём вопрос: что возвращает функция GetLastError после того, как OpenProcess вернула 0?

Ответить

Номер ответа: 4
Автор ответа:
 szlodey



Вопросов: 1
Ответов: 2
 Профиль | | #4 Добавлено: 30.01.06 00:16
У меня и getlasterror кстати тоже не пахала.
И знаешь в чем было дело? В неверных типах данных! Во всех описаниях этих апи функций и примерах типы данных значились как long! Незнаю, каким куем у них это работало, у меня ни в какую. наконец-то догадался поставить ВСЕ типы как банальный integer - теперь все работает.
Теперь главный вопрос: возможно ли читать память БЕЗ ПОМОЩИ АПИ?

Ответить

Номер ответа: 5
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #5 Добавлено: 30.01.06 09:48
Как это GetLastError не пахала? При её вызове что происходит? Прога вылетает или комп перегружается? Если не то и не другое, то она работает и возвращает код ошибки.

Без апи можно прочитать память процесса, напрямую вызывая сервисы ntoskrnl. Все твои апи в конечном итоге сводятся к вызову этих сервисов. Для VB.Net этот способ нереален.

Ответить

Номер ответа: 6
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #6
Добавлено: 30.01.06 13:52
Да не, просто там Long 64-битный, ну а Integer в .NET соответственно и есть обычный 32-битный Long.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам