Сейчас на форуме: YDS, _MBK_, user99 (+10 невидимых)

 eXeL@B —› Основной форум —› Дамп видео памяти
Посл.ответ Сообщение

Ранг: 9.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 января 2006 02:50
· Личное сообщение · #1

Добрового времени суток,


скажите пожалуйста, можно ли сделать сделать дамп видео пямяти (видео RAM) ? Может даже в сайсе? Или необязателльно дамп, но как-нибудь хоть посмотреть содержимое видео памяти в какой-то конкретный промежуток времени?

Если можно, каким-образом?



Ранг: 7.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 января 2006 03:52
· Личное сообщение · #2

Не знаю можно ли просмотреть дамп видео памяти, но есть плагины к SoftIce, типа IceDump, IceExt. IceDump для SoftICE, до версии 4.2.7, вводит команду, которая сохраняет информацию из оперативной памяти компьютера в файл. IceExt, в принципе, делает тоже самое, плюс еще дамп окна SoftIce’a.
На всякий случай даю пример, как сделать дамп памяти в IceDump.
Дамп памяти в IceDump 6.026: PAGEIN D BaseAddress Length FileName

Например: PAGEIN D 400000 512 \??\C:\memory.dmp
PAGEIN D 400000 300 C:\memory.dmp



Ранг: 9.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 января 2006 11:48
· Личное сообщение · #3

Спасибо за ответ!

Я вообще пытаюсь сделать дамп видео памяти для того, чтобы вытащить текстуры из игрушки, а они походу подгружаются в видеопамять, а не основную (не эксперт в этом, но вроде логично). Дело в том, что на харде все текстуры сконвертированы в собственный формат компании, было бы еще не так все плохо, если бы они не были сжаты по их собственному алгоритму. Поэтому-то я и бросил эту идею с расшифровкой. Просто сделам предположение, что игрушка юзает распакованные текстуры, а если так, то они в оригинальном формате, что в данном случае TGA, а значит загружены в память в чистом виде. Вот я и хотел сделать дамп, чтобы все оттуда вытащить, а потом по хедерам отловить TGA файлы

Хотелось бы верить, что это можно сделать




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 11 января 2006 02:34
· Личное сообщение · #4

Ну в видео памяти там уже не TGA, я так думаю. Формат важен для расстановки точек нужных цветов в нужных местах. Проще делать снимки экрана. Если не прав поправьте

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 251.8 (наставник), 17thx
Активность: 0.120
Статус: Участник
Seeker

Создано: 11 января 2006 03:12
· Личное сообщение · #5

У меня такое нехорошее предчуствие, что доступа к видеопамяти ты не получишь (она на борту видухи)...

-----
DREAMS CALL US




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 11 января 2006 06:04
· Личное сообщение · #6

Было бы здорово услышать хорошие ответы от знающих людей (например Ms-Rem).
Причём не про этот конкретный случай (здесь рулит DirectX и всё! Никакая видео память на фиг не нужна.), а вообще о системе передачи пикселей в Windows от API-функции до видео памяти.

=TS= пишет:
У меня такое нехорошее предчуствие, что доступа к видеопамяти ты не получишь (она на борту видухи)...

Бред.
Ну, ты сам подумай, кто-то как-то в эту память пишет?
Значит должны быть адреса.
А кроме центрального процессора и его команд ничего такого и нет .
IN и OUT – всё... Ну а выше прерывания.

Видео память тоже должна быть нормирована, вопрос только в том, есть ли единый стандарт, или каждый производитель городит свой формат (сжатие, наложение и т.п.).

Честно сказать, мне даже непонятна общая система.
Есть ли в Windows видео буфер?
Драйвер видео карты получает полное изображение или он как раз и собирает контексты устройств?
Чем принципиально отличается оверлей?

Когда писал Чтиву III меня как раз понесло в эту степь, но был я тогда совсем чайником, ни хрена не смог разобрать.

-----
Всем привет, я вернулся





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 11 января 2006 07:59
· Личное сообщение · #7

Xatrix пишет:
Просто сделам предположение, что игрушка юзает распакованные текстуры, а если так, то они в оригинальном формате, что в данном случае TGA, а значит загружены в память в чистом виде.


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

-----
have a nice day





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 11 января 2006 08:01 · Поправил: Nimnul
· Личное сообщение · #8

дамп видюхи это гон, я слышал что текстуры там в своем формате хранятся тоже пожатом. в любом случае директу ты эти дампы потом не скормиш. У каждой видюхи свой формат, и знает о нем только драйвер.

-----
have a nice day





Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 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

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 9.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 января 2006 17:00 · Поправил: Xatrix
· Личное сообщение · #10

Хмм, по крайней мере пища для размышления. Попробую действительно похукать DX функции, поскольку как отловить момент распаковки текстур, пока трудно себе представляю.

Дамп своих дальнейших мыслей желательно оставлять здесь, т.к. совместными усилиями всегда легче, каждый может своими мыслями навести другого на другие мысли, и.т.д, пока не доберемся до истины

Кстати, еще есть один момент. Текстуры-то может и распаковываются, но в каком виде? Например, исходная текстура могла быть в 24-битном формате, а сконвертирована уже в 16-битный, скажем, 16-бит "565", тогда тут уже будет сложней делать *сравнение* байтов, т.к. погрешности хоть небольшие, но будут, и в пределах 3-х битов на каждый из 3х цветов в данном случае, что вроде получается как вариация аж в 20 оттенков? Ну или около того...




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 11 января 2006 22:30
· Личное сообщение · #11

Rascal какой нафиг указатель на видео память? Если ты про ДМА окно с аппаратной памятью видюхи, так оно находится в ринге0, какой может быть указатель в ринг0?

-----
have a nice day




Ранг: 24.4 (новичок)
Активность: 0.020
Статус: Участник

Создано: 12 января 2006 09:18
· Личное сообщение · #12

Если , изображение пожато собственным алгоритмом , то оно полюбому должно разжиматься CPU а ни чем-то другим , так что в определенный момент времени оно должно быть в RAM , покрайней мере в сжатом виде оно туда грузится




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 12 января 2006 20:46 · Поправил: Rascal
· Личное сообщение · #13

Nimnul пишет:
Rascal какой нафиг указатель на видео память? Если ты про ДМА окно с аппаратной памятью видюхи, так оно находится в ринге0, какой может быть указатель в ринг0?

С++ в руки и вперёд исследовать DX. Обрати внимание, что мы имеем доступ через указатель именно к поверхностям, другой вопрос, что это могут быть лишь отображения, но я показывал, что в памяти игр не хранится никаких спцифичных форматов, там просто набор байтов, а не способ капашиться в видео памяти!!! Как иначе изменив значение байтов через этот указатель изменяется содержимое видео памяти и соответственно картинка на экране??? Это по-твоему просто набор байтов не связанный свообще ни с чем, просто типа болтается, так? И где я говорил, что это указатель на видеопамять видюхи?

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 12 января 2006 21:22
· Личное сообщение · #14

Итак, раз уж пошла такая тема покопался в справочнике и вот что нашёл интересного:
"Функция Lock() возвращает указатель на область памяти, занятую поверхностью,
независимо от того, где поверхность находится — в системной памяти или в видеопамяти.

Указатель, полученный функцией Lock(), после разблокирования поверхности становится
недействительным."

Отсюда я заключаю - происходит нечто вроде проецирования памяти. Nimnul, если я не прав по поводу этого вывода разъясни мне, где ошибка.

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 9.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 января 2006 13:53 · Поправил: Xatrix
· Личное сообщение · #15

Функция lock() это чья функция? И еще раз, на что указывает указатель который она возвращает? На область памяти, занятую поверхностью? И что там можно найти? Если то что проецируется на экран, то это нам как раз таки и не нужно, так как принтскрин легче сделать

П.С. думаю споры ни к чему, просто не нужно чего-то *утверждать*, чтобы другие не могли это оспаривать....




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 13 января 2006 19:41 · Поправил: Rascal
· Личное сообщение · #16

Xatrix пишет:
Функция lock() это чья функция?

DirectDraw

Xatrix пишет:
И еще раз, на что указывает указатель который она возвращает? На область памяти, занятую поверхностью? И что там можно найти?

Отдельные поверхности, то есть участки памяти, куда загружены отденльные графические данные, спрайты, вроде так называть это можно (не утверждаю, т.е. текстуры и прочее, картинки олблаков, противников и т.д.

Если то что проецируется на экран, то это нам как раз таки и не нужно, так как принтскрин легче сделать
Нет, это лишь составные детали, то есть например одна поверхность содержит траву, другая дерево и т.д. а прога рисует их куда надо, точнее на бэкбуфер... короче более детально читай в справочнике, ок?

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 13 января 2006 19:50
· Личное сообщение · #17

Да, и самое главное, достучаться до чужой видеопамяти не удастся, эти функции работают только через указатели, так что в принципе можно поставить бряку на эту функцию и пасти нужные сюрфы, это типа хук, но проще отловить загрузку пикчеров на сюрфейсы, т.к. далеко не всегда надо использовать lock и указатель на поверхность может и не всплыть.

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 28.6 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 14 января 2006 04:30
· Личное сообщение · #18

Rascal
>Да, и самое главное, достучаться до чужой видеопамяти не удастся
Во-первых игры пишутся не только на DX но и на OpenGL. В OGL достучаться до видеопамяти можно с помощью glReadPixel.
Xatrix>Я вообще пытаюсь сделать дамп видео памяти для того, чтобы вытащить текстуры из игрушки
Чтобы вытащить текстуры нужно хукать фунции открытия файлов (конечно если текстуры не процедурные).




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 14 января 2006 11:33
· Личное сообщение · #19

inferno_mteam пишет:
Во-первых игры пишутся не только на DX но и на OpenGL. В OGL достучаться до видеопамяти можно с помощью glReadPixel.


ДА и драу тоже можно, если найти указатель на поверхность и вызвать через него ->Lock(), просто я никода не пробовал и не знаю, может там подводные камни есть. А openGL там он на апи, там ещё проще

inferno_mteam пишет:
Чтобы вытащить текстуры нужно хукать фунции открытия файлов (конечно если текстуры не процедурные).

Файлы зашифрованы своим алгоритмом, нужно ловить как раз уже загрузку битмапов на поверхность, просто открытие не прокатит.

И что в ней используется- DirectDraw, OpenGL, Direct3D???

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 28.6 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 14 января 2006 13:22 · Поправил: inferno_mteam
· Личное сообщение · #20

.



Ранг: 9.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 15 января 2006 14:37
· Личное сообщение · #21

Ок спасибо парни.

Там UI сделан на DDraw ну а сама игра на Direct3D.

П.С. я все никак не доберусь попробовать, просто пока прогу одну дописываю. Что-то у меня подозрения что я не смогу похукать функции DX, т.к. они не апишные. Там че, какая-то хитрость? Чую проблемы будут




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 16 января 2006 17:46
· Личное сообщение · #22

Xatrix пишет:
Что-то у меня подозрения что я не смогу похукать функции DX, т.к. они не апишные. Там че, какая-то хитрость? Чую проблемы будут


DirectDraw и Direct3D сделаны на COM архитектуре, поэтому самый простой вариант написать программку, в которой вызываются некоторые функции, которые нужны, так найдутся адреса в библиотеке, DD или D3D, пометить их а потом в остальных программах следить за обращениями к этим адресам.

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 9.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 января 2006 14:17
· Личное сообщение · #23

ты гений Спасибо




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 19 января 2006 12:58
· Личное сообщение · #24

Xatrix пишет:
ты гений Спасибо

Да не, просто острый ум и богатая фантазия

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 19 января 2006 13:01 · Поправил: Rascal
· Личное сообщение · #25

Осталось D3D поучить Всё, пошёл теорвер учить

-----
Недостаточно только получить знания:надо найти им приложение



 eXeL@B —› Основной форум —› Дамп видео памяти
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати