[C++] Получение адреса функции - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming

Программирование / Programming
Ищете помощи в написании программы, есть сложность в выполнении задания (в институте и т.д.), пожалуйста, спросите у нас в данном форуме и мы обязательно вам поможем.

Ответ
Опции темы
Непрочитано 25.08.2016, 20:08   #1
Аватар для Sojang
Пользователь

Автор темы (Топик Стартер) [C++] Получение адреса функции

Вопрос в том как получить адрес начала инструкции функции?
Так как делаю я меня не устраивает ибо по получаемому мною адресу лежит команда jmp на начало инструкции,а не сама инструкция.
Sojang вне форума Ответить с цитированием
Непрочитано 25.08.2016, 20:42   #2
Заинтересовавшийся

По умолчанию Re: [C++] Получение адреса функции

Привет, Возможно поможет снеговик ( snowman )


Нажмешь как поставишь его в иду F3 и получишь то что на скриншоте
с началом адреса инструкции , и куда ( если есть ) идет переход , прыжок в данном примере jmp.

ps возможно пригодиться, если правильно понимаю вопрос.
Altha1oda вне форума Ответить с цитированием
Непрочитано 25.08.2016, 20:59   #3
Пользователь

По умолчанию Re: [C++] Получение адреса функции

Если нужно вычислить адрес куда ведет этот переход то я считаю так:

PHP код:
unsigned int calcRealAddr(unsigned char *addr)
{
    if (*
addr == 0xE9)//код оператора JMP
    
{
        
//jmp operand found, calc jump addr
        
unsigned int jmpAddr = (unsigned int)addr + (*(int*)((unsigned int)addr 1)) + 5;
        return 
calcRealAddr((unsigned char*)jmpAddr);
    }
    return (
unsigned int)addr;

Причем функция рекурсивная. Если по адресу перехода будет опять jmp будет считать дальше.
flopix вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 25.08.2016, 21:04   #4
Аватар для Akumu
Пользователь

По умолчанию Re: [C++] Получение адреса функции

Чем собственно джамп не устраивает?

Подозреваю у вас проблема с установкой хука на джамп, так как инструкции JMP имеют относительную адресацию, а вы не пересчитываете смещение после переноса кода (либо делаете это не верно).

Ну есть прям совсем не получается то можно вот:

Код:
#define JMP_VALUE(addr) (*(DWORD*)((addr) + 1))
#define FOLLOW_JMP(addr) (JMP_VALUE(addr) + (DWORD)(addr) + 5)
#define FOLLOW_JUMPS(a) while (IS_JMP(a)) \
{ \
	a = FOLLOW_JMP(a); \
}
Akumu вне форума Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрытия ип адреса Gaborik Lineage II 5 29.05.2015 01:00
Стандартные функции шифрования в клиенте RedIst Игровой клиент 0 26.02.2014 04:49
В память о веселой функции...! KilRoy Курилка / Yak floor 4 12.02.2012 03:37
Клановые функции RMor Lineage II 0 11.05.2011 22:08
Функции player. SkAvenger Работа со скриптами 8 30.12.2010 14:24


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 20:19. Часовой пояс GMT +3.

Вверх