подмена функции

Тема в разделе "WASM.BEGINNERS", создана пользователем CodeIgniter, 1 июл 2011.

  1. CodeIgniter

    CodeIgniter New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2011
    Сообщения:
    3
    ку
    не получается в моей функции обратно вызвать оригинальную функцию приложения

    обьявление указателя на функцию

    Код (Text):
    1. typedef DWORD ( WINAPI original_PR_Write)(DWORD, DWORD, DWORD);
    2. original_PR_Write* r_PR_Write=NULL;
    записиь адреса оригинала
    Код (Text):
    1. r_PR_Write=(original_PR_Write*)ImportAddress;
    вызов
    Код (Text):
    1. (*r_PR_Write)(fd, buf, amount);
     
  2. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    разве не

    Код (Text):
    1. PRInt32 (CDECL PR_Write)(
    2.     PRFileDesc *fd,
    3.     const void *buf,
    4.     PRInt32 amount
    5.     );
     
  3. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    Это всё от незнания языка и компилятора. Реально вы должны знать полностью какой будет машкод после компиляции. Иначе никак - юзайте асм, либо учите скрипт.
     
  4. CodeIgniter

    CodeIgniter New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2011
    Сообщения:
    3
    нет именно так как я написал, то что вы написали это оригинал
     
  5. CodeIgniter

    CodeIgniter New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2011
    Сообщения:
    3
    я и без вас понимаю, что я не знаю
    потому на форуме и спрашиваю у людей более компетентных в этом
    вы же вместо того что бы помочь, начинаете говорить что человек который спрашивает делает это потому что не знает, а вам не кажется что это очевидно?))
     
  6. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    Код (Text):
    1. typedef DWORD (WINAPI * original_PR_Write)(DWORD, DWORD, DWORD);
    2. original_PR_Write r_PR_Write = NULL;
    3.  
    4. // запись адреса оригинала
    5. r_PR_Write = (original_PR_Write) ImportAddress;
    6.  
    7. // вызов
    8. r_PR_Write(fd, buf, amount);