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

RTD

Потужно
Модератор
399
470
Пытаюсь хукнуть диалоги на чистых плюсах.
Возник попрос как записывать такое значение из стека при его вытаскивании:
Посмотреть вложение 175525
типо
C++:
mov eax, [esp + -0x0C]
mov eax, [esp + -0x08]
Или как?
Чистые плюсы это в твоем понимании обмазаться асемблером? Напиши прототип и не еби мозги
 
  • Вау
Реакции: #Northn и Z3roKwq

ARMOR

Модератор по раксампу
Модератор
4,936
6,732
Чистые плюсы это в твоем понимании обмазаться асемблером? Напиши прототип и не еби мозги
Я делаю jmp хук по гайду кинча
Только ставлю прототип и асемблер от диалогов.

Код:
C++:
void dialogHook(void* pDialog, uint16_t wID, uint8_t iStyle, const char* szCaption, const char* szText, const char* szButton1, const char* szButton2, BOOL bSend) {
    AddMessageJumpQ("~r~Hello from blast.hk", 5000, 0, false);
}

void __declspec(naked) HOOK_Raw_Dialog(void) {
    static void* pDialog;
    static int wId;
    static int iStyle;
    static const char* szCaption;
    static const char* szText;
    static const char* szButton1;
    static const char* szButton2;
    static BOOL bSend;
    __asm {
        // Вытаскиваем все аргументы со стека
        mov eax, [esp + -0x0C]
        mov wId, eax
        mov eax, [esp + -0x08]
        mov iStyle, eax
        mov eax, [esp + 0x04]
        mov szCaption, eax
        mov eax, [esp + 0x08]
        mov szText, eax
        mov eax, [esp + 0x0C]
        mov szButton1, eax
        mov eax, [esp + 0x10]
        mov szButton2, eax
        mov eax, [esp + 0x1C]
        mov bSend, eax
        pushad // Сохраняем все регистры
    }

    dialogHook(pDialog, wId, iStyle, szCaption, szText, szButton1, szButton2, bSend);

    __asm {
        popad // вытаскиваем сохраненные регистры
        // Прыгаем в трамплин для продолжения исполнения. Если не нужно продолжать исполнение - нужно поставить опкод ret
        jmp pOriginalFunction
    }
}
 

RTD

Потужно
Модератор
399
470
Я делаю jmp хук по гайду кинча
Только ставлю прототип и асемблер от диалогов.

Код:
C++:
void dialogHook(void* pDialog, uint16_t wID, uint8_t iStyle, const char* szCaption, const char* szText, const char* szButton1, const char* szButton2, BOOL bSend) {
    AddMessageJumpQ("~r~Hello from blast.hk", 5000, 0, false);
}

void __declspec(naked) HOOK_Raw_Dialog(void) {
    static void* pDialog;
    static int wId;
    static int iStyle;
    static const char* szCaption;
    static const char* szText;
    static const char* szButton1;
    static const char* szButton2;
    static BOOL bSend;
    __asm {
        // Вытаскиваем все аргументы со стека
        mov eax, [esp + -0x0C]
        mov wId, eax
        mov eax, [esp + -0x08]
        mov iStyle, eax
        mov eax, [esp + 0x04]
        mov szCaption, eax
        mov eax, [esp + 0x08]
        mov szText, eax
        mov eax, [esp + 0x0C]
        mov szButton1, eax
        mov eax, [esp + 0x10]
        mov szButton2, eax
        mov eax, [esp + 0x1C]
        mov bSend, eax
        pushad // Сохраняем все регистры
    }

    dialogHook(pDialog, wId, iStyle, szCaption, szText, szButton1, szButton2, bSend);

    __asm {
        popad // вытаскиваем сохраненные регистры
        // Прыгаем в трамплин для продолжения исполнения. Если не нужно продолжать исполнение - нужно поставить опкод ret
        jmp pOriginalFunction
    }
}
msvc компиль?
C++:
void __fastcall dialogHook(void* pDialog, void* fastcallshit, uint16_t wID, uint8_t iStyle, const char* szCaption, const char* szText, const char* szButton1, const char* szButton2, BOOL bSend) {
    AddMessageJumpQ("~r~Hello from blast.hk", 5000, 0, false);
    reinterpret_cast<decltype(dialogHook)*>(pOriginalFunction)(pDialog, fastcallshit, wID, iStyle, "Kek", szText, szButton1, szButton2, bSend); //decltype потому что мне лень писать...
}
 
  • Вау
Реакции: #Northn

Ceonas

Новичок
3
0
Как узнать есть ли игрок в поле видимости по ID(как пример не за стеной ли)
 

мистер вселенная

Известный
22
4
как отключить весь рендер чата в сампе r3?
то есть включая все задействоавнные кнопки (ф6, t, pgdown, pgup)
скроллбар и мышь
 

Вложения

  • 1667674627841.png
    1667674627841.png
    35.8 KB · Просмотры: 47
Последнее редактирование:
  • Эм
Реакции: chapo

dinky

Участник
67
20
не собирается прога, из-за инклудов что делать?
C++:
#include <iostream>
#include <algorithm>

#include <filesystem> //из-за этих инклудов не собирается прога
#include <regex> //из-за этих инклудов не собирается прога


int main()
{
    using namespace std;
    string sda("dadasdasdadafdfgsdf");
    transform(sda.begin(), sda.end(), sda.begin(), toupper);
    cout << sda;
}
1667730718225.png
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,650
2,535
не собирается прога, из-за инклудов что делать?
C++:
#include <iostream>
#include <algorithm>

#include <filesystem> //из-за этих инклудов не собирается прога
#include <regex> //из-за этих инклудов не собирается прога


int main()
{
    using namespace std;
    string sda("dadasdasdadafdfgsdf");
    transform(sda.begin(), sda.end(), sda.begin(), toupper);
    cout << sda;
}
Посмотреть вложение 176453
C++:
transform(sda.cbegin(), sda.cend(), sda.begin(), [](unsigned char c) { return std::toupper(c); });
 
  • Нравится
Реакции: Z3roKwq, dinky и kin4stat

kuzheren

Известный
428
203
Где искать адреса и прототипы функций?
Пример: я хочу хукнуть CVehicle::CreateCar (адрес 0x0043A0B6), но не знаю прототип
Ещё нужно хукнуть функцию спавна любого педа, но я не знаю ни прототип, ни адрес
Как быть?