![]() |
eXeL@B —› Основной форум —› Дамп видео памяти |
Посл.ответ | Сообщение |
|
Создано: 10 января 2006 02:50 · Личное сообщение · #1 |
|
Создано: 10 января 2006 03:52 · Личное сообщение · #2 Не знаю можно ли просмотреть дамп видео памяти ![]() На всякий случай даю пример, как сделать дамп памяти в IceDump. Дамп памяти в IceDump 6.026: PAGEIN D BaseAddress Length FileName Например: PAGEIN D 400000 512 \??\C:\memory.dmp PAGEIN D 400000 300 C:\memory.dmp ![]() |
|
Создано: 10 января 2006 11:48 · Личное сообщение · #3 Спасибо за ответ! Я вообще пытаюсь сделать дамп видео памяти для того, чтобы вытащить текстуры из игрушки, а они походу подгружаются в видеопамять, а не основную (не эксперт в этом, но вроде логично). Дело в том, что на харде все текстуры сконвертированы в собственный формат компании, было бы еще не так все плохо, если бы они не были сжаты по их собственному алгоритму. Поэтому-то я и бросил эту идею с расшифровкой. Просто сделам предположение, что игрушка юзает распакованные текстуры, а если так, то они в оригинальном формате, что в данном случае TGA, а значит загружены в память в чистом виде. Вот я и хотел сделать дамп, чтобы все оттуда вытащить, а потом по хедерам отловить TGA файлы ![]() Хотелось бы верить, что это можно сделать ![]() ![]() |
|
Создано: 11 января 2006 02:34 · Личное сообщение · #4 |
|
Создано: 11 января 2006 03:12 · Личное сообщение · #5 |
|
Создано: 11 января 2006 06:04 · Личное сообщение · #6 Было бы здорово услышать хорошие ответы от знающих людей (например Ms-Rem). Причём не про этот конкретный случай (здесь рулит DirectX и всё! Никакая видео память на фиг не нужна.), а вообще о системе передачи пикселей в Windows от API-функции до видео памяти. =TS= пишет: У меня такое нехорошее предчуствие, что доступа к видеопамяти ты не получишь (она на борту видухи)... Бред. Ну, ты сам подумай, кто-то как-то в эту память пишет? Значит должны быть адреса. А кроме центрального процессора и его команд ничего такого и нет ![]() IN и OUT – всё... Ну а выше прерывания. Видео память тоже должна быть нормирована, вопрос только в том, есть ли единый стандарт, или каждый производитель городит свой формат (сжатие, наложение и т.п.). Честно сказать, мне даже непонятна общая система. Есть ли в Windows видео буфер? Драйвер видео карты получает полное изображение или он как раз и собирает контексты устройств? Чем принципиально отличается оверлей? Когда писал Чтиву III меня как раз понесло в эту степь, но был я тогда совсем чайником, ни хрена не смог разобрать. ----- Всем привет, я вернулся ![]() |
|
Создано: 11 января 2006 07:59 · Личное сообщение · #7 Xatrix пишет: Просто сделам предположение, что игрушка юзает распакованные текстуры, а если так, то они в оригинальном формате, что в данном случае TGA, а значит загружены в память в чистом виде. Игра работает с DX'ом а не с видюхой напрямую, поэтому почитай доки и найди функции инициализации текстур в дх, потом их похукай и снимай свои текстуры, или найди момент когда они игрой распаковываются. ----- have a nice day ![]() |
|
Создано: 11 января 2006 08:01 · Поправил: Nimnul · Личное сообщение · #8 |
|
Создано: 11 января 2006 15:23 · Личное сообщение · #9 Кто-нибудь из Вас игры на DX писал? В видео памяти может быть не всё. Ещё можно грузить поверхности и в раму. Когда же мы дебажим гаму у нас есть указатель на память, где хранится surface, это может быть и видео память. Так вот там как я помню лишь набор байтов цветов, никаких там своих форматов, тем более специфичных для драйвера (по крайней мере я ниакких anisotrophic и прочих фильтров и сжатий не использовал) нет. Так что маскимум получится получить картинки формата бмп, причём без хидера. Вот кусок памяти surface'a с самого начала. Здесь нет ни хидера, ни формата, просто байты(глубина цвета 32бита как можно заметить, гама на DirectDraw): ff ff ff 00 ff ff ff 00 b8 b8 b8 00 da da da 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ad ad ad 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 00 00 00 00 00 00 00 00 ff ff ff 00 ff ff ff 00 e2 e2 e2 00 6a 6a 6a 00 b6 b6 b6 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ba ba ba 00 6e 6e 6e 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ff ff ff 00 ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 11 января 2006 17:00 · Поправил: Xatrix · Личное сообщение · #10 Хмм, по крайней мере пища для размышления. Попробую действительно похукать DX функции, поскольку как отловить момент распаковки текстур, пока трудно себе представляю. Дамп своих дальнейших мыслей желательно оставлять здесь, т.к. совместными усилиями всегда легче, каждый может своими мыслями навести другого на другие мысли, и.т.д, пока не доберемся до истины ![]() Кстати, еще есть один момент. Текстуры-то может и распаковываются, но в каком виде? Например, исходная текстура могла быть в 24-битном формате, а сконвертирована уже в 16-битный, скажем, 16-бит "565", тогда тут уже будет сложней делать *сравнение* байтов, т.к. погрешности хоть небольшие, но будут, и в пределах 3-х битов на каждый из 3х цветов в данном случае, что вроде получается как вариация аж в 20 оттенков? Ну или около того... ![]() |
|
Создано: 11 января 2006 22:30 · Личное сообщение · #11 |
|
Создано: 12 января 2006 09:18 · Личное сообщение · #12 |
|
Создано: 12 января 2006 20:46 · Поправил: Rascal · Личное сообщение · #13 Nimnul пишет: Rascal какой нафиг указатель на видео память? Если ты про ДМА окно с аппаратной памятью видюхи, так оно находится в ринге0, какой может быть указатель в ринг0? С++ в руки и вперёд исследовать DX. Обрати внимание, что мы имеем доступ через указатель именно к поверхностям, другой вопрос, что это могут быть лишь отображения, но я показывал, что в памяти игр не хранится никаких спцифичных форматов, там просто набор байтов, а не способ капашиться в видео памяти!!! Как иначе изменив значение байтов через этот указатель изменяется содержимое видео памяти и соответственно картинка на экране??? Это по-твоему просто набор байтов не связанный свообще ни с чем, просто типа болтается, так? И где я говорил, что это указатель на видеопамять видюхи? ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 12 января 2006 21:22 · Личное сообщение · #14 Итак, раз уж пошла такая тема покопался в справочнике и вот что нашёл интересного: "Функция Lock() возвращает указатель на область памяти, занятую поверхностью, независимо от того, где поверхность находится — в системной памяти или в видеопамяти. Указатель, полученный функцией Lock(), после разблокирования поверхности становится недействительным." Отсюда я заключаю - происходит нечто вроде проецирования памяти. Nimnul, если я не прав по поводу этого вывода разъясни мне, где ошибка. ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 13 января 2006 13:53 · Поправил: Xatrix · Личное сообщение · #15 Функция lock() это чья функция? И еще раз, на что указывает указатель который она возвращает? На область памяти, занятую поверхностью? И что там можно найти? Если то что проецируется на экран, то это нам как раз таки и не нужно, так как принтскрин легче сделать ![]() П.С. думаю споры ни к чему, просто не нужно чего-то *утверждать*, чтобы другие не могли это оспаривать.... ![]() |
|
Создано: 13 января 2006 19:41 · Поправил: Rascal · Личное сообщение · #16 Xatrix пишет: Функция lock() это чья функция? DirectDraw Xatrix пишет: И еще раз, на что указывает указатель который она возвращает? На область памяти, занятую поверхностью? И что там можно найти? Отдельные поверхности, то есть участки памяти, куда загружены отденльные графические данные, спрайты, вроде так называть это можно (не утверждаю ![]() Если то что проецируется на экран, то это нам как раз таки и не нужно, так как принтскрин легче сделать Нет, это лишь составные детали, то есть например одна поверхность содержит траву, другая дерево и т.д. а прога рисует их куда надо, точнее на бэкбуфер... короче более детально читай в справочнике, ок? ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 13 января 2006 19:50 · Личное сообщение · #17 Да, и самое главное, достучаться до чужой видеопамяти не удастся, эти функции работают только через указатели, так что в принципе можно поставить бряку на эту функцию и пасти нужные сюрфы, это типа хук, но проще отловить загрузку пикчеров на сюрфейсы, т.к. далеко не всегда надо использовать lock и указатель на поверхность может и не всплыть. ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 14 января 2006 04:30 · Личное сообщение · #18 Rascal >Да, и самое главное, достучаться до чужой видеопамяти не удастся Во-первых игры пишутся не только на DX но и на OpenGL. В OGL достучаться до видеопамяти можно с помощью glReadPixel. Xatrix>Я вообще пытаюсь сделать дамп видео памяти для того, чтобы вытащить текстуры из игрушки Чтобы вытащить текстуры нужно хукать фунции открытия файлов (конечно если текстуры не процедурные). ![]() |
|
Создано: 14 января 2006 11:33 · Личное сообщение · #19 inferno_mteam пиÑеÑ: Во-первых игры пишутся не только на DX но и на OpenGL. В OGL достучаться до видеопамяти можно с помощью glReadPixel. ДА и драу тоже можно, если найти указатель на поверхность и вызвать через него ->Lock(), просто я никода не пробовал и не знаю, может там подводные камни есть. А openGL там он на апи, там ещё проще inferno_mteam пиÑеÑ: Чтобы вытащить текстуры нужно хукать фунции открытия файлов (конечно если текстуры не процедурные). Файлы зашифрованы своим алгоритмом, нужно ловить как раз уже загрузку битмапов на поверхность, просто открытие не прокатит. И что в ней используется- DirectDraw, OpenGL, Direct3D??? ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 14 января 2006 13:22 · Поправил: inferno_mteam · Личное сообщение · #20 |
|
Создано: 15 января 2006 14:37 · Личное сообщение · #21 |
|
Создано: 16 января 2006 17:46 · Личное сообщение · #22 Xatrix пишет: Что-то у меня подозрения что я не смогу похукать функции DX, т.к. они не апишные. Там че, какая-то хитрость? Чую проблемы будут DirectDraw и Direct3D сделаны на COM архитектуре, поэтому самый простой вариант написать программку, в которой вызываются некоторые функции, которые нужны, так найдутся адреса в библиотеке, DD или D3D, пометить их а потом в остальных программах следить за обращениями к этим адресам. ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 17 января 2006 14:17 · Личное сообщение · #23 |
|
Создано: 19 января 2006 12:58 · Личное сообщение · #24 |
|
Создано: 19 января 2006 13:01 · Поправил: Rascal · Личное сообщение · #25 |
![]() |
eXeL@B —› Основной форум —› Дамп видео памяти |