| Разработка и ромхакинг > Ромхакинг и программирование |
| мод Gens бряки на запись в память |
| (1/1) |
| ЯковлевВиктор:
Вообщем сделал мод на базе Генса - теперь можно ставить бряки на запись в память! Брать отсюда там же руководство: http://slil.ru/25647975 |
| HoRRoR:
Неплохо бы вообще доработать его до состояния полноценного дебаггера... |
| GManiac:
Чем ты его компилишь? У меня вылезает или ошибка с фразой "Assembling sz80.asm" или ещё какая-нибудь :( Пробовал разными Visual Studio разные генсы. upd: Правильнее спросить, как компилил и какой именно исходник? Смотрю, в эбауте 2.11 написано. Последний генс 2.14 с оф. сайта скомпилить удалось, это несложно... просто я в первый раз оторвал папку win32 от других и получилось расхождение путей... Gens+ не получилось, но щас наткнулся на старую тему про Gens Surreal, там ты писал, что и у тебя не получается из-за недокомплекта. Ладно, Gens+ оставим. А вот с Gens 2.10 от Никодима, что на Шедевре лежит, у которого проект ещё для 6-й версии VS, проблемы: компилирую xxxx68k, а когда пытаюсь сбилдить gens.dsw, вылезает эта ошибка с "Assembling z80.asm". Оказывается, Visual Studio не видит nasm (может, его как-то прикрутить надо?). Самим nasm'ом можно скомпилить .asm-ы в .obj (nasmw -f win32 xxx.asm), но полученные .obj Visual Studio тоже не видит и пытается скомпилить по-своему :( upd2: nasm прикрутил, правда, файлы .inc находились в той же папке проекта, что и .asm, и он их обрабатывал как .asm. С этим разобрался, но полезли ошибки линковщика. Даю нужные файлы, вылезают новые ошибки. Что за?.. >:( |
| ЯковлевВиктор:
Компилю Visual Studio 2003, исходники взял с zophar, 2.11!все правильно, что ошибка вылазиет! Я тоже сначало мучался,но потом разобрался! Последовательность такая: Я взял исходники генса, взял все файлы obj относящиеся к асемблерным из исходников Gens32(например z80.asm значит нужен z80.obj)Можешь конечно и сам скомпилить Nasm-ом! выбрал Realese! Debug можешь даже не выбирать, компилятору не хватает какой то фени для сега сд!Нажимаем кнопку run и ждем компиляции и сразу ошибка на Assembling z80.asm! Теперь лезем в исходники в создавшуюся папку Realese кидаем все объектные файлы готовые или созданные насмом и снова жмешь run!Вот и все все стало компилиться!Ни в коем случае не нажимай Rebuild или Build - иначе все объектные файлы потрет и ошибка вылезит вновь! Кстате GManiac дай ссылку на исходники Gens 2.10 от Никодима, а то там только нашел релиз, а исходники не нашел! Чтоб полноценный дебаггер сделать нужно в в исходниках ассемблера копаться, а это уже другой уровень!Хорошо, что хоть это получилось! Для взлома пока и этого хватит! |
| HardWareMan:
1. И главное. Если у автора компилится, то пусть будет ласка и даст бинарник. Ничего в этом зазорного нет и тем, кто не хочет влезать в дебри С++ а просто хочет юзать программу. 2. Запись на адрес - это круто, но не менее нуэная опция и на чтение из адреса. Т.е. в сумме - просто обращение по адресу (но разделение по чтение/запись - это буде ваще финиш!). |
| ЯковлевВиктор:
1. так я ж вроде ссылку дал где все это добро лежит? 2. Чтение самое проблематичное как его сделать ума пока не приложу! Единственное, что на ум приходит смотреть по ходу работы весь код, а это вообще финишь - ибо надо не только смотреть все коды команд чтения по адресу, но и смотреть, что в регистрах, т.к. бывает, что адрес как сумма числа в регистре+ константа = адресу откуда читать! С записью все просто- сечешь изменения в озу и все! |
| HardWareMan:
--- Цитата: ЯковлевВиктор от 04 Апрель 2008, 06:00:50 ---2. Чтение самое проблематичное как его сделать ума пока не приложу! Единственное, что на ум приходит смотреть по ходу работы весь код, а это вообще финишь - ибо надо не только смотреть все коды команд чтения по адресу, но и смотреть, что в регистрах, т.к. бывает, что адрес как сумма числа в регистре+ константа = адресу откуда читать! --- Конец цитаты --- А ты как думал? Только перехват функций ReadByte/ReadWord/ReadLong и WriteByte/WriteWord/WriteLong (или как они называются в исходниках Генса). --- Цитата: ЯковлевВиктор от 04 Апрель 2008, 06:00:50 ---С записью все просто- сечешь изменения в озу и все! --- Конец цитаты --- Тьфу! Это ацтой. А если я запишу число, которое = числу в памяти? Ты не отследишь, а обращение было. Фтопку такой бряк. Лучше напрягись и сделай проверку в соответствующие функции обращения к памяти, тогда это будет труЪ бряк: ведь не важно, когда проц обратился к памяти - при чтении опкода, части операндов или непосредственно за данными - это все попадает под бряк ибо мне как раз это и нужно отследить. Но вешай это толькона М68К, ато обычно все эмулируемое оборудование использует одни и те же подпрограммы эмуляции шины, а обращение DMA нам не нужно. |
| ЯковлевВиктор:
ну раз знаешь как это сделать тебе и карты в руки - вперед! |
| HardWareMan:
--- Цитата: ЯковлевВиктор от 04 Апрель 2008, 07:57:30 ---ну раз знаешь как это сделать тебе и карты в руки - вперед! --- Конец цитаты --- Я Дельфятник. Так что в царство С не полезу. Если тока не буду вынужден. |
| ЯковлевВиктор:
мож GManiac полезет! Перехват этих функций можно сделать, но все это будут работать только если бушешь находится в дебаггере и рулить кнопками типа Т! А в не дебаггера пресс- там пофреймовая обработка и отловить только в асм лезть! |
| GManiac:
--- Цитата ---Компилю Visual Studio 2003, исходники взял с zophar, 2.11!все правильно, что ошибка вылазиет! Я тоже сначало мучался,но потом разобрался!... и до конца цитаты --- Конец цитаты --- Хех, а ведь это неправильно с точки зрения билдинья. Я потом допёр, что надо интегрировать nasm в VS, для этого надо на папке проекта (в самом VS) Asm Sources нажать правой кнопкой -> Settings, поставить галочку "Use Custom setinngs" и в правой вкладке прописать параметры запуска nasm и параметры для аутпута (VS требует). Тот пример, где я прочитал про интеграция, был кривоватый, я взял строку из последнего исходника Генса 2.14 (с оф. сайта), там написано в одном из dsp-файлов (для BeOS): --- Код: ---"$(OutDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" \nasm\nasmw -i $(InputDir) $(InputDir)\$(InputName).asm -f win32 -o $(OutDir)\$(InputName).obj --- Конец кода --- Оттуда и вытащил нужные строки. VS стал компилить асмы, но почему-то компилил .inc-файлы как отдельные файлы, хотя их надо просто включить в те асмы, которые их вызывают. Пришлось тоже повозиться. Потом стал требовать main68k.obj, я их взял из Starscream. А потом он стал гнать про ошибки внутри obj... --- Цитата ---Кстате GManiac дай ссылку на исходники Gens 2.10 от Никодима, а то там только нашел релиз, а исходники не нашел! --- Конец цитаты --- Там в конце страницы с генсом есть ссылка: http://shedevr.org.ru/utils/Files/Gens210-mk2-src.zip Насчёт нормального перехвата: в Gens 2.12 Tracer есть лог по факту чтения/записи. Его вместе с исходниками можно найти на http://www.romhacking.com/ . Может, посмотришь, как они там сделали? --- Цитата ---мож GManiac полезет! --- Конец цитаты --- Ага, щаз, добавлю "Hello, World" в генс :) Я даже на Дельфи такие программы не писал, что про Си говорить. |
| CaH4e3:
Функции чтения-записи сидят в асмовом ядре генса, следовательно из асма необходимо вызывать внешнюю процедуру-хук, сидящую в ГУИ части и отвечающую за обработку бряков. Для человека, знакомого с принципом линковки объектных файлов и формирования имен в вижуалстудио, не составит особого труда. Лично я в свое время не осилил. ;) Собственно, именно так и сделано в генстрейсере. |
| HardWareMan:
--- Цитата: CaH4e3 от 04 Апрель 2008, 12:37:27 ---Функции чтения-записи сидят в асмовом ядре генса, следовательно из асма необходимо вызывать внешнюю процедуру-хук, сидящую в ГУИ части и отвечающую за обработку бряков. Для человека, знакомого с принципом линковки объектных файлов и формирования имен в вижуалстудио, не составит особого труда. Лично я в свое время не осилил. ;) Собственно, именно так и сделано в генстрейсере. --- Конец цитаты --- Зачем ГУЁвый калбак? Пусть оно там и будет. Просто оно должно юзать свою БД по брякам и взводить флаг отладчика (или имитация нажатия Menu=>Debugger=>M68K). А вот управление БД да, ГУЁвое и незатейливое (достаточно как БД по GG кодам). Кто сделает это? |
| CaH4e3:
Трейсер и все остальное находятся в ГУИ части. У него с асмовой частью расшарены только функции хуков и несколько переменных, которые как раз и взводятся в ядре генса и оттуда же вызываются хуки. В асме только низкоуровневые функции, перегружать его чем-то лишним нет необходимости, все остальное, включая бд по брякам, прекрасно пишется в сишной части. Тем более, фактически, на уровне кода после линковки нет никакой разницы, где изначально был хук - функции компилируются, линкуются и вызываются одинаково. Я попробовал собрать трейсер сам по себе, собираться он, естественно, просто так не хочет, но проблемы не в насме и не в объектах, а уже в коде... Кайлера ругается на отсутствие идентификаторов типов, хотя они прописаны макросами. ;) |
| ЯковлевВиктор:
Скомпилил Tracer! Разобрался че нового! Теперь буду к хукам свои бряки прикручивать! Как только сделаю....выложу! |
| HardWareMan:
Вот это уже по-нашему! |
| Навигация |
| Главная страница сообщений |