purebasic.info

PureBasic forum
Текущее время: Ср июн 20, 2018 7:48 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Чт янв 24, 2013 1:57 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Недавно разгребал свои старые коды, наткнулся на свою заготовку шестнадцатеричного редактора на основе
RAHexEd.lib от KetilO (http://radasm.cherrytree.at/), немного допилил и получился вполне
себе ничего HEX редактор. В библиотеке не понравились две вещи. Не возможно редактировать
ASCII текст и при редактировании, измененные байты и ASCII текст не выделяются цветом как
в других редакторах.

И второй HEX редактор от легендарного yoda. Сама начинка находится в 16Edit.dll Мой код только обертка над dll, как и в первом случае.


Вложения:
HexEditor.rar [154.34 KiB]
Скачиваний: 298
YodaHexEditor.rar [22.4 KiB]
Скачиваний: 282

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 15, 2013 10:30 am 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Немного допилил HexEditor
Добавлено:
* Кнопка NEW
* Кнопка Goto
* Drag And Drop
* Ну и по мелочам


Вложения:
HexEditor.rar [43.51 KiB]
Скачиваний: 252

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 14, 2013 6:46 am 
Не в сети
ассистент

Зарегистрирован: Пт мар 15, 2013 1:26 pm
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
pablov писал(а):
Недавно разгребал свои старые коды, наткнулся на свою заготовку шестнадцатеричного редактора на основе
RAHexEd.lib от KetilO (http://radasm.cherrytree.at/), немного допилил и получился вполне
себе ничего HEX редактор. В библиотеке не понравились две вещи. Не возможно редактировать
ASCII текст и при редактировании, измененные байты и ASCII текст не выделяются цветом как
в других редакторах.

Спасибо за пример! Подскажите как загрузить в редактор не файл, а память?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 14, 2013 10:24 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11181
Благодарил (а): 4 раз.
Поблагодарили: 414 раз.
ExZet писал(а):
как загрузить в редактор не файл, а память
Зачем?
Система не позволит редактировать память другого процесса, разве что через драйвер.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 14, 2013 1:26 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6309
Благодарил (а): 19 раз.
Поблагодарили: 188 раз.
Пункты репутации: 48
Пётр писал(а):
Система не позволит редактировать память другого процесса

А кодтипа этого

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 14, 2013 2:16 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11181
Благодарил (а): 4 раз.
Поблагодарили: 414 раз.
Разве в нем можно получить доступ к памяти по физическому адресу?
В юзермоде это невозможно (на сколько мне известно), т. к. система прибьет прогу.
Но на уровня ядра, такое можно провернуть.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 14, 2013 3:33 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6309
Благодарил (а): 19 раз.
Поблагодарили: 188 раз.
Пункты репутации: 48
Пётр писал(а):
Разве в нем можно получить доступ к памяти по физическому адресу?

Не знаю. Просто прочитал описание
Цитата:
задача, требующая модификации значений в памяти другой программы постоянно во время ее работы.

и коменты к коду
Цитата:
Проходим по адресам указателей в памяти чужого процесса от начала, до конца региона
и проверяем, не в них ли строка поиска.
/*Нашли, сообщим об успехе и поменяем в чужом процессе искомую строку на нашу.*/

Если это не доступ к памяти, то что это?

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 14, 2013 4:01 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11181
Благодарил (а): 4 раз.
Поблагодарили: 414 раз.
kvitaliy писал(а):
Если это не доступ к памяти, то что это?
Это виртуальная память процесса. http://ru.wikipedia.org/wiki/Виртуальная_память
Это не тоже самое что физическая память.
К прмиеру, если ты что-то запишешь по адресу, скажем, 1000 какого-либо процесса, на самом деле, запись будет произведена не по этому адресу в физической памяти, а по другому.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 14, 2013 4:16 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6309
Благодарил (а): 19 раз.
Поблагодарили: 188 раз.
Пункты репутации: 48
Пётр писал(а):
скажем, 1000 какого-либо процесса, на самом деле, запись будет произведена не по этому адресу в физической памяти, а по другому.

Ну это и дураку ясно! При чем тут это? Люди то пишут в процесс, реально меняют данные, ход выполнения программы. Значит система позволяет менять эти данные? Дебагер вмешивается в процесс? Артмани и Олька работают реально?

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 14, 2013 4:40 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11181
Благодарил (а): 4 раз.
Поблагодарили: 414 раз.
Виталий, прочитай что нужно ExZet. http://purebasic.info/phpBB2/viewtopic. ... 8760#48760
Он что-то писал про память конкретного процесса?

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 14, 2013 5:56 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6309
Благодарил (а): 19 раз.
Поблагодарили: 188 раз.
Пункты репутации: 48
Пётр писал(а):
Он что-то писал про память конкретного процесса?

Он нет, а ты писал, что
Пётр писал(а):
Система не позволит редактировать память другого процесса


Его вопрос вообще решается элементарно - снимаем дамп памяти и загружаем его в редактор.
Он ведь просил его только загрузить, а не редактировать :D
тут код, как снять дамп

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 14, 2013 6:13 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11181
Благодарил (а): 4 раз.
Поблагодарили: 414 раз.
kvitaliy, я имел в виду, получить доступ не к адресам виртуальной памяти, а к физической памяти, в которой находятся адресные пространства всех процессов и ядра системы.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 15, 2013 11:35 am 
Не в сети
ассистент

Зарегистрирован: Пт мар 15, 2013 1:26 pm
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
Зачем?
Система не позволит редактировать память другого процесса, разве что через драйвер.

Я не точно сказал, а вы не поняли.
В процессе работы программа выделяет определенный участок памяти и заполняет его чемто. И мне надо этот участок памяти загрузить в хексредактор.

Код:
1
2
3
Procedure StreamFileIn_Callback(hFile.l, pBuffer.l, NumBytes.l,pBytesRead.l)
  ProcedureReturn ReadFile_(hFile, pBuffer, NumBytes, pBytesRead, 0) ! 1
EndProcedure


Если я правильно понимаю, тут происходит обратный вызов и читается файл, а тут создается структура с обратным вызовом и передается редактору.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Procedure FileStreamIn(lpFileName.s, Format = #SF_TEXT) 
  Protected hFile
  Protected Stream.EDITSTREAM
         hFile = CreateFile_(lpFileName, #GENERIC_READ, #FILE_SHARE_READ, #Null, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, 0)
  If hFile <> #INVALID_HANDLE_VALUE
    Stream\dwCookie = hFile
    Stream\dwError = #Null
    Stream\pfnCallback = @StreamFileIn_Callback()
    SendMessage_(hHEX, #EM_STREAMIN, Format, @Stream)
    CloseHandle_(hFile)
    SetFocus_(hHEX)
    ProcedureReturn #True
  Else
    MessageRequester("Error", "Open File Fail", #MB_OK)
    ProcedureReturn #False
  EndIf
EndProcedure



Но как передать указатель на память в место файла?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 15, 2013 12:07 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11181
Благодарил (а): 4 раз.
Поблагодарили: 414 раз.
Замени ReadFile_() на CopyMemory().

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 15, 2013 12:36 pm 
Не в сети
ассистент

Зарегистрирован: Пт мар 15, 2013 1:26 pm
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр
Попробовал вот так, но не получается.
Код:
1
2
3
Procedure StreamFileIn_Callback(*mem, pBuffer.l, NumBytes.l,pBytesRead.l)
  ProcedureReturn CopyMemory(*Mem, pBuffer.l, MemorySize(*Mem) ) ! 1
EndProcedure



Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Procedure FileStreamIn(*Mem, Format = #SF_TEXT) 
  Protected hFile
  Protected Stream.EDITSTREAM
  If *mem
    Stream\dwCookie = *mem
    Stream\dwError = #Null
    Stream\pfnCallback = @StreamFileIn_Callback()
    SendMessage_(hHEX, #EM_STREAMIN, Format, @Stream)
    CloseHandle_(hFile)
    SetFocus_(hHEX)
    ProcedureReturn #True
  Else
    MessageRequester("Error", "Open File Fail", #MB_OK)
    ProcedureReturn #False
  EndIf
EndProcedure



Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB