![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
somewhere else
Участник клуба
Регистрация: 17.07.2008
Сообщений: 1,409
|
![]() Код:
![]() Не пойму что тут за чудеса такие происходят с памятью... Честно говоря проблема с выделенно памятью у меня давно - просто старался не пользоватся выделением памяти, а вот сейчас уже нужно. Дополнительно дам свою конфигурацию: Intel Core 2 E8200 2.66 @ 3.6 Ghz Corsair XMS2 800Mhz 5-5-5-18 @900 5-5-5-15 Gigabyte GA-P35 DS3
"Тяжело в учении, легко в бою" - А.В. Суворов
|
![]() |
![]() |
![]() |
#2 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
первое что хочется сказать функции GlobalAlloc и LocalAlloc остались в Win32 остались только из соображений совместимости. Поэтому лучше юзать VirtualAlloc (или HeapAlloc, если идёт работа с маленькими кусками памяти).
во-вторых, что вообще надо сделать? в-третьих, Код:
но лучше всего ответить на вопрос: что вообще нужно сделать? Последний раз редактировалось rpy3uH; 17.02.2009 в 19:53. |
![]() |
![]() |
![]() |
#3 |
somewhere else
Участник клуба
Регистрация: 17.07.2008
Сообщений: 1,409
|
![]()
Это самый простой пример СМК должен быть. Нужно считать во внутреннее хранилище функцию, потом ее перевести в 16 -ричный текст(как в hex-редакторах) и вывести в MessageBox-е. Проблема в том что хоть в память что то записывается, но там какая то гадость, посмотрите на то что выдает MSGBOX. Там ведь должен быть C3 и 511 00.
"Тяжело в учении, легко в бою" - А.В. Суворов
|
![]() |
![]() |
![]() |
#4 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
тебе надо так
Код:
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 05.12.2007
Сообщений: 236
|
![]()
и просто как совет, если Вы и так находитесь в контексте нужного процесса то лучше не использовать ReadProcessMemory чисто исходя из производительности. Лучше сразу читать по адресу в нужных местах используя VirtualProtect
|
![]() |
![]() |
![]() |
#6 |
somewhere else
Участник клуба
Регистрация: 17.07.2008
Сообщений: 1,409
|
![]()
Чудеса в решете... Просмотрел всю процедуру перевода из 16-ричных цифр в текст отладчиком и увидел такой ужас, оказывается в pBuff0 изначально лежат вместо нулей, 33 и 34, почему -непонятно. Дальше больше. Выделение памяти разными способами ни к чему не привело - все неизменно. Сначала подумал что функция ReadProcessMemory, во время выполнения меня для памяти права доступа, закомментировал ее - толку никакого, всё те же 33 и 34 остались. Теперь у меня вопрос. Можно ли как то в OllyDBG посмотреть содержимое сегментных регистров?(Вернее той памяти дескрипторы на которую в них лежат) Если я правильно понимаю - все сегментные регистры адресуют одно и тоже адресное пространство? Да кстати, если записать содержимое pBuff0 до процедуры перевода и до записи в нее, дампа функции(напомню я записываю именно функцию Func, то в файле окажутся нули. Но это полбеды -после процедуры в файл ничего не записывается, больше того при записи данных из pBuff0 до записи в него дампа функции, программа падает, но данные всё таки в файл записываются.
"Тяжело в учении, легко в бою" - А.В. Суворов
Последний раз редактировалось Ivan_32; 21.02.2009 в 05:01. |
![]() |
![]() |
![]() |
#7 | |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]() Цитата:
кнопка "М" на панели инструментов |
|
![]() |
![]() |
![]() |
#8 |
somewhere else
Участник клуба
Регистрация: 17.07.2008
Сообщений: 1,409
|
![]() Код:
Получается так: в файле на который открыт хендл hFile0 ( в него записывается дамп функции) содержится именно то что надо. Следовательно получается что эти самые 33 и 34 записываются, прямо во время выполнения функции перевода, но это не так - я прогонял отладчиком версию без записи функции в файл и там ясно было видно что в pBuff0 лежат эти самые 33 и 34. Короче мистика. Но вот в чем проблема, после функции записи в файл тоесть буквально после этой строки: invoke WriteFile,hFile0,pBuff0,511,0,0 программа падает. Вот мне бы хотелось выяснить что является причиной. Пожалуйста скомпилируйте это программу у себя, тут весь исходник есть и посмотрите как она будет вести себя у вас. Заранее благодарен. Вот еще на всякий случай данные о падении программы: Код:
"Тяжело в учении, легко в бою" - А.В. Суворов
|
![]() |
![]() |
![]() |
#9 |
somewhere else
Участник клуба
Регистрация: 17.07.2008
Сообщений: 1,409
|
![]()
Заранее прошу прощения за дабл пост - последний мой пост можно удалить, он уже не нужен.
Сделал вот такую вот нехитрую программку. Все чудесно-расчудесно работает и память мою никто и в помине не трогает. НО, есть одна маленькая проблема. Последний оппкод (RET) C3 дополнен еще и 2 нулями - 00. Короче вместо скажем B8 0000 0000 C3 у меня получается B8 0000 0000 C3 00. Конечно это не критично но как минимум неприятно. Где у меня ошибка? Прикреплю весь проект с исходником. Да кстати этот 00 появляется в самом конце функции то есть идет код функции а после него нолик этот. И что самое странное он не во время перевода в 16-ричный текст появляется. То есть вариант что был прочитан лишний байт из vMemory можно исключить.
"Тяжело в учении, легко в бою" - А.В. Суворов
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
c++ Builder, проблема с памятью | Ламер_001 | C++ Builder | 9 | 22.11.2008 11:59 |
Проблема с памятью в С++ | rJIaBkoM | Помощь студентам | 1 | 14.06.2008 14:25 |
Определение выделенной ячейки в таблице в Delphi | Гео | Помощь студентам | 3 | 13.06.2008 14:51 |
Что будет с выделенной памятью? | Sibedir | Общие вопросы Delphi | 9 | 18.01.2008 13:57 |
доступ к элементам выделенной строки в DBGrid | yulia | БД в Delphi | 2 | 12.12.2007 12:51 |