Другое С/С++ Вопрос - Ответ

romanblinov2013

RB_PRO
Проверенный
212
196
Добрый день, форумчане. Как найти WINAPI адрес, из которого можно достать размер определённой картинки?
upload_2018-6-16_9-12-44.png





И сразу же добивающий вопрос...
Как узнать, сколько файлов в определённой папке?
upload_2018-6-16_9-14-35.png


Заранее спасибо за ответ:sensored:
 

imring

Ride the Lightning
Всефорумный модератор
2,363
2,566

Niko

Известный
Проверенный
230
273
В общем, у меня есть функция, которая ставит JMP хук на указанный адрес. Проблема в том, что если поставить хук в разных файлах на один и тот же адрес, то хук перезаписывается и работает только в одном файле. Можно ли как то этого избежать?
 

BlackKnigga

Известный
BH Team
922
449
В общем, у меня есть функция, которая ставит JMP хук на указанный адрес. Проблема в том, что если поставить хук в разных файлах на один и тот же адрес, то хук перезаписывается и работает только в одном файле. Можно ли как то этого избежать?
Можно сохранять перезаписываемые команды и выполнять их после своего кода
 

iAmerican

Известный
Друг
611
261
Добрый день, форумчане. Как найти WINAPI адрес, из которого можно достать размер определённой картинки?
Посмотреть вложение 14961




И сразу же добивающий вопрос...
Как узнать, сколько файлов в определённой папке?
Посмотреть вложение 14962

Заранее спасибо за ответ:sensored:

C++:
int iCount = 0;
std::string sPatch = "D:\\ShP\\; 
std::string sMask=  sPatch+ "*.png"; 

void CheckFiles()
   {
       iCount = 0;
       WIN32_FIND_DATA FindFileData;
       HANDLE hFile = FindFirstFileA(szFullMask.c_str(), &FindFileData);
       if (hFile != INVALID_HANDLE_VALUE)
       {
           do {
               iCount ++;
           } while (FindNextFile(hFile, &FindFileData) != 0);
           FindClose(hFile);
       }
   }

printf("%i",iCount);
 
  • Нравится
Реакции: romanblinov2013

itsOkke

Потрачен
86
38
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
лучше создай одну хук функцию в которой вызывай из массива другие хук функции,
которые будут регистрироваться просто добавлением функции в этот массив
 

itsOkke

Потрачен
86
38
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
using proc_DialogCallBack = void(__stdcall *)();

class DialogHook {
public:
    void registerDialogHook(void(__stdcall *func)()) {
        // ...
    }
    void registerDialogCallBack(proc_DialogCallBack callback) {
        // ...
        callbacks.push_back(callback);
    }
    std::vector<proc_DialogCallBack> callbacks;
} *pDialog;

__declspec(naked) void __stdcall hook() {
    std::for_each(pDialog->callbacks.begin(), pDialog->callbacks.end(), [](proc_DialogCallBack &callback) {
        callback();
    });
}

int main() {
    pDialog->registerDialogHook(hook);

    pDialog->registerDialogCallBack([]() {
        std::cout << "callback1" << std::endl;
    });

    pDialog->registerDialogCallBack([]() {
        std::cout << "callback2" << std::endl;
    });
  
    pDialog->registerDialogCallBack([]() {
        std::cout << "callback3" << std::endl;
    });
}
Вот же не поленился и расписал как это может примерно выглядеть

Нужно ещё учесть то, что хук другого плагина может не стоять. Можешь проверить это вот так: if (*reinterpret_cast<BYTE*>(0x021A1F) == 0xE9) // 0xE9 - опкод jmp
А если опкод будет другой
 
  • Нравится
Реакции: Niko

itsOkke

Потрачен
86
38
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
вообще конфликтуют хуки из одного плагина, зачем вообще что то проверять через байты
 

itsOkke

Потрачен
86
38
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

Sasiko1

Новичок
24
0
Опишите что он делает
C++:
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];
    if(!pPlayer) return;
 

#Rin

Известный
Всефорумный модератор
1,213
1,046
  • Нравится
Реакции: Sasiko1