Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с MASM 
V
    Опции темы
Proger89
Дата 13.12.2007, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Возникла не понятная проблема с компиляцией и сборкой программы под MASM ( раньше я все делал в Tasm-e).
Никак не могу найти нужные ключи для компиляции и сборки программы под Win32. Вот программа(Название исходника - "test.asm"):

Код


.386
.model    flat, stdcall
.stack 4096
ExitProcess proto , dwExitCode : dword

.code
Main proc
        
    mov    eax, 100h
    add    eax, 50
    sub    eax, 56

    invoke ExitProcess, 0

Main endp


end    Main


Я пишу ml -c test.asm и link test. 
Вывод в консоли:
LINK: Fatal Error LNK1561: entry point must be defined

Помогите пожалуйста кто может. Заранее благодарен.
PM   Вверх
anwe
Дата 13.12.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Цитата(Proger89 @  13.12.2007,  18:11 Найти цитируемый пост)
entry point must be defined

Точка входа не определена.
Прописан прототип функции, обращение к ней, а где она сама?? Нет точки входа в ExitProcess. Добавь саму функцию:
Код

ExitProcess proc paramert1:DWORD
...
ExitProcess endp

PM MAIL   Вверх
MAKCim
Дата 13.12.2007, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



anwe, 
вообще насколько я знаю ExitProcess - это API функция Windows, определенная где-то в DLL


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
anwe
Дата 13.12.2007, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



MAKCim, а посмотри, здесь нет подключение библиотек. В этом коде автор использует свою интерпретацию этой функции, которую может назвать как хочет. Это также косвенно подтверждается словами:
Цитата(Proger89 @  13.12.2007,  18:11 Найти цитируемый пост)
( раньше я все делал в Tasm-e)

PM MAIL   Вверх
MAKCim
Дата 13.12.2007, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



Цитата(anwe @  13.12.2007,  23:03 Найти цитируемый пост)
MAKCim, а посмотри, здесь нет подключение библиотек

а на этапе компиляции и не надо ничего подключать
библиотека необходима для компоновки объектных файлов
кроме того, как видишь, ошибки типа
Цитата

Unresolved external symbol

тут явно нет

Это сообщение отредактировал(а) MAKCim - 13.12.2007, 23:17


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
anwe
Дата 13.12.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Но ведь ошибка линковщика
Цитата(Proger89 @  13.12.2007,  18:11 Найти цитируемый пост)
LINK: Fatal Error LNK1561: entry point must be defined

а он проводит же компановку, используя таблицу имен.
А ошибка все-таки в этом: нет входа в нужную процедуру, так как она и не описана.
PM MAIL   Вверх
dumb
Дата 14.12.2007, 04:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Код

; сборка:
; ml -c -coff test.asm
; link /SUBSYSTEM:WINDOWS test.obj
.386
.model    flat, stdcall
option casemap :none
;.stack 4096 ;- нафиг не нужно
;ExitProcess proto , dwExitCode : dword ;- не ищем легких путей?
include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\kernel32.lib
.code
Main proc
        
    mov    eax, 100h
    add    eax, 50
    sub    eax, 56
    invoke ExitProcess, 0
Main endp
end    Main


Цитата(anwe @  13.12.2007,  23:28 Найти цитируемый пост)
А ошибка все-таки в этом: нет входа в нужную процедуру, так как она и не описана.
вообще-то, он ругается не на "вход в нужную процедуру", а на отсутствие точки входа в программу(entry point). а найти он ее не смог из-за неверного формата obj(link пытается преобразовать, но не особо успешно), который выдал ml.

PM MAIL   Вверх
anwe
Дата 15.12.2007, 23:27 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Это-то верно. Но можно не использовать inc'и и вышеописанный код также верный. К тому же автор ранее пользовался Tasm'ом. Другими словами этот код тоже верный:
Код

.386
.model    flat, stdcall
.stack 4096
ExitProcess proto , dwExitCode : dword

.code
Main proc
        
    mov    eax, 100h
    add    eax, 50
    sub    eax, 56

    invoke ExitProcess, 0

Main endp

ExitProcess proc dwExitCode : dword
mov eax,dwExitCode; просто первое, что пришло а голову
ExitProcess endp

end    Main

PM MAIL   Вверх
dumb
Дата 16.12.2007, 04:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



anwe, что ты пытаешься доказать? и какой смысл в приведенном тобой, уж прости, бредовом коде? smile
PM MAIL   Вверх
MAKCim
Дата 16.12.2007, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



anwe, 
может он и верный, но делает он не то, что хотел Proger89


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
anwe
Дата 16.12.2007, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Неужели обязательно надо назвать функцию WinMain, чтобы дать понять, что можно и так написать?
PM MAIL   Вверх
MAKCim
Дата 16.12.2007, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



Цитата(anwe @  16.12.2007,  10:51 Найти цитируемый пост)
Неужели обязательно надо назвать функцию WinMain, чтобы дать понять, что можно и так написать? 

в вашем коде есть вызов API-функции завершения процесса?  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Proger89
Дата 22.12.2007, 23:53 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Извините, что долго не отвечал, не работал Интернет.
За этот промежуток времени я уже успел исправить ошибку. ExitProcess - WinAPI функция, для коректной работы нужно было подключить библиотеку kernel32.lib, тоесть дописать:
Код

includelib kernel32.lib


а потом запустить следуюший bat-ник:

Код

\masm32\bin\ml /c /coff /nologo *.asm
\masm32\bin\Link /SUBSYSTEM:CONSOLE *.obj 


и всё вот в чем была проблемма.

Как мне показалось компоновшик и ассемблер от Borland был гораздо лучше реализован. Они по крайней мере правильно указывали причину ошибок.

Спасибо всем кто пытася помочь 

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0681 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.