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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2015, 00:16   #11
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Ну не знаю, у меня закончились идеи...
Сам jmp точно работает, а вот что происходить дальше, могу только гадать...
Может адрес возврата в стеке испорчен? Кто и как все это дело вызывает?
waleri вне форума Ответить с цитированием
Старый 31.01.2015, 21:38   #12
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Может адрес возврата в стеке испорчен? Кто и как все это дело вызывает?
Стек в коде не трогается. Функция вызывается в Сишном коде
Код:
//C code
VOID CalcRoutine();
....

//Asm code
CalcRoutine PROC
;math operations
...
mov rax, AbsAddr
jmp rax
ret

CalcRoutine ENDP
По адресу AbsAddr лежит функция
Код:
VOID RoutineName()
{
	DbgPrint("RoutineName called");
}
Цитата:
Сообщение от waleri Посмотреть сообщение
Сам jmp точно работает, а вот что происходить дальше, могу только гадать...
Кажется понял, почему крашится. Вот что говорит Intel Software Developers Manual
Цитата:
FF /4 JMP r/m64 M Valid N.E. Jump near, absolute indirect, RIP = 64-Bit
offset from register or memory
Т.е. это тоже near.
А вот far:
Цитата:
REX.W + FF /5 JMP m16:64 Jump far, absolute indirect, address given in
m16:64.
Только мне пока непонятно, как бит REX.W установить. m16, я так понял, сегмент?
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 01.02.2015, 23:31   #13
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

В сообщении #1 ошибка, должно быть
Код:
jmp qword ptr[$ + 6]
dq AbsAddr
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 01.02.2015, 23:47   #14
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

А зачем нужен FAR?
Я думал нужен просто абсолютный адрес.
waleri вне форума Ответить с цитированием
Старый 02.02.2015, 00:47   #15
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А зачем нужен FAR?
Я думал нужен просто абсолютный адрес.
Так а если код, на который прыгаем в другом сегменте? Или при указании абсолютного адреса все равно?
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 02.02.2015, 09:18   #16
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Если он в одном процессе, то вряд ли он будет в другом сегменте.
Подключитесь отладчиком и посмотрите куда прыгает код.
Кроме того, можно попробовать вызвать напрямую из С, как обычную функцию и проверить работает или нет.
waleri вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JMP DWORD PTR [PAddress] - как узнать адрес Enkee Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 03.11.2011 13:14
DOS->COM->абсолютный адрес загрузки Пепел Феникса Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 24.10.2011 13:29
команда jmp 777user777 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 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