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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2014, 06:09   #1
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию Ошибки при линковке:

Здравствуйте! Вот в чём собственно проблема,вчера написал текст,точнее списал с книги,и при линковке выдаёт ошибки
Цитата:
00.obj : warning LNK4033: converting object format from O
LINK : fatal error LNK1561: entry point must be defined
,сам разобраться не смог... На скринах выложил,что б наглядней было. Компилируется,файл с расширением .OBJ создаётся,а при линковке выдаёт ошибки. Интересно,что файл с расширением .EXE тоже создаётся,но не запускается,ни когда я по нему кликаю,ни когда запускаю из командной строки. По сути дела эта прога должна запускать браузер по умолчанию,но ничего не происходит. Направьте на путь истинный!!!
И ещё из RadAsm пробовал тоже ошибки выдаёт:
C:\masm32\bin\RC.EXE /v "rsrc.rc"
Microsoft (R) Windows (R) Resource Compiler, Version 5.00.1823.1 - Build 1823

Copyright (C) Microsoft Corp. 1985-1998. All rights reserved.


Using codepage 1251 as default
Creating rsrc.RES

RC: RCPP -CP 1251 -f C:\masm32\bin\RCa02024 -g C:\masm32\bin\RDa02024 -DRC_INVOKED -D_WIN32 -pc\:/ -E -I. -I .


RC : fatal error RC1110 : could not open rsrc.rc



Make error(s) occured.
Total compile time 1938 ms
Его я до сих пор не могу настроить,к сожалению.
Помогите!
Вот листинг программы:
Код:
include shell32.inc
include kernel32.inc
 
    .386
    .model flat
    .const
URL db  'http://www.lionking.org/~cubbi/',0
    .code
_start:         ; ¬ҐвЄ* в®зЄЁ ўе®¤* ¤®«¦** **зЁ**вмбп б Ї®¤зсаЄЁў**Ёп
    xor ebx,ebx
    push    ebx     ; ¤«п ЁбЇ®«*Ё¬ле д*©«®ў - бЇ®б®Ў Ї®Є*§*
    push    ebx     ; а*Ў®з*п ¤ЁаҐЄв®аЁп
    push    ebx     ; Є®¬**¤**п бва®Є*
    push    offset URL  ; Ё¬п д*©«* б Їгвс¬
    push    ebx     ; ®ЇҐа*жЁп open Ё«Ё print (Ґб«Ё NULL - open)
    push    ebx     ; Ё¤Ґ*вЁдЁЄ*в®а ®Є**, Є®в®а®Ґ Ї®«гзЁв б®®ЎйҐ*Ёп
    call    ShellExecute    ; ShellExecute(NULL,NULL,url,NULL,NULL,NULL)
    push    ebx     ; Є®¤ ўл室* 
    call    ExitProcess ; ExitProcess(0)
end _start
Затем текст подправили:

Код:
; masm windows gui #
.686
.model flat
.code

includelib shell32.lib
includelib kernel32.lib 
extern _imp__ExitProcess@4:dword
extern _imp__ShellExecuteA@24:dword
_start:xor ebx,ebx
    push    ebx     
    push    ebx     
    push    ebx     
    push    offset URL
    push    ebx     
    push    ebx     
    call    _imp__ShellExecuteA@24    ; ShellExecute(NULL,NULL,url,NULL,NULL,NULL)
    push    ebx     
    call    _imp__ExitProcess@4 ; ExitProcess(0)
URL db  'http://www.lionking.org/~cubbi/',0
end _start
Но ничего не происходит в плане линковки,ошибки,ошибки...

Сейчас взялся за новую книгу
пример текста:
Код:
;p7.2.asm
;Удаление файла с анализом возможных системных сбоев
text   segment
assume cs:text,ds:data
begin:  mov  ax,data
        mov  ds,ax
		mov  ah,41h             ;функция удаления файла
		mov  dx,offset fname
		int  21h
		jc   error              ;переход, если ошибка
		mov  ah,09h             ;вывод сообщения - 
		mov  dx,offset msgok    ;об удалении
		int  21h
fin:    mov  ax,4C00h           ;завершение программы
        int  21h
;Блок анализа ошибок
error:  cmp  ax,02h             ;файл не найден?
        je   notfound           ;да, высти сообщение
		cmp  ax,03h             ;путь не найден?
		je   wrongdir           ;да, вывести сообщение
		cmp  ax,05h             ;доступ запрещён?
		je   noaccess           ;да, вывсти сообщение
		jmp  fin                ;неизвестная ошибка
;Блок вывода сообщений
notfound: 
        mov  dx,offset msg1
		jmp  write
wrongdir:
        mov  dx,offset msg2
		jmp  write
noaccess:
        mov  dx,offset msg3
write:  mov  ah,09h
        int  21h
		jmp  fin
text    ends
data    segment
fname   db   'C:\testfile.001',0
msgok   db   'Файл удалён$'
msg1    db   'Файл не найден$'
msg2    db   'Каталог неверен$'
msg3    db   'Доступ запрещён$'
data    ends
stk     segment  stack
        db  256 dup (0)
stk     ends
        end  begin

Тут ошибка такая:
Цитата:
Run File [p7.2.exe]:
List File [nul.map]:
Libraries [.lib]:
Definitions File [nul.def]:
LINK : fatal error L1093: p7.2.obj : object file not found
Параметры задаю такие:
Цитата:
ml /c 00.asm
файл .OBJ создаётся,но далее
Цитата:
doslnk 00.obj
вылитает ошибка.

В общем процесс стоит,но это не радует)))
P.S. У меня RadAsm установлен,но он тоже не хочет ничего делать,помогите страждущему

Надеюсь подробно написал... Я старался!
Изображения
Тип файла: jpg dos0.jpg (116.2 Кб, 124 просмотров)
Тип файла: jpg dos.jpg (30.5 Кб, 93 просмотров)
apofioz вне форума Ответить с цитированием
Старый 22.01.2014, 12:00   #2
rlib
Форумчанин
 
Аватар для rlib
 
Регистрация: 22.05.2012
Сообщений: 352
По умолчанию

Пример:

Код:
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib

.data
MsgBoxCaption  db "Iczelion Tutorial No.2",0
MsgBoxText       db "Win32 Assembly is Great!",0

.code
start:
invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK
invoke ExitProcess, NULL
end start
ml /c /coff /Cp msgbox.asm
link /SUBSYSTEM:WINDOWS /LIBPATH:c:\masm32\lib msgbox.obj
rlib вне форума Ответить с цитированием
Старый 22.01.2014, 21:05   #3
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

rlib
Цитата:
ml /c /coff /Cp msgbox.asm
link /SUBSYSTEM:WINDOWS /LIBPATH:c:\masm32\lib msgbox.obj
Вот с этими параметрами и с вашим примером всё прошло на ура. Но другие никак не хотят создаваться.
Дело в том,что я только не так давно взялся за изучение языка и вообще это мой первый язык,примеры из книг не так пишутся,что теперь их надо переделывать,так как в вашем примере?! У меня ещё doslnk есть пример "p7.2.asm" с ним собирать или нужен уже LINK? возможно как-то попобробней... И ещё хотелось бы по поводу RadAsm-а услышать,как его всё же заставить работат,а то он ну никак не хочет,може пути не так прописал в нём,может ещё что. Его в переменную PATH надо прописывать? Он у меня в корне диска C:\ установлен,как впрочем и сам masm32,как из сдружить?)))
apofioz вне форума Ответить с цитированием
Старый 22.01.2014, 23:28   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

А мне кажется, что Вы не понимаете, что программа p7.2.asm - это 16-битное MS DOS приложение. его нужно компилировать под DOS, tasm или masm (я не знаю, можно ли с помощью masm32 компилировать 16битные DOS приложения, не удивлюсь, если нельзя!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.01.2014, 21:56   #5
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
А мне кажется, что Вы не понимаете, что программа p7.2.asm - это 16-битное MS DOS приложение. его нужно компилировать под DOS, tasm или masm (я не знаю, можно ли с помощью masm32 компилировать 16битные DOS приложения, не удивлюсь, если нельзя!)
можно я это делал, когда создавал .com-файлы загружал отдельно doslnk и пользовался.параметры такие я вводил: ml /c xx.asm , doslnk /t xx.obj и всё получалось. ну а сейчас вот проблемки,как их решить(
apofioz вне форума Ответить с цитированием
Старый 25.01.2014, 20:15   #6
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

И на этом всё, мыслей больше ни у кого никаких нет?( Обидно однако(
apofioz вне форума Ответить с цитированием
Старый 26.01.2014, 13:11   #7
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Не пойму я.
Две программы. Одна под дос, другая под винду. Судя по скрину, перепутаны команды для них.
Так что куда вводили и что получилось?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 26.01.2014, 18:56   #8
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от Goodwin98 Посмотреть сообщение
Не пойму я.
Две программы. Одна под дос, другая под винду. Судя по скрину, перепутаны команды для них.
Так что куда вводили и что получилось?
Да, первоначально в книге давались примеры под DOS их я собирал так: ml /c xx.asm затем линковал так: doslnk /t xx.obj

Затем першол автор на windiws какие параметры, тут я различные пробовал: например:
Цитата:
ml /c /coff /Cp xx.asm
link /SUBSYSTEM:WINDOWS /LIBPATH:c:\masm32\lib xx.obj
или так:

Цитата:
ml /c xx.asm
link xx.obj,,NUL,,,
Перехожу в командной строке в деректорию c:\masm32\bin
и воожу команды, файл с расширением .asm там же лежит в bin. COM файлы без проблем компилируются, а вот exe что-то стали выдавать ошибки. Сейчас другую книгу курю, там первый пример нормально собрался с расширением exe , а последующие тоже ошибки выдают,вот примеры.
Код:
text   segment               ;начало программы
assume CS:text, DS:data      ;сегментный регистр CS будет указывать на сегмент команд,а сегментный регистр DS - на сегмент данных

begin:   mov  ax,data        ;адрес сегмента данных сначала загрузим в AX,
         mov  ds,ax          ;а затем перенесём из AX в DS
		 mov  ah,09h         ;функция DOS 09h вывода на экран
		 mov  dx,offset mesg ;адрес выводимого сообщения должен быть в DX
		 int  21h            ;вызов DOS
		 mov  ah,4Ch         ;функция 4Ch завершения программы
		 mov  al,0           ;код 0 успешного завершения
		 int  21h            ;вызов DOS
text     ends                ;конец сегмента команд
data     segment             ;начало сегмента данных
mesg     db 'Начинаем!$'     ;выводимый текст
data     ends                ;конец сегмента данных
stk      segment stack       ;начало сегмента стека
         db 256 dup (0)      ;резирвируем 256 байт для стека
stk      ends                ;конец сегмента стека
end begin
этот собрался, а вот пример который так же не хотит:
Код:
;p7.1.asm
;Удаление файла
text     segment
assume cs:text,ds:data
begin: mov  ax,data            ;инициализируем
       mov  ds,ax              ;регистр DS
	   mov  ah,41h             ;функция DOS удаление файла
	   mov  dx,offset fname    ;адрес имени файла
	   int  21h                ;вызов DOS
	   jc   error              ;переход,если ошибка
	   mov  ah,09h             ;вывод сообщения
	   mov  dx,offset msgok    ;об удалении
	   int  21h                ;вызов DOS
fin:   mov  ax,4C00h           ;завершение программы
       int  21h                ;вызов DOS
error: mov  ah,09h             ;вывод сообщения
       mov  dx,offset msgerr   ;об ошибке
	   int  21h                ;вызов DOS
	   jmp  fin                ;переход на завершение
text   ends
data   segment
fname  db   'C:\testfile.001',0   ;спецификация файла
msgok  db   'Файл удалён$'
msgerr db   'Файл не найден$'
data   ends
stk    segment stack
       db 256 dup (0)
stk    ends
       end  begin
этот я пробовал собрать так, без премудростей: ml /c p7.1.asm файл .obj создался, а при линковке doslnk p7.1.obj выдаёт ошибку:
Код:
LINK : fatal error L1093: p7.1.obj : object file not found
с такими параметрами даже obj-файл не создаётся, сразу ошибка:
Код:
p7.1.asm(5) : error A2004: symbol type conflict
p7.1.asm(29) : warning A4023: with /coff switch, leading underscore required for start address : begin
Если что-то не понятно объяснил, уточните я попробую как можно подробней описать!
apofioz вне форума Ответить с цитированием
Старый 27.01.2014, 18:26   #9
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

В данном случае это у вас dos программа, значит компилировать нужно
Код:
ml /c xx.asm
doslnk xx.obj,,NUL,,,
Линкер, судя по ошибке, не может открыть .obj файл. Он точно создался ? попробуйте другое имя ему дать. Без точки, например.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 28.01.2014, 20:09   #10
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Goodwin98
Вот так собрался, убрал точку из названия файла, ввёл указанные параметры и всё прошло успешно!!! Круто. продолжаю дальше мучать ассемблер)))
А что link.exe вообще можно выкинуть?) Он насколько я понял линкует только Win32? Ладно этот вопрос пока отлажу на будущее, до программирования мне ещё даалеко,а до программирования под Windows и того дальше.
Спасибо!
apofioz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибки при инжекте joker Win Api 5 21.08.2012 11:04
Ошибки при линковке. ТриСемёрки Общие вопросы C/C++ 3 02.09.2010 21:31
MS Visual C++, ошибка при линковке... Пепел Феникса Visual C++ 2 08.09.2009 16:20
Ошибка при линковке Лотос Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 25 22.02.2009 20:24
ошибки при компиляции |{ot Общие вопросы Delphi 14 02.08.2008 01:20