Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2010, 16:52   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию Механизм CALL

Доброго всем. Мне нужно вызвать некую подпрограмму. Интересует как это выглядит в опкодах. Прошу пояснить как рассчитывается near вызов в примерно такого содержания
Код:
00402000    83C3 06       ADD     EBX, 6
00402003    C3              RETN
00402004    6BC0 05       IMUL    EAX, EAX, 5
00402007    E8 F4FFFFFF   CALL    Dumpy.00402000
0040200C    C3            RETN
Как рассчитывается F4FFFFFF?

Или же как выглядит опкод команды (и сама команда) вызова по абсолютному адресу?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2010, 17:20   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Формула вычисления такова:
x=0-(y-z)
y - смещение следующей команды
z - требуемый VA для jmp
jmp x

00400290 ……..
...
004019С0 jmp 00400290
004019C5 ...

вычисляем то, что в скобках:

004019C5h-00400290h=00001735h

вычитаем:
00000000-00001735h=FFFFE8CBh

и записываем после опкода jmp (E8) или CALL (E9) то, что получили. Для проверки смотрим в отладчик и видим:
Код:
004019C0   E9 CBE8FFFF    JMP 00400290
такая передача управления зависит от того где находится команда, если такой же опкод будет находится по другому адресу отличному от 004019C0, то и прыжок произойдёт в другое место. т.е. по сути процессоре возьмёт значение CBE8FFFF и прибавит его к значению регистра EIP (а так как значение CBE8FFFF является отрицательным, то и произойдёт переход назад на нужную метку).

для абсолютного перехода надо использовать что-то типа
Код:
mov eax, address
call eax
либо
Код:
VA dd <АДРЕС>
call [VA]

Последний раз редактировалось rpy3uH; 29.07.2010 в 17:30.
rpy3uH вне форума Ответить с цитированием
Старый 30.07.2010, 10:06   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
rpy3uH
Ага. Кажись понятно.
С переходом через EAX я знаком, а вот за рассчет относительного адреса спс.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Механизм взаимодействия с базой данных arhiepiskop Помощь студентам 1 02.06.2010 18:31
База данных,механизм ADO 9rki Помощь студентам 3 27.05.2010 13:32
Механизм сессий и БД. Оптимизация Виталий Желтяков PHP 10 18.05.2010 09:58
Помогите выбрать механизм взаимодействия Mixasik БД в Delphi 5 06.07.2009 22:36
Механизм регистрации на сайте Devoto PHP 4 26.03.2009 20:44