Перевести кусок кода с Fasm на Masm

Тема в разделе "WASM.BEGINNERS", создана пользователем Denis__, 11 янв 2007.

  1. Denis__

    Denis__ New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2006
    Сообщения:
    56
    Fasm:
    Код (Text):
    1. InjectCode:
    2.   call     $+5
    3.   pop      esi
    4.   sub      esi, $-InjectCode-1
    5.   push     0
    6.   lea      eax, [esi+caption-InjectCode]
    7.   push     eax
    8.   lea      eax, [esi+text-InjectCode]
    9.   push     eax
    10.   push     0
    11.   call     [esi+p_MessageBox-InjectCode]
    12.   retn     4
    Masm:
    Код (Text):
    1. InjectCode:
    2.   call     $+5
    3.   pop      esi
    4.   sub      esi, $-InjectCode-1
    5.   push     0
    6.   lea      eax, [esi+(caption-InjectCode)]
    7.   push     eax
    8.   lea      eax, [esi+(text-InjectCode)]
    9.   push     eax
    10.   push     0
    11.   call     [esi+(p_MessageBox-InjectCode)]   ;здесь компилятор выдает ошибку
    12.   retn     4
    Собственно как реализовать call [esi+p_MessageBox-InjectCode] в Masm, варианты типа:
    Код (Text):
    1. lea eax, [esi+(p_MessageBox-InjectCode)]
    2. call eax
    не предлагать :)
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    В случае масма, p_MessageBox в экзешнике может оказаться где угодно. Поэтому (p_MessageBox-InjectCode) получается релокабельным, в отличие от фасма, где все метки фиксированные.
     
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    call dword ptr [esi+(p_MessageBox-InjectCode)]
    ?
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Расставить dword ptr и offset не забывайте. Кстати, хоть бы ошибку привёл.
     
  5. Denis__

    Denis__ New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2006
    Сообщения:
    56
    Код на работе,завтра номер ошибки напишу
     
  6. Denis__

    Denis__ New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2006
    Сообщения:
    56
    Ошибка:
    error A2023: instruction operand must have size - по русскому же написано :)
    Решение нашел:
    Код (Text):
    1. call dword ptr [esi+(p_MessageBox-InjectCode)]
    В общем, тем можно закрыть, просто за морочился на работе.
    Всем спасибо.