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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2014, 23:20   #1
STRELOK-2007
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 144
Вопрос Безусловный переход

Подскажите, пожалуйста, опкод - выполняющий безусловный переход на какой то определенный адресс ( именно адрес, абсолютный). И чтобы подошел как для х86 так и для х64 ассамблера!

Заранее, большое спасибо!
STRELOK-2007 вне форума Ответить с цитированием
Старый 23.04.2014, 23:25   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

А, зачем? Компилятор пишем?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 24.04.2014, 00:09   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
И чтобы подошел как для х86 так и для х64 ассамблера!
не в этом мире.
f.hump вне форума Ответить с цитированием
Старый 24.04.2014, 10:14   #4
STRELOK-2007
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 144
По умолчанию

Патчер в памяти.

Почему не в этом? JMP, который $E9 - работал как в х86 программе, так и в х64. Успешно прыгало на новую подпрограмму, вместо старой.

Другое дело, есть минусы:
1) Безвозратно затирается старая ф-я
2) Новая ф-я обязательно должна быть в памяти дальше старой. Аргументом является смещение.

Пробовал указывать абсолютный адрес, отрицательное смещение - не работает, даже так, что видердрайвер вынес разок.
STRELOK-2007 вне форума Ответить с цитированием
Старый 26.04.2014, 23:00   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

потому что вопрос был про переход по абсолютному адресу, E9 - переход относительно текущего указателя (максимальное смещение 0х80000000).

(как это ни странно, в x86 адреса 32-х битные, а в х64 64-х битные)

Последний раз редактировалось f.hump; 26.04.2014 в 23:07.
f.hump вне форума Ответить с цитированием
Старый 27.04.2014, 02:23   #6
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Цитата:
Сообщение от STRELOK-2007 Посмотреть сообщение
Подскажите, пожалуйста, опкод - выполняющий безусловный переход на какой то определенный адресс ( именно адрес, абсолютный). И чтобы подошел как для х86 так и для х64 ассамблера!
Правильный подход: скачиваешь FASM и Far. Пишешь в FASM-е, компилишь, потом открываешь и смотришь hex-просмотром в Far.
Vapaamies вне форума Ответить с цитированием
Старый 27.04.2014, 05:14   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Пробовал указывать абсолютный адрес, отрицательное смещение - не работает, даже так, что видердрайвер вынес разок.
С абсолютными преходами, есть одна тонкость. Они работают, только внутри сегмента памяти. Как правильно заметил f.hump, для перехода в другой сегмент, нужно использовать адрес смещения по-сегментам. На ассемблере давно не работал, но в памяти отложиталь такая штука. Как это реализовать, сказать затрудняюсь.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 27.04.2014, 08:37   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
EA cd JMP ptr16:16 Jump far, absolute, address given in operand
EA cp JMP ptr16:32 Jump far, absolute, address given in operand
FF /5 JMP m16:16 Jump far, absolute indirect, address given in m16:16

FF /5 JMP m16:32 Jump far, absolute indirect, address given in m16:32
Из хелпа фасма.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.04.2014, 09:36   #9
STRELOK-2007
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 144
По умолчанию

А что на счет:

PUSH + Addr + Ret?

Вроде как есть x64 версия, с возможности указать 8 байтный адресс памяти?
STRELOK-2007 вне форума Ответить с цитированием
Старый 28.04.2014, 17:06   #10
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

нет такого PUSH в х64.
(8 байтную величину из регистра или памяти можно на стек положить, но свободную константу - нет)
f.hump вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переход с ХР на 7 Viktori-P Windows 4 16.02.2013 20:20
переход на С++ all_is_fear Общие вопросы C/C++ 5 26.11.2012 23:15
Безусловный переход Red_Line Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 07.07.2011 18:16
Переход на C Gapro Свободное общение 8 09.11.2009 13:02
Переход Gorychev PHP 6 26.05.2008 01:16