HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #21  
Старый 13.09.2022, 18:37
Yuriy Code
Постоянный
Регистрация: 01.05.2021
Сообщений: 752
С нами: 2650753

Репутация: 98


По умолчанию

Цитата:
Сообщение от sc6ut  

{куда надо}20-{откуда}10-{размер инструкции}5=5
Скаут, (20 - 10) - 5 = 5, либо

20 - (10 - 5) = 15...

У нас в итоге не получается адрес равному 20...
 
Ответить с цитированием

  #22  
Старый 13.09.2022, 18:39
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

Репутация: 213
По умолчанию

Цитата:
Сообщение от Yuriy Code  

Скаут, (20 - 10) - 5 = 5, либо
20 - (10 - 5) = 15...

У нас в итоге не получается адрес равному 20...
ты скобки сам себе в голове придумал? перечитай как jmp работает, должно получится 5
 
Ответить с цитированием

  #23  
Старый 13.09.2022, 18:42
Yuriy Code
Постоянный
Регистрация: 01.05.2021
Сообщений: 752
С нами: 2650753

Репутация: 98


По умолчанию

Цитата:
Сообщение от sc6ut  

ты скобки сам себе в голове придумал? перечитай как jmp работает, должно получится 5
😱, Скаут, но тогда jmp будет на адрес 5...
 
Ответить с цитированием

  #24  
Старый 13.09.2022, 18:48
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

Репутация: 213
По умолчанию

Цитата:
Сообщение от Yuriy Code  

😱, Скаут, но тогда jmp будет на адрес 5...
Цитата:
Сообщение от sc6ut  

она является релативной, то есть на сколько прыгнуть ПОСЛЕ себя.
ебаный рот читать научись я просто вахуе нет слов

15(адрес после jmp)+5(на сколько прыгнуть)=20
 
Ответить с цитированием

  #25  
Старый 09.11.2022, 11:18
ARMOR
Флудер
Регистрация: 02.02.2019
Сообщений: 5,070
С нами: 3831395

Репутация: 183


По умолчанию

У меня одного jmp хук вызывает краш при запуске игры? В консоль выводится только первое сообщение сампа, и дальше моментальный краш.
 
Ответить с цитированием

  #26  
Старый 08.08.2024, 17:19
maksmanus228
Участник форума
Регистрация: 23.10.2020
Сообщений: 135
С нами: 2925217

Репутация: 83
По умолчанию

void* SetCallHook(uintptr_t HookAddress, void* DetourFunction) {

uintptr_t OriginalFunction = *reinterpret_cast(HookAddress + 1) + HookAddress + 5;

DWORD oldProt;

VirtualProtect(reinterpret_cast(HookAddress + 1), sizeof(uintptr_t), PAGE_READWRITE, &oldProt);

*reinterpret_cast(HookAddress + 1) = reinterpret_cast(DetourFunction) - HookAddress - 5;

VirtualProtect(reinterpret_cast(HookAddress + 1), sizeof(uintptr_t), oldProt, &oldProt);

return reinterpret_cast(OriginalFunction);

}

а причем тут хук адрес + 1 Откуда взялась единица? объясните пожалуйста
 
Ответить с цитированием

  #27  
Старый 09.08.2024, 01:09
fuflexxxx
Познающий
Регистрация: 10.06.2020
Сообщений: 37
С нами: 3119285

Репутация: 63
По умолчанию

Цитата:
Сообщение от maksmanus228  

void* SetCallHook(uintptr_t HookAddress, void* DetourFunction) {
uintptr_t OriginalFunction = *reinterpret_cast(HookAddress + 1) + HookAddress + 5;
DWORD oldProt;
VirtualProtect(reinterpret_cast(HookAddress + 1), sizeof(uintptr_t), PAGE_READWRITE, &oldProt);
*reinterpret_cast(HookAddress + 1) = reinterpret_cast(DetourFunction) - HookAddress - 5;
VirtualProtect(reinterpret_cast(HookAddress + 1), sizeof(uintptr_t), oldProt, &oldProt);
return reinterpret_cast(OriginalFunction);
}

а причем тут хук адрес + 1 Откуда взялась единица? объясните пожалуйста
Инструкции Call/Jmp работают через переход по RVA, Инструкция состоит из байтов E8/E9 + 4 байта на RVA. Т.е HookAddress - это адрес, где будут байты примерно такие E8 05 00 00 00 - в данном примере будет вызвана функция по адресу текущему + 0x5, и получается, что HookAdress + 1 - это байты rva. Они обычно кастуются к типу 4 байта и туда пишется своё значение.
 
Ответить с цитированием

  #28  
Старый 26.08.2024, 14:16
maksmanus228
Участник форума
Регистрация: 23.10.2020
Сообщений: 135
С нами: 2925217

Репутация: 83
По умолчанию

Цитата:
Сообщение от fuflexxxx  

Инструкции Call/Jmp работают через переход по RVA, Инструкция состоит из байтов E8/E9 + 4 байта на RVA. Т.е HookAddress - это адрес, где будут байты примерно такие E8 05 00 00 00 - в данном примере будет вызвана функция по адресу текущему + 0x5, и получается, что HookAdress + 1 - это байты rva. Они обычно кастуются к типу 4 байта и туда пишется своё значение.
а понял, спасибо большое
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT ™ © 2001- Antichat Kft.