PDA

Просмотр полной версии : Чем получить запись (карту) использования памяти?



TomCaT
28.03.2021, 21:43
Кто знает, есть ли в отладчике какого-то эмулятора более общий механизм отслеживания использования ячеек памяти? А именно: по аналогии с бряками на чтение/запись определенной ячейки, только вместо бряков - например, увеличивается на 1 счетчик использования ячейки, и счетчики - сразу по всей памяти. Чтобы получить карту использования ячеек. В частности, чтобы проверить память на неиспользуемые при работе программы места.
Если карту счетчиков можно будет по команде запускать, останавливать, сбрасывать в 0, сохранять и загружать (не в файл снапшота, а в своего типа файл), то было бы вообще замечательно.

Black Cat / Era CG
28.03.2021, 21:55
А еще помечать ячейки: не использовано, произошла запись/чтение, произошло исполнение. Исполнение перекрывает запись/чтение. Тогда можно, погоняв прогу, отделить исполняемый код и данные.

TomCaT
28.03.2021, 22:40
Да, вот и еще применение. Я думал, что можно бы отделить счетчик выполнений от счетчика чтений, но потом решил, что все-таки нет смысла. А смысл действительно мог быть.
Я-то хотел применить для того, чтобы, погоняв прогу, найти неиспользуемые ею места, куда можно прицепить, например, менеджер памяти. Даже, если с ходу неиспользуемых мест не будет, счетчики могут показать редко используемые, с которыми, при нехватке места, тоже можно пошаманить без заметного урона.

goodboy
29.03.2021, 10:33
кто-то делал что-то подобное для unreal`a, но найти на форуме малореально.
ещё вроде летаргик делал что-то подобное в эмуле под ulax

CityAceE
29.03.2021, 11:38
В частности, чтобы проверить память на неиспользуемые при работе программы места.
В эмуляторе Fuse есть возможность профайлинга: Menu -> Machine -> Profiler.
Загружаешь игру, запускаешь профайлер, играешь, тыкаешь по менюшкам и т.д., пытаясь вызвать весь возможный код. На выходе получаешь карту использованного кода.

zebest
29.03.2021, 12:04
Без логов, но иногда же лучше один раз увидеть? :)
https://s.micp.ru/n4qLQ.jpg

Bedazzle
29.03.2021, 14:02
SpecEmu сохраняет 64кб флагов.

bit 6/5 # stack write/read
bit 4/3 # write word/byte
bit 2/1 # read word/byte
bit 0 # execute

TomCaT
29.03.2021, 21:13
Fuse - так понимаю, получаем список в текстовом виде, два столбца из адресов и ... количества обращений? По наблюдениям, обращения не разделяются по типу, это немного суживает его применения. И при исполнении команды в список попадает только адрес начала команды - а вот это немного осложняет анализ. Конечно, на мелком масштабе это не будет заметно, просто массив, испещренный дырками разного размера...

SpecEmu вроде бы дает подробную картину в бинарном виде, но не ведет счетчиков.

И в обоих случаях, видимо, нет учета текущей страницы при работе с медленной памятью.

zebest, а откуда эти скрины? Жаль, что там нет кнопки Save.

CityAceE
29.03.2021, 23:04
Fuse - так понимаю, получаем список в текстовом виде, два столбца из адресов и ... количества обращений? По наблюдениям, обращения не разделяются по типу, это немного суживает его применения. И при исполнении команды в список попадает только адрес начала команды - а вот это немного осложняет анализ. Конечно, на мелком масштабе это не будет заметно, просто массив, испещренный дырками разного размера...
Тем не менее, пакет skoolkit, опираясь на составленную Fuse карту, практически безошибочно дизассемблириует код, разделяя его собственно на исполняемый код и данные.

Bedazzle
30.03.2021, 10:56
Тем не менее, пакет skoolkit, опираясь на составленную Fuse карту, практически безошибочно дизассемблириует код, разделяя его собственно на исполняемый код и данные.

Он не только Fuse, SpecEmu карту тоже умеет.
Но к примеру, Skoolkit фигню с данными делает, когда пытается впихнуть текстовые строки. Например, получаем что-то вроде

DEFB $00,$FF,$FF,$FF,$80,$80,$F8,$00
DEFB $00,$FE,$FC,$F8,$30,$20,$00,$03
DEFB $01,$08,$18,$3F,$7F,$FF,$00,$FC
DEFB $FE,$1E,$1E,$FE,$FC,$F8,$00

DEFM "88888"

DEFB $7C,$FE,$00

DEFM "pppppppp"

DEFB $19

DEFM "8><93'"

DEFB $00,$FC,$DE,$CF,$C7,$C3,$E1,$F0
DEFB $00,$FF,$FF,$70,$B9,$DF,$EF,$F7
DEFB $78,$F3,$F1,$08,$38,$BB,$DB,$3B


Кстати, пробегала ещё такая интересная штука. Жалко, автор пропал, и на потыкивания не отвечает:
https://spectrumcomputing.co.uk/forums/viewtopic.php?p=30474#p30474