История изменений
Исправление
wota,
(текущая версия)
:
1) надо выполнить свой код, это делается либо через конструктор статичной переменной, либо через перехват какой-нибудь используемой функции 2) после этого дело техники - сделать все что угодно
Вот пример через перехват функции (пример корявейший - по хорошему надо при первой возможности отвязываться и перехватывать управление через сигналы, но мне было лень):
~$ cat 1.cpp
#include <QtCore/QVariant>
#include <QtGui/QApplication>
#include <QtGui/QLabel>
#include <QtGui/QLayout>
#include <dlfcn.h>
typedef FILE* (*fopen_func)( const char*, const char* );
static fopen_func old_fopen = 0;
FILE* fopen( const char* path, const char* mode )
{
if( !old_fopen )
old_fopen = (fopen_func) dlsym(RTLD_NEXT, "fopen");
for( QWidget* w : QApplication::topLevelWidgets() )
{
if( !w->property( "hacked" ).toBool() )
{
QLayout* l = w->layout();
if( l )
l->addWidget( new QLabel( "<H1>FUCK M$</H1>" ) );
w->setProperty( "hacked", true );
}
}
return old_fopen(path, mode);
}
~$ g++ -std=c++11 -shared -m32 -I/usr/include/qt4 1.cpp -o hook.so
~$ LD_PRELOAD=/home/igor/hook.so skype
результат:
http://i.piccy.info/i9/75e751fffe0cd41c6560d9624a135e42/1394541880/41096/6873...
Исходная версия
wota,
:
1) надо выполнить свой код, это делается либо через конструктор, либо через перехват какой-нибудь используемой функции 2) после этого дело техники - сделать все что угодно
Вот пример через перехват функции (пример корявейший - по хорошему надо при первой возможности отвязываться и перехватывать управление через сигналы, но мне было лень):
~$ cat 1.cpp
#include <QtCore/QVariant>
#include <QtGui/QApplication>
#include <QtGui/QLabel>
#include <QtGui/QLayout>
#include <dlfcn.h>
typedef FILE* (*fopen_func)( const char*, const char* );
static fopen_func old_fopen = 0;
FILE* fopen( const char* path, const char* mode )
{
if( !old_fopen )
old_fopen = (fopen_func) dlsym(RTLD_NEXT, "fopen");
for( QWidget* w : QApplication::topLevelWidgets() )
{
if( !w->property( "hacked" ).toBool() )
{
QLayout* l = w->layout();
if( l )
l->addWidget( new QLabel( "<H1>FUCK M$</H1>" ) );
w->setProperty( "hacked", true );
}
}
return old_fopen(path, mode);
}
~$ g++ -std=c++11 -shared -m32 -I/usr/include/qt4 1.cpp -o hook.so
~$ LD_PRELOAD=/home/igor/hook.so skype
результат:
http://i.piccy.info/i9/75e751fffe0cd41c6560d9624a135e42/1394541880/41096/6873...