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

Byte

Участник
92
15
Посмотреть вложение 267454

Есть какая либо реализация вывода координат в углу экрана как на скрине?
SFML Используй


C++:
#include <SFML/Graphics.hpp>
#include <iomanip>
#include <sstream>

std::string formatCoordinates(float x, float y, float z) {
    std::ostringstream oss;
    oss << std::fixed << std::setprecision(6);
    oss << "X: " << x << ", Y: " << y << ", Z: " << z;
    return oss.str();
}

int main() {
    sf::RenderWindow window(sf::VideoMode(800, 600), "Coordinates Display");
    sf::Font font;
    font.loadFromFile("arial.ttf");

    sf::Text coordinatesText;
    coordinatesText.setFont(font);
    coordinatesText.setCharacterSize(24);
    coordinatesText.setFillColor(sf::Color::White);
    coordinatesText.setPosition(600, 550);

    float x = 761.897775f, y = 1526.382080f, z = 12.000000f; // тут передавай свои значения

    while (window.isOpen()) {
        sf::Event event;
        while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        coordinatesText.setString(formatCoordinates(x, y, z));

        window.clear(sf::Color::Black);
        window.draw(coordinatesText);
        window.display();
    }

    return 0;
}
 

whyega52

Eblang головного мозга
Модератор
2,842
2,784
Кто-нибудь ставил нейкид хуки на линухе х86? Посоветуйте пожалуйста библиотеку, чтобы можно было вытаскивать регистры (можно даже не через саму либу, а через инлайн асм в нейкид функах)
 

Byte

Участник
92
15
Кто-нибудь ставил нейкид хуки на линухе х86? Посоветуйте пожалуйста библиотеку, чтобы можно было вытаскивать регистры (можно даже не через саму либу, а через инлайн асм в нейкид функах)
 
  • Нравится
Реакции: whyega52

whyega52

Eblang головного мозга
Модератор
2,842
2,784
А не подскажешь, как правильно изменить значение в eax (результат вызова функи) так, чтобы асм листинг не ломался (трамплинчик вроде называется)
1744654334791.png
 
Последнее редактирование:

Byte

Участник
92
15
А не подскажешь, как правильно изменить значение в eax (результат вызова функи) так, чтобы асм листинг не ломался (трамплинчик вроде называется)
Посмотреть вложение 267822
C++:
#include <subhook.h>

subhook_t original_function_hook;
typedef int (*original_func_t)(/* параметры */);

int my_hook_function(/* параметры */) {
    // Получаем трамплин и вызываем оригинальную функцию
    int result = ((original_func_t)subhook_get_trampoline(original_function_hook))(/* параметры */);
    
    // Модифицируем результат (значение в eax)
    result = /* твоя модификация например result * 2 */;
    
    return result;
}

void setup_hook() {
    original_function_hook = subhook_new((void*)original_function, (void*)my_hook_function);
    subhook_install(original_function_hook);
}
 

whyega52

Eblang головного мозга
Модератор
2,842
2,784
C++:
#include <subhook.h>

subhook_t original_function_hook;
typedef int (*original_func_t)(/* параметры */);

int my_hook_function(/* параметры */) {
    // Получаем трамплин и вызываем оригинальную функцию
    int result = ((original_func_t)subhook_get_trampoline(original_function_hook))(/* параметры */);
   
    // Модифицируем результат (значение в eax)
    result = /* твоя модификация например result * 2 */;
   
    return result;
}

void setup_hook() {
    original_function_hook = subhook_new((void*)original_function, (void*)my_hook_function);
    subhook_install(original_function_hook);
}
Если ставить хук на call, то оно крашит, ибо там 6 байт, я так понимаю, на инструкцию, а хукер меняет только 5, а если ставить позже, оно разве не должно работать с нейкид функой?
 

Byte

Участник
92
15
Если ставить хук на call, то оно крашит, ибо там 6 байт, я так понимаю, на инструкцию, а хукер меняет только 5, а если ставить позже, оно разве не должно работать с нейкид функой?
а если хукнуть не сам call, а начало функции, на которую он указывает?
 

whyega52

Eblang головного мозга
Модератор
2,842
2,784
а если хукнуть не сам call, а начало функции, на которую он указывает?
А мне надо хукать функцию только в одном месте вызова (она вызывается и в других участках кода, но нужен именно этот)
 

moreveal

Известный
Проверенный
930
624
А мне надо хукать функцию только в одном месте вызова (она вызывается и в других участках кода, но нужен именно этот)
хукни всю, и глянь адрес в конце стека, чтобы она соответствовала возврату на некст инструкцию после нужного тебе места хахахах, ну просто в сабхуке видимо иначе не сделать, если не дает размер указать

еще конкретно в твоем случае это vtable вроде, ничо не мешает прочесть поинтер что там лежал (в ECX+E8), взяв это за адрес оригинальной функи, и записать туда самого себя

можно кнш еще хук на байт позже ставить, но трамплин придется ручками чинить, что не круто
 
Последнее редактирование: