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

 eXeL@B —› Программирование —› Вызвать сишную функцию из асма
Посл.ответ Сообщение

Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 07 сентября 2011 02:47 · Поправил: Hexxx
· Личное сообщение · #1

есть obj сишный, я хочу из асма вызывать оттуда функции. Пробовал вызывать так:

Code:
  1. externdef stdcall _MyCfunc@4 : proc
  2. ...
  3. call _MyCfunc@4

результат:
error A2107: cannot have implicit far jump or call to near label

пробовал вот так:
Code:
  1. _MyCfunc@4 proto stdcall obj:DWORD
  2. ...
  3. invoke _MyCfunc@4, eax


результат:
error A2107: cannot have implicit far jump or call to near label

Как же тогда?

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 65.4 (постоянный), 10thx
Активность: 0.020
Статус: Участник

Создано: 07 сентября 2011 02:58
· Личное сообщение · #2

Собери lib с obj



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 07 сентября 2011 08:15
· Личное сообщение · #3

асм
Code:
  1.     _MyCfunc proto stdcall obj:DWORD
  2.     ...
  3.     invoke _MyCfunc, eax


си
Code:
  1. // header.h
  2. extern "C" void __stdcall _MyCfunc(DWORD obj)
  3. // main.c
  4. _MyCfunc(0x0DEADBEEF);




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 07 сентября 2011 10:26 · Поправил: Hexxx
· Личное сообщение · #4

Работающий вариант:
Code:
  1. extern stdcall MyCfunc@4 : proc
  2. ...
  3. call MyCfunc@4

Вариант с invoke предложеный Avoid не работает. Та же ошибка

p.s. чертов манглинг

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 07 сентября 2011 12:04
· Личное сообщение · #5

исправляюсь
Code:
  1.     EXTERNDEF STDCALL mycfunc@4:PROC
  2.     mycfunc TEXTEQU <mycfunc@4>



 eXeL@B —› Программирование —› Вызвать сишную функцию из асма
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати