Вопрос по синтаксису fasm - a

Тема в разделе "WASM.BEGINNERS", создана пользователем _sheva740, 10 июн 2008.

  1. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Добрый день .
    Вопрос - подскажите пожалуйста как переписать в fasm-е выделенную стороку :
    Код (Text):
    1. ...
    2. section '.data' data readable writeable
    3. num db 0
    4. ...
    5. .label:
    6.     lea eax, [num]
    7.     jmp [offset .label + eax]; <------!!!
    Спасибо.
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Вот так
    Код (Text):
    1. jmp [eax+.label]
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    max7C4
    >jmp [eax+.label] - не выходит :dntknw:( вот весь код
    Код (Text):
    1. format PE GUI 4.0
    2. entry start
    3. include 'c:\fasmw\include\win32a.inc'
    4.  
    5. section '.data' data readable writeable
    6. num dd 0
    7.  
    8.  
    9. section '.code' code readable executable
    10. start:
    11.     push    0
    12.     push    0
    13.     push    0
    14.     push    _thread
    15.     push    0
    16.     push    0
    17.     call    [CreateThread]
    18.  
    19. .label:
    20.     mov eax, [num]
    21.     jmp [eax + .label] ; < ----- error: operand size not specified.
    22.  
    23.  
    24.     push    0        ; Выходим
    25.     call    [ExitProcess]    ; из программы
    26.  
    27. _thread:
    28.     mov [num],8
    29.     ret
    30.  
    31.  
    32.  
    33. section '.idata' import data readable writeable
    34.  library kernel32,'KERNEL32.DLL'
    35.  include 'C:\fasmw\INCLUDE\APIA\kernel32.inc'
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Код (Text):
    1. jmp dword [eax + .label]
     
  5. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    _sheva740, а таблица адресов для такого jmp где? Инструкция переходит по адресу, который читает из двойного слова по адресу (.label + eax). Это немного не то, что вы хотели, наверное? :derisive: С таблицей адресов будет:
    Код (Text):
    1. jmp [.jmpt+eax*4]
    2.  
    3. .jmpt dd .label_foo ;При eax = 0
    4.       dd .label_bar ;При eax = 1
    5.       dd .label_baz ;и т. д.
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Видимо автор хочет до устновки num крутиться в цикле, а после установки выйти на ExitProcess - в этом случае таблица переходов и квадратные скобки не нужны:
    Код (Text):
    1. mov eax,.label  ;или lea eax,[.label]
    2. add eax,[num]
    3. jmp eax
     
  7. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Тогда наверное так
    Код (Text):
    1. .label:
    2. mov eax, [num]
    3. lea eax, [eax+.label]
    4. jmp eax
    или смотрите вариант leo.
     
  8. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    iZzz32
    leo
    max7C4
    >Видимо автор хочет до устновки num крутиться в цикле ...
    Спасибо за помощь, этого действительно "хочет автор" :) и получил с Вашей помощью.

    Нарыл тут статей по антиотладке пытаюсь осилить.
    Вот может кому пригодится.
    Код (Text):
    1. format PE GUI 4.0
    2. entry start
    3. include 'c:\fasmw\include\win32a.inc'
    4.  
    5. section '.data' data readable writeable
    6. num     db 0
    7.  
    8.  
    9. section '.code' code readable executable
    10. start:
    11.  
    12.     push    0
    13.     push    0
    14.     push    0
    15.     push    _thread
    16.     push    0
    17.     push    0
    18.     call    [CreateThread]
    19.  
    20. .label:
    21.     mov eax, dword [num]
    22.     lea  eax, [eax+.label]
    23.     jmp eax
    24.  
    25.     invoke  MessageBox, NULL, NULL, NULL, MB_OK
    26.  
    27.     push    0        
    28.     call    [ExitProcess]    
    29.  
    30. align 4
    31. _thread:
    32.     mov byte [num],13
    33.     ret 4
    34.  
    35. section '.idata' import data readable writeable
    36.  library    kernel32,'KERNEL32.DLL',\
    37.     user32,'USER32.dll'
    38.  
    39.  include 'C:\fasmw\INCLUDE\APIA\kernel32.inc'
    40.  include 'C:\fasmw\INCLUDE\APIA\user32.inc'
    Под Отладчиком - зацикливается , а при обычном запуске отрабатывает- выводит MessageBox().