Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Программирование —› подключение masm obj файла в BCB6
Посл.ответ Сообщение

Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 июля 2007 20:29
· Личное сообщение · #1

просто хочу разобраться как связать асм функции с такой вот средой разработки

есть асм функция:

.686
.model flat ,stdcall
option casemap:none
include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
includelib c:\masm32\lib\user32.lib
include c:\masm32\include\kernel32.inc
includelib c:\masm32\lib\kernel32.lib
.data
MsgBoxCaption db "hello",0
MsgBoxText db "word!",0
.code
mess proc
invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK ;
ret 0
mess endp
end

выполняю команду:
C:\masm32\bin\ml /nologo /c /coff /Cp /IC:\masm32\include\ example.asm
получившийся obj файл формата coff преобразую программой coff2omf.exe в omf формат
в билдере с подключаю его к проекту,
затем обьявляю саму функцию:
extern "C" void _stdcall mess();
после чего он при попытке компиляции заявляет следующее:
[Linker Error] Unresolved external 'mess' referenced from C:\BUILDER\UNIT1.OBJ
что я зделал не так?



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 июля 2007 22:05
· Личное сообщение · #2

Прикрепи сюда оба coff файла(UNIT1.OBJ и асмовый обж), посмотрю.




Ранг: 155.4 (ветеран)
Активность: 0.140
Статус: Участник
Робо-Алкаш

Создано: 18 июля 2007 23:29
· Личное сообщение · #3

Может дело не в этом, но ты не установил точку входа в программу.
.code
start:
mess proc
invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK ;
ret 0
mess endp
end start

пробуй...

-----
Researcher




Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 июля 2007 05:13
· Личное сообщение · #4

пробовал подключать к vc++ 2005 там требуется coff формат - все нормально работает
сейчас к билдеру подключить тоже самое немогу.
файлы в приложении

b08c_18.07.2007_CRACKLAB.rU.tgz - examples.rar



Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 июля 2007 05:14
· Личное сообщение · #5

ан нет постой UNIT1.obj - это уже то что билдер создает



Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 июля 2007 05:34
· Личное сообщение · #6

упс нетрогайте первую ссылку чтото нето я туда кинул, с утра плохо понимаю что происходит
итак если подключать этот код скомпонованый в coff формате в vc2005 все нормально работает
тотже coff obj файл преобразую программой coff2omf.exe в omf формат
и подключаю его к проекту в билдере,
видимо я както не так его подключаю возможно
mathio вот файлы которые пытаюсь связать


0f75_18.07.2007_CRACKLAB.rU.tgz - to builder.rar



Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 19 июля 2007 05:43 · Поправил: v0id2k
· Личное сообщение · #7

Попробуй так:

.code
public mess
mess proc
invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK
ret
mess endp


-----
xchg dword [eax], eax




Ранг: 47.2 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 19 июля 2007 13:04
· Личное сообщение · #8

Не знаю, как там в BCB, но думаю также, как и в Delphi. А чтоб прилиноквать к Delphi, coff2omf недостаточно, надо omf2d юзать, чтоб преобразовать вызовы функций из _MessageBoxA@16 в MessageBoxA или из _mess@4 в mess. Попробуй ещё в tasm скомпилить, он точно прилинкеруется.

26e9_19.07.2007_CRACKLAB.rU.tgz - omf2d.exe



Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 июля 2007 19:03
· Личное сообщение · #9

спасибо за файл
пробовал но все равно получаю сообщение:
[Linker Error] Unresolved external 'mess' referenced from C:\BUILDER\000\UNIT1.OBJ
мне кажется я как-то неправильно его добавляю в проект что он его не воспринимает
я делаю это через меню Project--->Add to Project...--->выбираю файл example_omf2d.obj
в cpp пишу следующее:

extern "C" void _stdcall mess();

int main()
{
mess();
return 0;
}

неработает!
а как создать lib - файл формата omf?



Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 19 июля 2007 19:26
· Личное сообщение · #10

IGORb_IGOREV
читай выше!!
объяви функу в паблик, и тогда все должно работать, вроде

-----
xchg dword [eax], eax




Ранг: 47.2 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 20 июля 2007 06:32
· Личное сообщение · #11

IGORb_IGOREV откомпиль сначала в tasm, если он слинкуется, то будем думать дальше.
Просто отрываешь obj блокнотом, ищешь имя функции и под тем же именем её вызываешь.



Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 июля 2007 17:52
· Личное сообщение · #12

public не помогает!
а tasm надо поискать ещё,
кажется дело в компиляторе
он не там ищет - он ищет функцию в UNIT1.OBJ а она в example_omf2d.obj
public и tasm здесь непричем. я так думаю?



Ранг: 47.2 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 21 июля 2007 15:28
· Личное сообщение · #13

IGORb_IGOREV пишет:
он не там ищет - он ищет функцию в UNIT1.OBJ а она в example_omf2d.obj

Бред, в bpr же прописано <OBJFILES value="Unit1.obj example_omf.obj"/>.

example_omf.obj который ты выложил вообще какой-то кривой, конечно же он не линкуется Попробуй прилинковать какой-нибудь из этих файлов.

c4a7_21.07.2007_CRACKLAB.rU.tgz - ex.rar



Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 июля 2007 18:08
· Личное сообщение · #14

да MiHaN ты прав
насчет example_omf.obj, но он не кривой а пустой
проблема была в coff2omf от borland вот он кривой, создавал пустые файлы и как выяснилось
нужно было передавать ему в качестве параметров не obj а lib файлы,
но они в итоге тоже пустые получались.
скомпоновать мой пример помогла програмка Coff2omf от Walter Oney.
твои оба примера нормально работают.
Большое СПАСИБО за помощь а то уже 4 дня с этим возился!


 eXeL@B —› Программирование —› подключение masm obj файла в BCB6
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати