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

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

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

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

Такой код работает:
Код:
jmp [$ + 6]
dq AbsAddr
А такой нет:
Код:
mov rax, AbsAddr
jmp rax
Вопрос: почему не работает второй вариант? Получается, что содержание регистра трактуется не как абсолютный адрес?
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 29.01.2015, 07:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

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

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

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

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

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

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

Цитата:
Сообщение от waleri Посмотреть сообщение
Что загружается в реестр RAX?
В RAX загружается абсолютный адрес, на который нужно прыгнуть.
Код:
mov rax, 0fffff8800475cd //например
Цитата:
Сообщение от waleri Посмотреть сообщение
Куда именно уходит jmp?
Вот это мне и не понятно.
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 29.01.2015, 18:33   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,197
По умолчанию

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

Цитата:
Сообщение от waleri Посмотреть сообщение
Я имел ввиду, что *именно* загружается в RAX - какой адрес.
Адрес функции, на который нужно перепрыгнуть.
Получается в С-шном коде следующим образом:
Код:
ULONG_PTR AbsAddr = (ULONG_PTR)RoutineName;
Цитата:
Сообщение от waleri Посмотреть сообщение
Судя по всему, адрес не правильный.
Вряд ли. С кодом
Код:
jmp [$ + 6]
dq AbsAddr
то работает.
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 29.01.2015, 21:45   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,197
По умолчанию

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

Цитата:
Сообщение от 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; 29.01.2015 в 23:18.
Sam Gold вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JMP DWORD PTR [PAddress] - как узнать адрес Enkee Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 03.11.2011 12:14
DOS->COM->абсолютный адрес загрузки Пепел Феникса Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 24.10.2011 12:29
команда jmp 777user777 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 30.07.2011 23:28
C++/Абсолютный адрес регистра Ebp coNsept Общие вопросы C/C++ 6 29.03.2011 11:56
WebBrowser Абсолютный и относительный адрес nikmay Общие вопросы Delphi 1 01.10.2009 21:41


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS