Добрый день . Вопрос - подскажите пожалуйста как переписать в fasm-е выделенную стороку : Код (Text): ... section '.data' data readable writeable num db 0 ... .label: lea eax, [num] jmp [offset .label + eax]; <------!!! Спасибо.
max7C4 >jmp [eax+.label] - не выходит ( вот весь код Код (Text): format PE GUI 4.0 entry start include 'c:\fasmw\include\win32a.inc' section '.data' data readable writeable num dd 0 section '.code' code readable executable start: push 0 push 0 push 0 push _thread push 0 push 0 call [CreateThread] .label: mov eax, [num] jmp [eax + .label] ; < ----- error: operand size not specified. push 0 ; Выходим call [ExitProcess] ; из программы _thread: mov [num],8 ret section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL' include 'C:\fasmw\INCLUDE\APIA\kernel32.inc'
_sheva740, а таблица адресов для такого jmp где? Инструкция переходит по адресу, который читает из двойного слова по адресу (.label + eax). Это немного не то, что вы хотели, наверное? С таблицей адресов будет: Код (Text): jmp [.jmpt+eax*4] … .jmpt dd .label_foo ;При eax = 0 dd .label_bar ;При eax = 1 dd .label_baz ;и т. д.
Видимо автор хочет до устновки num крутиться в цикле, а после установки выйти на ExitProcess - в этом случае таблица переходов и квадратные скобки не нужны: Код (Text): mov eax,.label ;или lea eax,[.label] add eax,[num] jmp eax
Тогда наверное так Код (Text): .label: mov eax, [num] lea eax, [eax+.label] jmp eax или смотрите вариант leo.
iZzz32 leo max7C4 >Видимо автор хочет до устновки num крутиться в цикле ... Спасибо за помощь, этого действительно "хочет автор" и получил с Вашей помощью. Нарыл тут статей по антиотладке пытаюсь осилить. Вот может кому пригодится. Код (Text): format PE GUI 4.0 entry start include 'c:\fasmw\include\win32a.inc' section '.data' data readable writeable num db 0 section '.code' code readable executable start: push 0 push 0 push 0 push _thread push 0 push 0 call [CreateThread] .label: mov eax, dword [num] lea eax, [eax+.label] jmp eax invoke MessageBox, NULL, NULL, NULL, MB_OK push 0 call [ExitProcess] align 4 _thread: mov byte [num],13 ret 4 section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.dll' include 'C:\fasmw\INCLUDE\APIA\kernel32.inc' include 'C:\fasmw\INCLUDE\APIA\user32.inc' Под Отладчиком - зацикливается , а при обычном запуске отрабатывает- выводит MessageBox().