cht電腦資訊Linux
adm Find login register

發現 Adobe flash 只用到 gdk-pixbuf, 完全沒用到 gtk

caleb
1 發現 Adobe flash 只用到 gdk-pixbuf, 完全沒用到 gtk
Promote 0 Bookmark 02011-02-12quote  

從 GTK+ 2.90.0 開始我就開始 daily use, 也嘗試 patch 各種 GTK+ 2.x 軟體。(結果最後成功用上 GTK+ 3.0.0 的只有 gcin 和 evilvte)

Adobe flash 只給 binary, 只好用 hex editor 把 linking 硬改成 gtk3, 卻沒想到相容性一直是 100%,所有 flash 都能正常使用。

一開始覺得挺正常的,如果只用 GTK+ 2.x / 3.x 同時都有提供的 api, 是有可能做到。但隨著 GTK+ 3.x 和 2.x 相容性不斷降低,Adobe flash 卻都可以不用重新編譯,就顯得越來越奇怪了。(同時期的其它軟體 *全都* 需要重新編譯)

剛才無意中發現,Adobe flash 其實只有用到 /usr/lib/libgdk_pixbuf-2.0.so.0 的 symble。

libgdk_pixbuf-2.0.so.0 本來長期綁在 GTK+ 2.x 裡,但因為 GTK+ 3.x 也有用到,所以又分出來變成單獨的 tarball,讓 GTK+ 2.x / 3.x 可以依賴。

剛才檢查了 libgcflashplayer.so 10.2.154.12 和 libflashplayer.so 10.2.152.27,都確定只有用到 libgdk_pixbuf-2.0.so.0 的 symble。

(舊版的我沒檢查,但應該也一樣吧。)

實際試驗,用 hex editor 把 libgtk-x11-2.0.so.0 和 libgdk-x11-2.0.so.0 硬改成其它不相干的 lib, Adobe flash 仍能正常使用,玩 flash game 看 youtube flash mode 都毫無問題。(目前我是分別改成 libXss 和 libkeyutils,因為 chromium 本來就有這兩個依賴)

這樣也可以理解為啥 Adobe flash 長期不支援 GTK+ immodule…因為根本就沒在用嘛…

目前的 Adobe flash 不是 GTK+ app, 而且有用到 X11, 所以要移植到 wayland 可能還得費點工夫。

(GTK+ 2.x 沒有 wayland porting, 只有 GTK+ 3.x 有)

edited: 1
eliu
2 發現 Adobe flash 只用到 gdk-pixbuf, 完全沒用到 gtk
Promote 0 Bookmark 02011-02-12quote  

caleb
這樣也可以理解為啥 Adobe flash 長期不支援 GTK+ immodule…因為根本就沒在用嘛…

我在 firefox 是用 google chrome 的 libgcflashplayer.so,感覺是有用 gtk im module,用 grep 的方式看也可以看到一堆 gtk 的 functions

$ strings libgcflashplayer.so  | grep gtk

gtk_image_new_from_pixbuf
gtk_container_get_type
gtk_container_add
gtk_window_new
gtk_drawing_area_new
gtk_frame_new
gtk_frame_get_type
gtk_frame_set_shadow_type
gtk_im_context_get_preedit_string
gtk_widget_create_pango_layout
gtk_im_context_reset
gtk_im_context_focus_in
gtk_im_context_focus_out
gtk_im_context_filter_keypress
gtk_im_context_set_client_window
gtk_im_multicontext_new
gtk_window_get_type

caleb
3 發現 Adobe flash 只用到 gdk-pixbuf, 完全沒用到 gtk
Promote 0 Bookmark 02011-02-12quote  

eliu
我在 firefox 是用 google chrome 的 libgcflashplayer.so,感覺是有用 gtk im module,用 grep 的方式看也可以看到一堆 gtk 的 functions

可能是用 dlopen 之類的?

caleb
4 發現 Adobe flash 只用到 gdk-pixbuf, 完全沒用到 gtk
Promote 0 Bookmark 02011-02-13quote  

~$ ldd libgcflashplayer.so | grep g.k
libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0xb6912000)

在 web browser 的 flash 區域按右鍵也有 menu 出來,menu 看起來是 gtk

caleb
5
Promote 0 Bookmark 02011-02-14quote  

本來想找 Qt-basd web browser 實驗,不過搞半天都沒辦法吃 libgcflashplayer.so

orz

總之用 chromium 完成了測試:

1. 把 libgcflashplayer.so 的相依性改掉,用 ldd 檢查沒 link 到 gtk2

2. 新開任何有 flash 的網頁,檢查 flash 的 pid

3. 把 libgtk-x11-2* 全部改名

4. 用 chromium 的 Task Manager 把 flash 幹掉

5. 檢查 flash 的 pid 確已消失

6. 再新開任何有 flash 的網頁

7. 發現 flash 起不來了(因為 dlopen gtk2 失敗?)

8. 把 libgtk-x11-2* 改回來

9. 再新開任何有 flash 的網頁

10. flash 回來了,確認 pid 和之前不同

11. 用 lsof 確認 flash 有載入 /usr/lib/libgdk-x11-2.0.so* 和 /usr/lib/libgtk-x11-2.0.so*

結論:Adobe flash 還是需要 gtk2 的。 orz

用上面手法把 gtk2 硬換成 gtk3 的結果 -> 錯誤訊息:

/proc/self/exe: symbol lookup error: /proc/self/exe: undefined symbol: gdk_display

cht電腦資訊Linux
adm Find login register
views:13859