Показать сообщение отдельно
Старый 06.08.2009, 22:12   #80
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: DLL на Microsoft Visual C++ 6.0

Что? Все просто. Как извстно ассемблер является приближением к машинному языку (тем не менее команды машинного языка транслируются процессором в специфичный микрокод, т.е. одна команда на асме нем не менее может разложится на нескольо реальных машинных, но нам это не инетерсно, это область деятельности инженеров интела и им подобных). Все было бы шоколодно если не одна проблема - одной команде асма может соотвествовать десяток машинных (все завист от ее аргументов и т.п., т.е. с регистрами она имет один номер, в памятью другой и т.п.). Для того чтобы писать на машинных кодах (а типично писать свои ЯП в целом и ассемблеры в частности), необходимо знать эти соответствия. Узнать их можно из доков интела, кроме того можно и так найти их, отдельными файликами, где указываются все инструкции асма и соответствующие им мнемоники (а также кол-во тактов которые они кушают). Т.е. все сводится к чему:
1) Берем команду асма
2) Ищем мнемонику (в зависимости от семантики)
3) Вписываем байт нужный на место, потом дописываем аргументы (если надо)
4) Переходим к слдедующей
На выходе мы получаем машинный код, готовый к выполнению. Тем не менее просто так его не запустить. Для этого нужен загрузчик. В Windows юзается PE (portable executable). Т.е. следуя формату формируем файл, который и является нашим привычным ехешником.
Подробнее писать некогда - кофе стынет =) Да и не место.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
Mr_F_ (06.08.2009), newman (06.08.2009), NitE (06.08.2009)