Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2007, 03:05   #1
woodyfon
 
Регистрация: 21.08.2007
Сообщений: 6
Вопрос Где можно найти исходники простого дизассемблера?

Где можно найти исходники простого дизассемблера с функциями отображения кода и его редактирования и сохранения, компиляции?
woodyfon вне форума Ответить с цитированием
Старый 21.08.2007, 10:17   #2
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

просто движок тут http://patkov-site.narod.ru/lib.html
пыщь
JTG вне форума Ответить с цитированием
Старый 22.08.2007, 01:02   #3
woodyfon
 
Регистрация: 21.08.2007
Сообщений: 6
По умолчанию

Возможно ли по смещению, которое было получено при просмотре файле в HEX-коде, получить виртуальный адрес? Смещение получаю из свой программы, а для дальнейшией работы проги нужен виртуальный адрес, как его программно получить?
woodyfon вне форума Ответить с цитированием
Старый 22.08.2007, 11:22   #4
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Возможно:

VA = RawOffset - RawOffsetOfSection + VirtualOffsetOfSection + ImageBase
RVA = RawOffset - RawOffsetOfSection + VirtualOffsetOfSection

RawOffset - смещение (из Hex-редактора)
RawOffsetOfSection - смещение секции
VirtualOffsetOfSection - виртуальное смещение секции
ImageBase - базовый адрес загрузки
---
RawOffsetForPatch = 2345h
RawOffsetOfSection = 400h
VirtualOffsetOfSection = 1000h
ImageBase = 400000h

VA = 2345h - 400h + 1000h + 400000h = 402F45h
RVA = 2345h - 400h + 1000h = 2F45h

В обратную сторону так:
RawOffset = VA - VirtualOffsetOfSection + RawOffsetOfSection - ImageBase
RawOffset = RVA - VirtualOffsetOfSection + RawOffsetOfSection
пыщь

Последний раз редактировалось JTG; 22.08.2007 в 11:45.
JTG вне форума Ответить с цитированием
Старый 22.08.2007, 16:02   #5
woodyfon
 
Регистрация: 21.08.2007
Сообщений: 6
По умолчанию

А величины
RawOffsetOfSection = 400h
VirtualOffsetOfSection = 1000h
ImageBase = 400000h
обычно постоянны или могут меняться?
Откуда они взяты?
Возможно ли из Delphi работать с готовым отладчиком? Например, из программы менять команды в отладчике и сохранять. чтобы не писать самому отладчик. Все-таки самому его не очень просто написать, если еще возможно.

Последний раз редактировалось woodyfon; 22.08.2007 в 16:10.
woodyfon вне форума Ответить с цитированием
Старый 22.08.2007, 17:05   #6
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Гы, читай спецификацию PE-формата

Тут http://cracklab.ru/download.php?action=get&n=MTU1 PETools (есть новее версия, но эта вполне сойдёт)
Копируй куда надо (это не инсталлятр), настраивай, наслаждайся

встроить в контекстное меню


получим отличный инструмент


Цитата:
Возможно ли из Delphi работать с готовым отладчиком? Например, из программы менять команды в отладчике и сохранять. чтобы не писать самому отладчик. Все-таки самому его не очень просто написать, если еще возможно.
Отладчик делфи, насколько я знаю, не может сохранять файлы, ему это незачем, исходный код-то тут же в IDE.
Писать отладчик зачем кстати не пойму? Качай тот-же OllyDebugger например
пыщь

Последний раз редактировалось JTG; 22.08.2007 в 17:12.
JTG вне форума Ответить с цитированием
Старый 22.08.2007, 17:20   #7
woodyfon
 
Регистрация: 21.08.2007
Сообщений: 6
По умолчанию

А универсальной формулы для расчета адеса по offset нету?

Хочу написать программу, которая могла переводить зашитые в теле программы слова, если перевод слов очень длинный и не помещаются при редактировании в WinHEX. Знаю, что есть OgreGUi, но он не всегда корректно работает с программами, написанными на Delphi.

Последний раз редактировалось woodyfon; 22.08.2007 в 17:23.
woodyfon вне форума Ответить с цитированием
Старый 22.08.2007, 17:32   #8
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Это и есть универсальная ) Параметры можно почерпнуть из заголовка екзешника. Процитирую себя "Читай спецификацию..." вот кстати классика жанра http://av5.com/journals-magazines-online/1/42/392
пыщь
JTG вне форума Ответить с цитированием
Старый 22.08.2007, 17:44   #9
woodyfon
 
Регистрация: 21.08.2007
Сообщений: 6
По умолчанию

А параметры из заголовка отображаются непосредственно в режиме HEX-просмотра файла? А ты не мог на примере показать, что и где? Пожалуйста!
woodyfon вне форума Ответить с цитированием
Старый 22.08.2007, 18:12   #10
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Параметры не находятся всегда по одному и тому же смещению, код писать лень
В двух словах - в дос-заголовоке файла есть 2-байтовое значение, которое содержит адрес файлового заголовка - в нём есть количество секций. за ним идёт опциональный заголовок, в нём ImageBase, дальше таблица секций - массив структур, из неё выдёргивается размер секции, виртуальный адрес и файловое смещение. так по цепочке надо пройти по коду, вылавливая нужные значения
http://www.wasm.ru/series.php?sid=14 статья 2

Цитата:
Хочу написать программу, которая могла переводить зашитые в теле программы слова, если перевод слов очень длинный и не помещаются при редактировании в WinHEX. Знаю, что есть OgreGUi, но он не всегда корректно работает с программами, написанными на Delphi.
Гы, т.е. тебе надо впихать в файл лишние данные, чтоб он при этом сохранил работоспособность. Прям тема для отдельной статьи
пыщь

Последний раз редактировалось JTG; 22.08.2007 в 18:29.
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где можно найти TRotateForm? Aboltus Компоненты Delphi 2 31.07.2008 10:06
найти, каким образом можно получить длину строки. igroman Общие вопросы Delphi 2 25.05.2008 17:52
А где можно найти новые Glyph? love2508 Помощь студентам 1 02.11.2007 16:24