На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Помогите восстановить регистры =(
    Добрый день.

    Пишу прогу в которой юзаю хук. Все ок, но после хука я вызываю свой обработчик хука (вызываю его из... эм... чтоб в подробности моего говно-кода не вдаваться, скажем из библиотеки...) и этот обработчик после своей работы козявит мне регистры и я ловлю ошибку.
    Скрин прилеплю, там видно, что регистры он сохранил, вот только восстановить не потрудился, и указатель на стек уже другой.
    Я с олей только начал дружить, вопрос к профи: нужно ли после работы какой либо функции восстанавливать указатель стека, или это не критично и мне нужно только восстановить регистры для работы?
    Я бы мог перед этим говно-обработчиком записать все регистры в стек, и сунуть куда-нить указатель на стек, а после работы говно-обработчика засунуть указатель в esp и вытащить регистры из стека, и даже вернуть указатель туда где был.
    Вот только куда сунуть указатель, чтоб его не потер говно-обработчик? И нужно ли возвращать указатель туда где он был? И вообще поможет мне такая процедура восстановления ручная? Или мне после каждой модификации своего обработчика придется асм код менять, чтоб за ним прибрал? Помогите пожалуйста.
    user posted image
      Цитата Rzonex @
      нужно ли после работы какой либо функции восстанавливать указатель стека, или это не критично и мне нужно только восстановить регистры для работы

      Ответ от непрофессионала ... После выхода из функции - стек должен "вернуться" в изначальное состояние. Это есть бэст практик. Конечно можно поизвращаться, типа аллоцировать 99% максимально-доступного размера стека и рассматривать его как массив-кэш. Но не факт. что подобный подход резко увеличит производительность. ИМХО, накладные расходы по "самостоятельному управлению" просто зашкалят... Напоминаю - ответ от непрофессионала :)

      Добавлено
      Цитата Rzonex @
      Вот только куда сунуть указатель, чтоб его не потер говно-обработчик?

      Ну явно - не в стек :) Аллоцируй ячейку памяти, в которую можешь писать и из которой можешь считать.
        Может кто объяснит почему вообще такая фигня произошла?

        ExpandedWrap disabled
          void bb_ClientPacket(void *Src, int Size);
           
          void __fastcall SendXClient_Hook(unsigned int *This, void *_EDX, void *Src, int Size){
              bb_ClientPacket(Src, Size);                                                       // Этот обработчик все козявит, если его убрать то все ок, у него соглашение __stdcall
              SendXClient(This, _EDX, Src, Size);                                               // Здесь вызываю оригинальную фунуцию соглашение __fastcall
          }
        Сообщение отредактировано: Jin X -
          В Borland'е _EDX - зарезервированное имя для соотв. регистра. Назовите уж лучше _EDX_ для надёжности расхождения.
            Хорошо, спасибо)
              Rzonex, а это точно хук? Или в данном случае под хуком подразумевается хак? :)
              Функцию SendXClient_Hook кто вызывает?
              bb_ClientPacket тут не __stdcall, т.к. я не вижу в объявлении функции этого модификатора (если он, конечно, по дефолту не стоит).
              Где код самой функции-то? Судя по всему, косяк именно внутри...

              p.s. Другие слова на букву "х" и пр. лучше выбирать помягче для рамках форума.
                Jin X Не, не, не, это точно хук. Я просто исходники от своей программы потерял, вот хочу доработать функционал. :D
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0338 ]   [ 16 queries used ]   [ Generated: 28.03.24, 12:29 GMT ]