Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 881
от 20.10.2007, 02:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 383, Экспертов: 22
В номере:Вопросов: 2, Ответов: 3


Вопрос № 105405: Прошу подробно изложить как ассемблировать программу из файла ASM и чем?...
Вопрос № 105427: Здраствуйте уважаемые эксперты! Подскажите пожалуйста как скопировать текущее значение EIP в регистр общего назначения (например в еах)!? Если Вас не затруднит, напишите пару строк кода!!! С уважением к Вам, max!!!...

Вопрос № 105.405
Прошу подробно изложить как ассемблировать программу из файла ASM и чем?
Отправлен: 14.10.2007, 13:07
Вопрос задал: Егор Грушин Романович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Егор Грушин Романович!

Разработка программы на языке ассемблера включает четыре этапа.
1-й этап.Подготовка исходного текста программы и оформление его в виде текстового файла (одного или нескольких) с помощью какого-нибудь редактора с расширением .asm.
2-й этап.Ассемблирование программы с применением транслятора Tasm(Tasm.exe) или Masm(ML.exe), результатом которого является объектный файл с расширением obj. Когда программа состоит из нескольких файлов (модулей), то их ассемблирование производится независимо друг от друга. Если в процессе трансляции будут обнаружены ошибки, то объектный файл не создаётся, а формируется сообщение об ошибках. Ошибки устраняются, после чего трансляция повторяется. Объектный файл (двоично-кодированное представление программы) не может быть запущен на исполнение, так как в нём не содержится информация о загрузке сегментов программы в памяти компьютера.
3-й этап.Компоновка программы производится компоновщиком (редактором связей) Tasm(Tlink.exe) или Masm(Link.exe) и заключается в объединении объектных модулей в один исполняемый файл с назначением стартового адреса программы. Исполняемый файл имеет расширение exe. 2-й и 3-й этапы определяют процесс подготовки исполнительного файла программы, называемого трансляцией.
4-й этап состоит в отладке программы с использованием отладчика(входит в комплекты компиляторов), который будет являться основным инструментом при изучении форматов команд, их кодирования, а также представления переменных программы в памяти.
Примеры команд создания программ для компилятров Tasm или Masm можно найти в книге С.Зубкова
Есть версии компиляторов для Dos(16-bit) и Windows(32-bit-компоновщики которых НЕ СОЗДАЮТ 16-битный код):
16-bit:tasm 4.10, masm 5.10, masm 6.11;
32-bit:www.wasm.ru masm, tasm и др.
Отдельно нужно сказать о компиляторе Fasm(cm. wasm.ru)-позволяет создавать как 16-битный, так и 32-битный код.

Удачи!
---------
И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Специалист)
Ответ отправлен: 15.10.2007, 16:12


Вопрос № 105.427
Здраствуйте уважаемые эксперты! Подскажите пожалуйста как скопировать текущее значение EIP в регистр общего назначения (например в еах)!? Если Вас не затруднит, напишите пару строк кода!!!
С уважением к Вам, max!!!
Отправлен: 14.10.2007, 16:01
Вопрос задал: Maksim/max (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Овчинников Алексей
Здравствуйте, Maksim/max!
воспользуйтесь оператором $

например
MiEIP equ $
mov eax,MiEIP

команда mov eax,MiEIP занимает 4 байта поэтому если вам необходим eip после выполнения этой команды, можно записать MiEIP equ $+4
Ответ отправил: Овчинников Алексей (статус: 1-ый класс)
Ответ отправлен: 14.10.2007, 16:59
Оценка за ответ: 5
Комментарий оценки:
Здраствуйте Алексей! Спасибо Вам за ответ!
Однако есть одно "НО"!Моя программа после компиляция и загрузки ее в память будет затем сама себя перемещать в другое место и соответственно адрес в еах будет уже неверным!!!Ведь он определяется компилятором, в вашем случае!!! А мне необходимо чтобы его определила сама программа!!!Поэтому вопрос остается по-прежнему открытым!!!
Ставлю Вам оценку 5! Так как на вопрос вы ответили!!!

Отвечает: Sergijj
Здравствуйте, Maksim/max!

Можно сделать это, например, использовав свойство команды CALL, которая при работе заносит в стек адрес возврата.
Написав процедуру типа DisplayRegs можно в нужном месте сделать её вызов, а в ней залезть в стек и увидеть EIP, указывающий на команду, следующую за CALL.
Подробный пример писать было лень, поэтому взял первое, что нашёл в www.google.ru (в приложении).

Ну, если в кратце это выглядит так:
.386
.model flat
.code
start:
jmp short begin

get_eip:
pop eax
; ...

begin:
call get_eip
end start

Приложение:

---------
Стучитесь! И Вас откопают...

Ответ отправил: Sergijj (статус: 10-ый класс)
Ответ отправлен: 15.10.2007, 10:16
Оценка за ответ: 5
Комментарий оценки:
Здраствуйте Sergijj! Большое Вам спаибо за то, что откликнулись на мою просьбу и за ответ! Ваш вариант я изучил! Однако хотел спросить следующее:
вот допустим моя программма:
код
вот здесь необходимо узнать смещение sring,с учетом того что она будет сама себя перемещать!!!
код
код
...
код
string db 'text'

Если пользоваться call-ом то достаточно сложно и громоздко получится, да и не удобно!? Или для таких случаев есть что более приемлемое?
И еще вы пишите :выделим OutBufferSize байт стэка для формирования строки
;Часто так выделяют память под небольшие локальные переменные.
Почему допустим нельзя выделить байт в памяти и обращатся к нему!??Чем это черевато???


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.61.1 от 16.10.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное