數位天堂

Nokia:科技始終來自於人性; 拜耳:如果文明不能使我們更相愛,那科技便失去意義!
歡迎您的加入,讓我們一起討論科技與環保的整合應用...

您尚未登入。

#1 2008-10-29 14:30:42

James
新生
註冊日期: 2008-10-17
文章數: 31
目前積分 :   

ASUS WL-500gP的library是否支援fstat64函式追蹤

寫了一支程式fstat64.c來測試系統是否支援fstat64函式

#include #include #include int main(void) { struct stat buf; fstat64 ("/tmp", &buf); return 0; }


利用Cross-Comoiler編譯:

  # mipsel-linuc-gcc -o fstat64 fstat64.c

查看它需要什麼shared library

  # mipsel-linux-objdump -p fstat64

fstat64: file format elf32-tradlittlemips Program Header: PHDR off 0x00000034 vaddr 0x00400034 paddr 0x00400034 align 2**2 filesz 0x000000c0 memsz 0x000000c0 flags r-x INTERP off 0x000000f4 vaddr 0x004000f4 paddr 0x004000f4 align 2**0 filesz 0x00000014 memsz 0x00000014 flags r-- 0x70000000 off 0x00000108 vaddr 0x00400108 paddr 0x00400108 align 2**2 filesz 0x00000018 memsz 0x00000018 flags r-- LOAD off 0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2**12 filesz 0x000008f4 memsz 0x000008f4 flags r-x LOAD off 0x00001000 vaddr 0x10000000 paddr 0x10000000 align 2**12 filesz 0x0000009c memsz 0x000000c0 flags rw- DYNAMIC off 0x00000120 vaddr 0x00400120 paddr 0x00400120 align 2**2 filesz 0x000003e0 memsz 0x000003e0 flags rwx Dynamic Section: NEEDED libgcc_s.so.1 NEEDED libc.so.0 INIT 0x40054c FINI 0x400870 HASH 0x400218 STRTAB 0x400408 SYMTAB 0x4002b8 STRSZ 0xf8 SYMENT 0x10 0x70000016 0x10000050 DEBUG 0x0 PLTGOT 0x10000060 REL 0x0 RELSZ 0x0 RELENT 0x8 0x70000001 0x1 0x70000005 0x2 0x70000006 0x400000 0x7000000a 0x7 0x70000011 0x15 0x70000012 0x1a 0x70000013 0xd VERNEED 0x40052c VERNEEDNUM 0x1 VERSYM 0x400500 Version References: required from libgcc_s.so.1: 0x0b792650 0x00 02 GCC_3.0 private flags = 50001007: [abi=O32] [mips32] [not 32bitmode]


得知它需要:

  NEEDED      libgcc_s.so.1
  NEEDED      libc.so.0

並且查看它實際上呼叫是什麼函式:

  # mipsel-linux-objdump -T fstat64
  fstat64:     file format elf32-tradlittlemips

  DYNAMIC SYMBOL TABLE:
  10000020 g    D  .data  00000000  Base        _fdata
  10008050 g    d  *ABS*  00000000              _gp_disp
  00000001 g    d  *ABS*  00000000  Base        _DYNAMIC_LINKING
  00400120 g    DO *ABS*  00000000  Base        _DYNAMIC
  10008050 g    D  *ABS*  00000000  Base        _gp
  004005e0 g    D  .text  00000000  Base        _ftext
  10000050 g    DO .rld_map       00000000  Base        __RLD_MAP
  1000009c g    D  *ABS*  00000000  Base        __bss_start
  1000009c g    D  *ABS*  00000000  Base        _edata
  10000060 g    DO *ABS*  00000000  Base        _GLOBAL_OFFSET_TABLE_
  100000c0 g    D  *ABS*  00000000  Base        _end
  1000009c g    D  *ABS*  00000000  Base        _fbss
  00000000  w   D  *UND*  00000000              _Jv_RegisterClasses
  00000000  w   DF *UND*  0000001c  GCC_3.0     __register_frame_info
  00400870 g    DF .fini  0000001c  Base        _fini
  00400770 g    DF .text  00000064  Base        main
  00400850      DF *UND*  00000244              __uClibc_main
  00000000  w   DF *UND*  0000001c  GCC_3.0     __deregister_frame_info
  0040054c g    DF .init  0000001c  Base        _init
  00400840      DF *UND*  00000094              fstat64

telnet到ASUS WL-500gP的平台上,到/jffs/opt/lib的目錄中下,查看

  /jffs/opt/lib # ls -al libc.so.0
  lrwxrwxrwx    1 root     root           19 Oct 23 08:55 libc.so.0 -> libuClibc-0.9.28.so

於是將libuClibc-0.9.28.so,利用ftp的方式將它上傳到Host Platform。

  # mipsel-linux-objdump -D libuClibc-0.9.28.so > dump
  # vim dump

確實查得到fstat64函式的section:

00052090 : 52090: 3c1c0006 lui gp,0x6 52094: 279c4710 addiu gp,gp,18192 52098: 0399e021 addu gp,gp,t9 5209c: 27bdff70 addiu sp,sp,-144 520a0: afbf0088 sw ra,136(sp) 520a4: afb10084 sw s1,132(sp) 520a8: afb00080 sw s0,128(sp) 520ac: afbc0010 sw gp,16(sp) 520b0: 27a60018 addiu a2,sp,24 520b4: 00a08821 move s1,a1 520b8: 00c02821 move a1,a2 520bc: 24021077 li v0,4215 520c0: 0000000c syscall 520c4: 8f9981f8 lw t9,-32264(gp) 520c8: 10e00007 beqz a3,520e8 520cc: 00408021 move s0,v0 520d0: 0320f809 jalr t9 520d4: 00000000 nop 520d8: 8fbc0010 lw gp,16(sp) 520dc: 2403ffff li v1,-1 520e0: 1000000a b 5210c 520e4: ac500000 sw s0,0(v0) 520e8: 8f998558 lw t9,-31400(gp) 520ec: 00401821 move v1,v0 520f0: 00c02021 move a0,a2 520f4: 14400005 bnez v0,5210c 520f8: 02202821 move a1,s1 520fc: 0320f809 jalr t9 52100: 00000000 nop 52104: 8fbc0010 lw gp,16(sp) 52108: 00001821 move v1,zero 5210c: 8fbf0088 lw ra,136(sp) 52110: 8fb10084 lw s1,132(sp) 52114: 8fb00080 lw s0,128(sp) 52118: 00601021 move v0,v1 5211c: 03e00008 jr ra 52120: 27bd0090 addiu sp,sp,144 ...


將fstat64放到ASUS WL-500gP上去執行,執行前先設置環境

mount -o bind /jffs/opt /opt export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/jffs/sbin:/jffs/bin:/jffs/usr/sbin:/jffs/usr/bin:/jffs/opt/bin export LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/opt/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib


執行:
  ~ # ./fstat64
  ./fstat64: can't resolve symbol 'fstat64'

實在為清楚為什麼,在library查得到fstat64的symbol及section,但卻會產生can't resolve symbol的問題。orz
還是在trace的過程有什麼沒注意的。




離線

 

#2 2008-10-29 16:22:47

James
新生
註冊日期: 2008-10-17
文章數: 31
目前積分 :   

Re: ASUS WL-500gP的library是否支援fstat64函式追蹤

我知道了~
我在設定LD_LIBRARY_PATH中:

  export LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/opt/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib

在/lib的目錄中有libc.so.0,在執行fstat64程式時,會先到/lib搜尋,恰好有《libc.so.0》,但我猜測這個程式庫沒有fstat64(之所以用猜測的,因為我用objdump印不出來任何的symbol),所以就會告知找不到fstat64 symbol。我重新調換一下:

  export LD_LIBRARY_PATH=/jffs/opt/lib:/lib:/usr/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib

問題解決了!



離線

 

#3 2008-10-29 16:47:01

James
新生
註冊日期: 2008-10-17
文章數: 31
目前積分 :   

Re: ASUS WL-500gP的library是否支援fstat64函式追蹤

調換了LD_LIBRARY_PATH之後,
執行wget會發生Segmentation fault,怪怪~orz 一冷一熱
 ~ # wget http://xxx.yyy.zzz/filename
 Connecting to xxx.yyy.zzz[xxx.yyy.zzz]:80
 Segmentation fault

這該怎麼trace呢?crybaby


離線

 

#4 2008-10-29 23:07:41

hippo
天使
註冊日期: 2008-10-07
文章數: 1562
目前積分 :   20 

Re: ASUS WL-500gP的library是否支援fstat64函式追蹤

請善用shell.


離線

 

#5 2008-10-30 08:49:42

James
新生
註冊日期: 2008-10-17
文章數: 31
目前積分 :   

Re: ASUS WL-500gP的library是否支援fstat64函式追蹤

hippo大大~
我不太了解善用shell,是指我使用的方式不對呢?
還是善用shell來追綜Segmentation fault的問題,如果是這樣,可以指點一下方向嗎?grin



離線

 

#6 2008-10-30 14:01:54

hippo
天使
註冊日期: 2008-10-07
文章數: 1562
目前積分 :   20 

Re: ASUS WL-500gP的library是否支援fstat64函式追蹤

請參考這裡
在console模式下, sh, 建立shell測試或建立script測試.


離線

 

#7 2008-10-30 14:08:53

James
新生
註冊日期: 2008-10-17
文章數: 31
目前積分 :   

Re: ASUS WL-500gP的library是否支援fstat64函式追蹤

hippo大大~
這一次我真得不能了解你說的方向... 能在給予一些指點嗎?
wacko


離線

 

#8 2008-10-30 14:41:37

hippo
天使
註冊日期: 2008-10-07
文章數: 1562
目前積分 :   20 

Re: ASUS WL-500gP的library是否支援fstat64函式追蹤

DD-WRT v24 std (c) 2008 NewMedia-NET GmbH Release: 10/22/08 (SVN revision: 10564) WL-500gx login: root Password: ========================================================== ____ ___ __ ______ _____ ____ _ _ | _ \| _ \ \ \ / / _ \_ _| __ _|___ \| || | || | || ||____\ \ /\ / /| |_) || | \ \ / / __) | || |_ ||_| ||_||_____\ V V / | _ < | | \ V / / __/|__ _| |___/|___/ \_/\_/ |_| \_\|_| \_/ |_____| |_| DD-WRT v24 http://www.dd-wrt.com ========================================================== BusyBox v1.12.1 (2008-10-22 15:25:40 CEST) built-in shell (ash) Enter 'help' for a list of built-in commands. root@WL-500gx:~# sh BusyBox v1.12.1 (2008-10-22 15:25:40 CEST) built-in shell (ash) Enter 'help' for a list of built-in commands. root@WL-500gx:~#


現在可以胡搞了.

DD-WRT v24 std (c) 2008 NewMedia-NET GmbH Release: 10/22/08 (SVN revision: 10564) WL-500gx login: root Password: ========================================================== ____ ___ __ ______ _____ ____ _ _ | _ \| _ \ \ \ / / _ \_ _| __ _|___ \| || | || | || ||____\ \ /\ / /| |_) || | \ \ / / __) | || |_ ||_| ||_||_____\ V V / | _ < | | \ V / / __/|__ _| |___/|___/ \_/\_/ |_| \_\|_| \_/ |_____| |_| DD-WRT v24 http://www.dd-wrt.com ========================================================== BusyBox v1.12.1 (2008-10-22 15:25:40 CEST) built-in shell (ash) Enter 'help' for a list of built-in commands. root@WL-500gx:~# cat > /tmp/test.sh #!/bin/sh ls -al root@WL-500gx:~# chmod +x /tmp/test.sh root@WL-500gx:~# /tmp/test.sh drwxr-xr-x 16 root root 153 Oct 22 13:28 . drwxr-xr-x 16 root root 153 Oct 22 13:28 .. drwxr-xr-x 2 root root 498 Oct 22 13:28 bin drwxr-xr-x 1 root root 0 Jan 1 1970 dev drwxr-xr-x 5 root root 380 Oct 22 13:28 etc drwxr-xr-x 7 root root 1024 Oct 15 23:03 jffs drwxr-xr-x 3 root root 242 Oct 22 13:28 lib drwxr-xr-x 2 root root 3 Oct 22 13:28 mmc drwxr-xr-x 2 root root 3 Oct 22 13:28 mnt drwxr-xr-x 19 root root 4096 Oct 29 05:29 opt dr-xr-xr-x 49 root root 0 Jan 1 2000 proc drwxr-xr-x 2 root root 973 Oct 22 13:28 sbin drwxr-xr-x 2 root root 3 Oct 22 13:28 sys drwxrwxrwx 1 root root 0 Jan 1 2000 tmp drwxr-xr-x 7 root root 76 Oct 22 13:28 usr lrwxrwxrwx 1 root root 7 Oct 22 13:28 var -> tmp/var drwxr-xr-x 7 root root 112 Oct 22 13:28 www root@WL-500gx:~#


這是簡單的script, 提供您觀念上的參考.


離線

 

#9 2008-10-30 15:07:30

James
新生
註冊日期: 2008-10-17
文章數: 31
目前積分 :   

Re: ASUS WL-500gP的library是否支援fstat64函式追蹤

哈哈~ 這個sh不錯用的樣子。
但我比較想了解為什麼

  export LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/opt/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib

改成這一行

  export LD_LIBRARY_PATH=/jffs/opt/lib:/lib:/usr/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib

執行wget會發生Segmentation fault說!big_smile


離線

 

#10 2008-10-30 15:58:35

hippo
天使
註冊日期: 2008-10-07
文章數: 1562
目前積分 :   20 

Re: ASUS WL-500gP的library是否支援fstat64函式追蹤

DD-WRT v24 std (c) 2008 NewMedia-NET GmbH Release: 10/22/08 (SVN revision: 10564) WL-500gx login: root Password: ========================================================== ____ ___ __ ______ _____ ____ _ _ | _ \| _ \ \ \ / / _ \_ _| __ _|___ \| || | || | || ||____\ \ /\ / /| |_) || | \ \ / / __) | || |_ ||_| ||_||_____\ V V / | _ < | | \ V / / __/|__ _| |___/|___/ \_/\_/ |_| \_\|_| \_/ |_____| |_| DD-WRT v24 http://www.dd-wrt.com ========================================================== BusyBox v1.12.1 (2008-10-22 15:25:40 CEST) built-in shell (ash) Enter 'help' for a list of built-in commands. root@WL-500gx:~# echo $LD_LIBRARY_PATH /lib:/usr/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib root@WL-500gx:~# cd /tmp root@WL-500gx:/tmp# wget http://downloads.openwrt.org/whiterussian/packages/ipkg_0.99.149-2_mipsel.ipk Connecting to downloads.openwrt.org (195.56.146.238:80) root@WL-500gx:/tmp# rm ipkg_0.99.149-2_mipsel.ipk root@WL-500gx:/tmp# export LD_LIBRARY_PATH=/opt/lib:/jffs/opt/lib:/lib:/usr/lib:/jffs/lib:/jffs/usr/lib:/jffs/ usr/local/lib root@WL-500gx:/tmp# wget http://downloads.openwrt.org/whiterussian/packages/ipkg_0.99.149-2_mipsel.ipk Connecting to downloads.openwrt.org (195.56.146.238:80) Segmentation fault root@WL-500gx:/tmp# cat > test.sh #!/bin/sh export LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib $1 $2 root@WL-500gx:/tmp# chmod +x test.sh root@WL-500gx:/tmp# ./test.sh wget http://downloads.openwrt.org/whiterussian/packages/ipkg_0.99.149-2_mipsel.i pk Connecting to downloads.openwrt.org (195.56.146.238:80) root@WL-500gx:/tmp# ls -al drwxrwxrwx 1 root root 0 Jan 1 2000 . drwxr-xr-x 16 root root 153 Oct 22 13:28 .. -rw------- 1 root root 1925 Oct 30 13:36 .ipt -rwx------ 1 root root 99 Oct 30 13:36 .rc_firewall -rwx------ 1 root root 34 Jan 1 1970 .rc_startup -rw-r--r-- 1 root root 20 Oct 30 13:36 .rule -rw------- 1 root root 9 Oct 30 13:36 .wanuptime drwx------ 1 root root 0 Jan 1 1970 cron.d -rw-r--r-- 1 root root 0 Jan 1 1970 crontab drwx------ 1 root root 0 Jan 1 1970 ddns -rw-r--r-- 1 root root 211 Jan 1 1970 dnsmasq.conf -rw-r--r-- 1 root root 63 Oct 30 13:38 dnsmasq.leases drwx------ 1 root root 0 Jan 1 1970 etc -rw-r--r-- 1 root root 41 Jan 1 1970 hosts -rw------- 1 root root 205 Oct 30 13:36 igmpproxy.conf -rw-r--r-- 1 root root 62784 Oct 30 15:57 ipkg_0.99.149-2_mipsel.ipk -rw-r--r-- 1 root root 82 Jan 1 1970 loginprompt srwxr-xr-x 1 root root 0 Jan 1 1970 php-fcgi.sock-0 drwxr-xr-x 1 root root 0 Jan 1 1970 ppp -rw-r--r-- 1 root root 23 Jan 1 1970 resolv.conf -rw-r--r-- 1 root root 75 Jan 1 1970 resolv.dnsmasq drwx------ 1 root root 0 Jan 1 1970 root -rwxr-xr-x 1 root root 97 Oct 30 15:55 test.sh drwxr-xr-x 1 root root 0 Jan 1 2000 var drwxr-xr-x 1 root root 0 Jan 1 1970 vsftpd drwxr-xr-x 1 root root 0 Jan 1 2000 www


若無法理解, 請參閱鳥哥, Study Area相關資料


離線

 

相關討論主題

主題 回覆 點閱 最後發表
0 2438 2022-08-26 12:56:28 作者 lcjh20516
ASUS RT-N66U 清除 NVRAM 兩種方式 作者 sai5555  [ 1 2 3 … 16 ]
159 388683 2022-08-14 06:06:27 作者 lcjh20516
Asus RT-N66U 刷機卡關 作者 mizuiro  [ 1 2 3 ]
21 84256 2022-08-14 05:54:54 作者 lcjh20516
置頂
置頂: ASUS 無線路由器非官方韌體 Asuswrt-Merlin 作者 Aven  [ 1 2 3 … 14 ]
132 377307 2022-06-07 10:13:50 作者 dennys
ASUS RT-N16 解磚分享 (TTL) 作者 a00403a  [ 1 2 3 … 5 ]
45 141500 2022-05-06 14:32:17 作者 max7441

友情連結

論壇頁尾

Powered by PunBB
© Copyright 2018 Rickard Andersson
RSS Feed