Вопрос Сигнатура SwapChain

Вот объясни мне, дураку. Че не так?
void c_directx::initialize() {
uint8_t* ptr = g_opcodes->scan_relative(g_modules->m_modules.rendersystem_dll.get_name(), "48 89 2D ? ? ? ? 48 C7 05", 3, 7);

if (!ptr)
return;

uint8_t* next_ptr = *reinterpret_cast<uint8_t**>(ptr);
if (!next_ptr)
return;

m_swap_chain = *reinterpret_cast<IDXGISwapChain**>(next_ptr + 0x170); <- ошибка
if (!m_swap_chain)
return;

m_present_address = vmt::get_v_method(m_swap_chain, 8);
}
Посмотреть вложение 315243
Посмотреть вложение 315244
Че ему еще нужно
uint8_t* next_ptr = **reinterpret_cast<uint8_t***>(ptr);
 
попробуй вместо scan_relative использовать scan_absolute
Попробовал, туда же выбило. Я хз в чем может быть еще проблема. Если я фикшу - uint8_t* next_ptr = *reinterpret_cast<uint8_t**>(ptr);, то потом выбивает на 0x170 смещение. Чат гпт подумал что там ошибка в 0x170 и написал залупу на автоскан смещения. Кое-как его нашел и смог DX инициализировать, но если юзать Present функции, то выбивает в мусор
 
Последнее редактирование:
Попробовал, туда же выбило. Я хз в чем может быть еще проблема. Если я фикшу - uint8_t* next_ptr = *reinterpret_cast<uint8_t**>(ptr);, то потом выбивает на 0x170 смещение. Чат гпт подумал что там ошибка в 0x170 и написал залупу на автоскан смещения. Кое-как его нашел и смог DX инициализировать, но если юзать Present функции, то выбивает в мусор
ради тебя в дарксайде обновил

C++:
Expand Collapse Copy
void c_directx::initialize( ) {
    uint8_t* ptr = g_opcodes->scan_absolute( g_modules->m_modules.rendersystem_dll.get_name( ), xorstr_("48 89 2D ? ? ? ? 48 C7 05"), 0x3);

    if ( !ptr )
        return;

    uint8_t* next_ptr = **reinterpret_cast<uint8_t***>( ptr );

    if ( !next_ptr )
        return;

    m_swap_chain = *reinterpret_cast<IDXGISwapChain**>( next_ptr + 0x170 );

    if ( !m_swap_chain )
        return;

    m_present_address = vmt::get_v_method( m_swap_chain, 8 );

}

для меня работает идеально
 
ради тебя в дарксайде обновил

C++:
Expand Collapse Copy
void c_directx::initialize( ) {
    uint8_t* ptr = g_opcodes->scan_absolute( g_modules->m_modules.rendersystem_dll.get_name( ), xorstr_("48 89 2D ? ? ? ? 48 C7 05"), 0x3);

    if ( !ptr )
        return;

    uint8_t* next_ptr = **reinterpret_cast<uint8_t***>( ptr );

    if ( !next_ptr )
        return;

    m_swap_chain = *reinterpret_cast<IDXGISwapChain**>( next_ptr + 0x170 );

    if ( !m_swap_chain )
        return;

    m_present_address = vmt::get_v_method( m_swap_chain, 8 );

}

для меня работает идеально
ты уверен что оффсет такой?
 
ради тебя в дарксайде обновил

C++:
Expand Collapse Copy
void c_directx::initialize( ) {
    uint8_t* ptr = g_opcodes->scan_absolute( g_modules->m_modules.rendersystem_dll.get_name( ), xorstr_("48 89 2D ? ? ? ? 48 C7 05"), 0x3);

    if ( !ptr )
        return;

    uint8_t* next_ptr = **reinterpret_cast<uint8_t***>( ptr );

    if ( !next_ptr )
        return;

    m_swap_chain = *reinterpret_cast<IDXGISwapChain**>( next_ptr + 0x170 );

    if ( !m_swap_chain )
        return;

    m_present_address = vmt::get_v_method( m_swap_chain, 8 );

}

для меня работает идеально
Спасибо!
Теперь крашит на client.dll. Куда-то в пустоту
 
пожалуйста помогите пофиксить Device и DeviceContext


C++:
Expand Collapse Copy
    uint8_t* relativeAddress = MEM::ResolveRelativeAddress(MEM::FindPattern(RENDERSYSTEM_DLL, CS_XOR("48 8D 15 ? ? ? ? 0F 28 44 24")), 0x3, 0x7);
    ISwapChainDx11* SwapChain = relativeAddress ? *reinterpret_cast<ISwapChainDx11**>(relativeAddress) : nullptr;
    
    //bSuccess &= (SwapChain != nullptr);
    L_PRINT(LOG_INFO) << CS_XOR("SwapChain Success Loaded!\"");
    
    if (SwapChain != nullptr)
    {
        if (FAILED(SwapChain->pDXGISwapChain->GetDevice(__uuidof(ID3D11Device), (void**)&Device)))
        {
            L_PRINT(LOG_ERROR) << CS_XOR("failed to get device from swapchain");
            CS_ASSERT(false);
            return false;
        }
        else
            // we successfully got device, so we can get immediate context
            Device->GetImmediateContext(&DeviceContext);
    }
    bSuccess &= (Device != nullptr && DeviceContext != nullptr);
 
Назад
Сверху Снизу