cht電腦資訊gcin
adm Find login register

[狂賀] 用 LD_PRELOAD 解決小灰問題!

caleb
1 [狂賀] 用 LD_PRELOAD 解決小灰問題!
Promote 2 Bookmark 22009-02-28quote  

完全不需要 rebuild GTK+ 的解法。

1. 下載 thaw.tar.gz

2. 進到目錄後,執行 make

3. 在使用 gcin 前,或測試小灰的 testcase 前執行

export LD_PRELOAD=/PATH/TO/YOUR/thaw/thaw.so

4. 執行 gcin 或測試小灰的 testcase

應該是沒大問題了,使用 thaw.so 之後,所有必灰技都無法製造出小灰。

剩下的「不同 distro 間」可能出現的相容性問題之類的 (目前是寫死 libgdk-x11-2.0.so.0),

需要其它高手出馬了。

code 是在網路上到處 copy and paste 來的,有啥疑問不要問我…

因為 code 過短,顯然沒資格擁有 copyright,應該算 public domain 吧。

此程式適用所有 GTK+ 及 gcin 版本,各大 distro 只要預設連結 libgdk-x11-2.0.so.0 的應該都可用。

Update: 已更新成最簡版本的 3 行 thaw.c

edited: 4
winlin
2
Promote 0 Bookmark 02009-02-28quote  

真是太猛了!
經過小弟試驗,的確小灰不再...,
不知道原理是什麼?(看不懂程式碼...)

在gtk團隊正式處理掉這個bug之前,
eliu兄有考慮暫時把它納入到gcin裡嗎?(gtk處理掉這個bug之後再拿掉)

感謝~

eliu
3
Promote 1 Bookmark 02009-02-28quote  

用 LD_PRELOAD 把那兩個 function 變成空的。看起來 wrap_init 那個 function 是不需要的。.so 的 init 可以看這一篇

那變成還要用 script 把 gcin 包起來。

edited: 2
eliu
5
Promote 2 Bookmark 12009-02-28quote  

弄了 1.4.5.pre2,改成用直接 link .so 的方式,這樣也不用弄 script 來設定 LD_PRELOAD 了。試試看有沒有問題。

本人已不在此站活動
6
Promote 0 Bookmark 02009-02-28quote  

eliu
弄了 1.4.5.pre2,改成用直接 link .so 的方式,這樣也不用弄 script 來設定 LD_PRELOAD 了。試試看有沒有問題。

很棒。我還在想說能不能弄進 gcin 裡頭說。

因為一直以為弄進 gcin 的話會慢 gtk 一步。

winlin
7
Promote 0 Bookmark 02009-03-02quote  

caleb兄:
我的朋友使用64位元的系統(intel CPU)
在export LD_PRELOAD=$HOME/.gcin/libfreezethaw.so之後出現下列訊息:

 ERROR: ld.so: object '/home/user/.gcin/libfreezethaw.so;' from LD_PRELOAD cannot be preloaded: ignored.

請問有解否?感謝~

註:
$file libfreezethaw.so
libfreezethaw.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

eliu
8
Promote 0 Bookmark 02009-03-02quote  
caleb
10
Promote 0 Bookmark 02009-03-02quote  
我用 64bit kernel + 64bit userland 測試 libfreezethaw.tar.gz + gcin 完全正常。
winlin
11
Promote 0 Bookmark 02009-03-02quote  

caleb
我用 64bit kernel + 64bit userland 測試 libfreezethaw.tar.gz + gcin 完全正常。

我那位朋友是用archlinux,不知道和這個有沒有關係?

winlin
12
Promote 0 Bookmark 02009-03-03quote  

eliu
會不會是 gcin 是 32-bit 的?

剛剛問了一下,是64bit的gcin,
不過奇怪的是,後來那位朋友解決了~
據說是把那段export從~/.profile換到~/.bashrc就OK了(真是奇怪...)
感謝~

edited: 1
eliu
13
Promote 0 Bookmark 02009-06-29quote  

gtk win32 沒辦法用 preload or override 的方式,Windows gtab 時輸入幾個字 window 就死了。

看有沒有人要幫忙 build 沒有 bug 的 gtk win32,把底下的 function 變空的

void gdk_window_freeze_toplevel_updates_libgtk_only(GdkWindow *window){}
void gdk_window_thaw_toplevel_updates_libgtk_only(GdkWindow *window){}
edited: 3
guest
14
Promote 1 Bookmark 02009-06-29quote  

Windows其實也可以dll hijack

http://www.codeproject.com/KB/DLL/apihijack.aspx

這應該也是

http://www.codeproject.com/KB/DLL/hooks.aspx

cht電腦資訊gcin
adm Find login register
views:40044