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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2013, 08:53   #31
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
По умолчанию

Mikl___,
сделал как ты сказал, но линкер начал ругаться
Вот код
PHP код:
.486
.model flatstdcall
option casemap
none

includelib 
\masm32\lib\kernel32.lib
includelib 
\masm32\lib\user32.lib
extrn _MessageBoxA
@16:DWORD
extrn _ExitProcess
@4:DWORD

.data
Ttl db 
"Progra",0h
mes db 
"Hgfgh",0h

.code
start
:
xor 
ebxebx
push ebx
push offset Ttl
push offset mes
push ebx
call _MessageBoxA
@16
push ebx
call _ExitProcess
@4
end start 
Вот лог компоновщика
Цитата:
Assembling: programm.asm

C:\Users\Данил\Desktop>C:\masm32\bi n\Link /SUBSYSTEM:WINDOWS programm.obj
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

programm.obj : error LNK2001: unresolved external symbol __MessageBoxA@16
programm.obj : error LNK2001: unresolved external symbol __ExitProcess@4
programm.exe : fatal error LNK1120: 2 unresolved externals
Klod вне форума Ответить с цитированием
Старый 14.03.2013, 09:23   #32
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
По умолчанию

Если вместо
PHP код:
extrn _MessageBoxA@16:DWORD 
extrn _ExitProcess
@4:DWORD 
писать
PHP код:
extrn _imp__MessageBoxA@16:DWORD
extrn _imp__ExitProcess
@4:DWORD 
то работает без лишних джампов, но вопрос за счёт чего вы можете писать всего лишь с _, вместо _imp__ ?
Klod вне форума Ответить с цитированием
Старый 14.03.2013, 09:25   #33
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Klod
напиши вместо _MessageBoxA@16 и _ExitProcess@4 --> _imp__MessageBoxA@16 и _imp__ExitProcess@4 у тебя Link старый версии 5.12.8078, а не такой о котором писал Ezhik Kihze
Mikl___ вне форума Ответить с цитированием
Старый 14.03.2013, 10:27   #34
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Mikl___, распаковал на другой диск вторую папку masm32. Cтарый линкер собирает без джампа.
Так что это микрософт виноват в возникших проблемах.
vadimych вне форума Ответить с цитированием
Старый 14.03.2013, 11:20   #35
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

vadimych,
я создал отдельную папку с содержимым:
  • link.exe
  • makeit.bat
  • ml.exe
  • MSGBOX.ASM
  • mspdb100.dll
  • msvcr100.dll
  • user32.lib
  • windows.inc
  • winextra.inc
windows.inc и winextra.inc из masm32 остальные Ваши, компилируется и линкуется без джампов, так что майкрософт не при чем, у меня Windows XP Professional версия 2002 SP 3

Последний раз редактировалось Mikl___; 14.03.2013 в 11:24.
Mikl___ вне форума Ответить с цитированием
Старый 14.03.2013, 13:26   #36
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Mikl___, совершенно верно. Тысяча извинений. С _imp__ собирается без джампов, без него - с джампами. И старыми и новыми ассемблером и линкером. Так что совместимость видимо не причём.

Последний раз редактировалось vadimych; 14.03.2013 в 13:29.
vadimych вне форума Ответить с цитированием
Старый 14.03.2013, 20:08   #37
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
По умолчанию

Цитата:
С _imp__ собирается без джампов, без него - с джампами.
Цитата:
у тебя Link старый версии 5.12.8078, а не такой о котором писал Ezhik Kihze
Хм это хорошо. Даже линк менять не придётся. Спс за полезную информацию.
Есть ещё один маленький вопросик:
когда я объявляю так
PHP код:
extrn _imp__MessageBoxA@16:DWORD 
проблем с линковкой не возникает, но когда пытаюсь так
PHP код:
extrn __imp__MessageBoxA@16:DWORD 
линкер ругается и вроде бы приписывает к моему imp лишнюю _
В этой теме видел сообщение об этом. Я только не пойму зачем линковщик так делает... ну приписывает лишнее?
Klod вне форума Ответить с цитированием
Старый 14.03.2013, 20:12   #38
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Цитата:
Я только не пойму зачем линковщик так делает
А Вы пишите как положено, и вопрос снимется с повестки дня.
vadimych вне форума Ответить с цитированием
Старый 14.03.2013, 21:08   #39
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
По умолчанию

Цитата:
А Вы пишите как положено, и вопрос снимется с повестки дня.
Спасибо всем, благодаря вам я узнал то, что хотел по данной теме!!!
Klod вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Грамотное завершение потока, если поток на паузе winhttp Общие вопросы .NET 3 11.01.2013 12:55
Категории фильмов, грамотное проектирование БД Abuhamed PHP 3 13.01.2012 09:22
Использование файлов ресурсов Mixim Общие вопросы .NET 4 13.01.2011 03:39
Грамотное юзабилити(интерфейс для пользователя) Alexei91 Свободное общение 35 16.09.2010 13:46
Использование строк и файлов Allysia Помощь студентам 2 23.02.2010 09:10