Отслежка используемых программой шрифтов в Х-ах. (X font sniffer)
Ключевые слова: X, font, sniffer, (найти похожие документы)
Date: Mon, 26 Aug 2002 02:24:29 +0600
From: Victor Wagner <vitus@45.free.net>
Newsgroups: fido7.ru.linux
Subject: Отслежка используемых программой шрифтов в Х-ах.
OL> Может можно каким-то cнифеpом пpоcмотpеть какие пpогpамма шpифты
OL> запpашивает y cеpвеpа. Поcоветyйте готовyю технологию, а то вpемени pазбиpать
OL> Х-пpотокол cовcем нет.
Это гораздо проще сделать не снифером протокола, а перехватом вызовов
xlib.
=cut xfontdump.c
#include <dlfcn.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <unistd.h>
#include <string.h>
/*
Devoted to Cyril Slobin for his excellent works in area
of Russification
Copyright (C) 2002 by V. Wagner
*/
void report(const char *function, const char *name);
XFontStruct *(*RealLoadQueryFont) (Display *display, const char* name);
Font (*RealLoadFont) (Display *display, const char *name);
Display* XOpenDisplay( const char* display_name) {
void * handle=dlopen("libX11.so.6", RTLD_NOW | RTLD_GLOBAL);
void *(*RealOpenDisplay)(const char*);
if (!handle) exit(127);
RealOpenDisplay=dlsym(handle, "XOpenDisplay");
RealLoadQueryFont=dlsym(handle, "XLoadQueryFont");
RealLoadFont=dlsym(handle,"XLoadFont");
return (*RealOpenDisplay)(display_name);
}
XFontStruct *XLoadQueryFont (Display *display, _Xconst char* name) {
report("XLoadQueryFont",name);
return (*RealLoadQueryFont) (display, name);
}
Font XLoadFont (Display *display, _Xconst char *name) {
report("XLoadFont",name);
return (*RealLoadFont) (display, name);
}
void report (const char *function,const char *name) {
char buffer[1024];
strcpy(buffer,function);
strcat(buffer,": ");
strcat(buffer,name);
strcat(buffer,"\n");
write(2,buffer,strlen(buffer));
}
=cut
Собирается командой gcc -o xfontdump.so -shared -fPIC xfontdump.c
Далее исследуемая программа вызывается посредством
LD_PRELOAD=xfontdump.so program