Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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

Ответ
 
Опции темы
Старый 29.01.2015, 01:04   #1
Sam Gold
Участник клуба
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Адрес: Город Святого Петра
Сообщений: 513
Репутация: 263
По умолчанию jmp на абсолютный адрес

Доброго времени суток.
Нужно прыгнуть по абсолютному адресу. MASM, x64.

Такой код работает:
Код:

jmp [$ + 6]
dq AbsAddr

А такой нет:
Код:

mov rax, AbsAddr
jmp rax

Вопрос: почему не работает второй вариант? Получается, что содержание регистра трактуется не как абсолютный адрес?
__________________
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума   Ответить с цитированием
Старый 29.01.2015, 08:54   #2
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,957
Репутация: 6832
По умолчанию

В хелпе:
Цитата:
reg16 (near, register indirect)
reg32 (near, register indirect)
near короче...
Длинных на регистрах нет. По крайней мере в х86, в х64 думаю то же самое.
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 29.01.2015, 09:26   #3
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,513
Репутация: 1686
По умолчанию

А что значи "не работает"?
Что загружается в реестр RAX?
Куда именно уходит jmp?
waleri на форуме   Ответить с цитированием
Старый 29.01.2015, 11:08   #4
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 21,006
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
В хелпе:

near короче...
Длинных на регистрах нет. По крайней мере в х86, в х64 думаю то же самое.
в каком таком хелпе?
всю жизнь была такая инструкция.
а эти две это прыжок по адресу из памяти.
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Старый 29.01.2015, 11:31   #5
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,957
Репутация: 6832
По умолчанию

Цитата:
в каком таком хелпе?
Хелп от MASM. Скрин показать?
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 29.01.2015, 11:32   #6
Sam Gold
Участник клуба
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Адрес: Город Святого Петра
Сообщений: 513
Репутация: 263
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А что значи "не работает"?
Джампит куда-то не туда. В результате система падает.

Цитата:
Сообщение от waleri Посмотреть сообщение
Что загружается в реестр RAX?
В RAX загружается абсолютный адрес, на который нужно прыгнуть.
Код:

mov rax, 0fffff8800475cd //например

Цитата:
Сообщение от waleri Посмотреть сообщение
Куда именно уходит jmp?
Вот это мне и не понятно.
__________________
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума   Ответить с цитированием
Старый 29.01.2015, 19:33   #7
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,513
Репутация: 1686
По умолчанию

Я имел ввиду, что *именно* загружается в RAX - какой адрес.
Судя по всему, адрес не правильный.
Что-то с mov rax, AbsAddr не так...
waleri на форуме   Ответить с цитированием
Старый 29.01.2015, 22:21   #8
Sam Gold
Участник клуба
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Адрес: Город Святого Петра
Сообщений: 513
Репутация: 263
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Я имел ввиду, что *именно* загружается в RAX - какой адрес.
Адрес функции, на который нужно перепрыгнуть.
Получается в С-шном коде следующим образом:
Код:

ULONG_PTR AbsAddr = (ULONG_PTR)RoutineName;

Цитата:
Сообщение от waleri Посмотреть сообщение
Судя по всему, адрес не правильный.
Вряд ли. С кодом
Код:

jmp [$ + 6]
dq AbsAddr

то работает.
__________________
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума   Ответить с цитированием
Старый 29.01.2015, 22:45   #9
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,513
Репутация: 1686
По умолчанию

Отпечатайте адрес RoutineName и содержимое RAX.
Посмотрите машинный код, который сгенерила инструкция mov RAX, ...
Оно отладчиком было бы легче...
waleri на форуме   Ответить с цитированием
Старый 30.01.2015, 00:12   #10
Sam Gold
Участник клуба
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Адрес: Город Святого Петра
Сообщений: 513
Репутация: 263
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Отпечатайте адрес RoutineName и содержимое RAX.
Посмотрите машинный код, который сгенерила инструкция mov RAX, ...
Оно отладчиком было бы легче...
Код содержащий прыжок
Код:

lkd> u fffff8800460f0a6
fffff880`0460f0a6 90              	        nop
fffff880`0460f0a7 48b840f8600480f8ffff 		mov rax, 0FFFFF8800460F840h
fffff880`0460f0b1 48ffe0          	        jmp     rax

Функция RoutineName, лежащая по адресу 0xFFFFF8800460F840h, делает следующее
Код:

VOID RoutineName()
{
	DbgPrint("RoutineName called");
}

ее дизасм:
Код:

lkd> u fffff8800460f840
fffff880`0460f840 4883ec28          sub rsp, 28h
fffff880`0460f844 488d0d15030000    lea rcx, [fffff880`0460fb60]
fffff880`0460f84b e806000000        call fffff880`0460f856
fffff880`0460f850 4883c428          add rsp, 28h
fffff880`0460f854 c3                ret

__________________
Единственный способ стать умнее - играть с более умным противником.

Последний раз редактировалось Sam Gold; 30.01.2015 в 00:18.
Sam Gold вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JMP DWORD PTR [PAddress] - как узнать адрес Enkee Assembler 1 03.11.2011 13:14
DOS->COM->абсолютный адрес загрузки Пепел Феникса Assembler 5 24.10.2011 13:29
команда jmp 777user777 Assembler 1 31.07.2011 00:28
C++/Абсолютный адрес регистра Ebp coNsept Общие вопросы C/C++ 6 29.03.2011 12:56
WebBrowser Абсолютный и относительный адрес nikmay Общие вопросы Delphi 1 01.10.2009 22:41


10:21.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru