|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 29, 2003 14:02:03 Я вызываю ReadProcessMemory на свой процесс. Все проходит нормально. Но, когда я сделал библиотеку, которая выполняет те же действия, что выполнялись в моем процессе(я делаю перехватчик вызовов функций из библиотек) и глобализировал ее на все доступные мне по OpenProcess процессы я заметил, что у половины из них rpm возвращает 0. Меня это сильно удивило и я проверил GetLastError. Оказалось, что у большей части приложений это 12b(Запрос ReadProcessMemory или WriteProcessMemory был выполнен только частично). Я подумал, что может я попадаю на область памяти, где у региона нету PAGE_READ(абсурд, конечно, но кто знает, может там PAGE_NOACCESS) и вызвал VirtualProtect. С ним, вообще, непонятная фишка получилась: он ИНОГДА тоже возвращает 0, дальнейшее GetLastError возвращает кучу разных ошибок(по-моему вида 4), однажды даже вернула ошибку сетевой платы 8). Благодарю тех, кто до сюда дочитал. Я покажу только часть кода, если понадобится больше напишите, я остальную покажу. ; Находим адрес IMAGE_IMPORT_BY_NAME mov ebx, itd.u1.AddressOfData add ebx, modbase ; Так как размер IMAGE_IMPORT_BY_NAME не определен, читать будем, исходя из длины параметра invoke lstrlen, funcname mov edi, eax add edi, 3 ; Читаем... invoke VirtualProtect, ebx, edi, PAGE_READWRITE, ADDR op .if eax==0 invoke GetLastError int 03h ret .endif invoke ReadProcessMemory, hProc, ebx, ADDR iibn, edi, ADDR br .if eax==0 invoke GetLastError int 03h invoke MessageBox,0,SADD("7"),ADDR me.szModule,MB_OK mov eax, 7 ret .endif В чем может быть ошибка? Я понимаю я не дал полной картины, но чисто с теоретической точки зрения, что это может быть? |
|
|
Дата: Июл 29, 2003 14:55:15 Да, я сейчас выяснил, что IsBadReadPtr возвращает 0, то есть VirtualProtect не нужен, вообще. Хм... тогда более, чем странно =)... Да и еще я пробую энто под ХР без sp. |
|
|
Дата: Авг 4, 2003 14:24:51 Составь карту памяти при помощи VirtualQueryEx. Может ReadProcessMemory прекращает чтение при достижении границы региона. То есть, если мы начали чтение в странице с атрибутами R/W, а следущая страница имеет только атрибут R, то она не будет прочитана так как относится к другому региону?! |
|
|
Дата: Авг 4, 2003 15:11:59 Ок, а если даже так, то придется делать 2 раза ReadProcessMemory, чтобы пофиксить? А если там более, чем 2 региона? Есть ли алгоритмы, которые осуществляют 100% чтение из области памяти? |
|
|
Дата: Авг 5, 2003 08:52:02 · Поправил: Black_mirror Можешь скинуть мне программу на мыло? Регионы похоже здесь не причем, а вот воспроизвести такой баг у меня не получилось. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.047 |