Сейчас на форуме: _MBK_, tyns777, UniSoft (+10 невидимых)

 eXeL@B —› Программирование —› Как объявить функцию в MASM'e чтобы ее конвенция совпадала с Microsoft x64?
Посл.ответ Сообщение

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

Создано: 16 мая 2012 17:04 · Поправил: Hexxx
· Личное сообщение · #1

У сишного кода конвенция вызова rcx, rdx, r8, r9, стек. Есть ли нормальный способ объявления в масме функции, чтобы оно понимало что аргументы надо брать именно так, а не все со стека?

Вот так:
Code:
  1. MyFunc proc FASTCALL arg1 : dword, arg2 : dword, arg3 : dword

не компилится

А так:
Code:
  1. MyFunc proc arg1 : dword, arg2 : dword, arg3 : dword

как раз все берет со стека.

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




Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 16 мая 2012 17:34
· Личное сообщение · #2

ml64 file.asm /link ... ?



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

Создано: 16 мая 2012 18:11
· Личное сообщение · #3

ELF_7719116 пишет:
ml64 file.asm /link ... ?

И что? оно так само угадывает конвенцию?

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





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 16 мая 2012 18:20
· Личное сообщение · #4

Вообще конвенция там единственная, поэтому все ключевые слова по конвенциям должны перестать работать, и собираться должно только по единственно возможной конвенции. И в сях это так, именно на масме не пробовал proc юзать.



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

Создано: 16 мая 2012 18:24
· Личное сообщение · #5

Archer пишет:
именно на масме не пробовал proc юзать.

Ну вот а я попробовал... Похоже масм про новую конвенцию ничего не знает.

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




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

Создано: 16 мая 2012 22:20
· Личное сообщение · #6

http://dsmhelp.narod.ru/environment.htm



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 17 мая 2012 11:24
· Личное сообщение · #7

А кто-нибудь знает как компоновать ml64 с сишным кодом? У меня не получилось, более того, асмовые функции ушли в объектник с именем вида #00000001, а не с тем, которое я написал в ASM и H. Естественно, ошибка на стадии компоновки. Пример от Microsoft видел, не пинайте строго.



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

Создано: 17 мая 2012 17:05 · Поправил: Hexxx
· Личное сообщение · #8

int пишет:
А кто-нибудь знает как компоновать ml64 с сишным кодом?

У меня получилось. Ничего особо не делал:
Code:
  1. public MyFunc
  2. _TEXT SEGMENT
  3.  
  4.  
  5. MyFunc proc
  6. ...
  7. MyFunc endp
  8. _TEXT ENDS
  9. END

И в сях объявил вот так:
Code:
  1. extern "C" void MyFunc( ULONG id, ULONG argCnt, ULONG argValue );


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




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

Создано: 17 мая 2012 17:09
· Личное сообщение · #9

japan пишет:
http://dsmhelp.narod.ru/environment.htm

Макросы, это почти тоже что руками... Ну раз нет в ml64, то и фиг с ним

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



 eXeL@B —› Программирование —› Как объявить функцию в MASM'e чтобы ее конвенция совпадала с Microsoft x64?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати