2011-12-23 17 views
2

ltraceをワードプロセッサで実行し、サンプルファイルを開いたのに驚くことに2回の呼び出ししかありませんでした。ltraceは2回の呼び出しだけを出力します

__libc_start_main(0x8048820, 1, 0xbfe08844, 0x8048850, 0x80488b0 <unfinished ...> 
_ZN10AP_UnixApp4mainEPKciPPc(0x8048910, 1, 0xbfe08844, 0xb61feff4, 0x8048850) = 0 
+++ exited (status 0) +++ 

すべてのライブラリ呼び出しを出力する必要はありませんか?

答えて

2

ltraceは、メイン実行可能ファイル(ここではabiword)から他の共有ライブラリへの呼び出しをインターセプトしますが、共有ライブラリから別の共有ライブラリへの呼び出しを傍受しません。 abiwordについては

main機能実際にはあまりしません。

(gdb) disas main 
Dump of assembler code for function main: 
    0x0000000000400a70 <+0>: mov %rsi,%rdx 
    0x0000000000400a73 <+3>: mov %edi,%esi 
    0x0000000000400a75 <+5>: mov $0x400b6c,%edi 
    0x0000000000400a7a <+10>: jmpq 0x400950 <[email protected]> 
End of assembler dump. 

あなたが見ることができるように、それは単にreturn AP_UnixApp::main(argc, "abiword", argv);を行い、すべての実際の活動は、私の中で(AP_UnixApp::mainを実装したライブラリで起こりますケース、/usr/lib/libabiword-2.8.so)。

Fedoraシステムでは、代わりにfryskを試してみることができます。特に、この:

528.528 attached /usr/bin/abiword 
528.528 call #libpthread.so.0#_init(0x1, 0x7fffa8ba5bd8, 0x7fffa8ba5be8, 0x7fffa8ba5be8, 0x1f25bc2, 0x7) 
528.528 call #libpthread.so.0#__pthread_initialize_minimal(0x1, 0x7fffa8ba5bd8, 0x7fffa8ba5be8, 0x7fffa8ba5be8, 0x1f25bc2, 0x7) 
528.528 call #libpthread.so.0#__libc_sigaction(0x20, 0x7fffa8ba5a70, 0x0, 0x0, 0x1f25bc2, 0x7) 
528.528 call #libpthread.so.0#__libc_sigaction(0x21, 0x7fffa8ba5a70, 0x0, 0x7f32501f27b0, 0x0, 0x7) 
528.528 call #libc.so.6#getrlimit(0x3, 0x7fffa8ba5b10, 0x3f, 0x40, 0x0, 0x7) = 0 
528.528 call #libc.so.6#sysconf(0x1e, 0x7fffa8ba5b10, 0x3f, 0x30220e7b17, 0x0, 0x7) 
528.528 call #libc.so.6#getpagesize(0x1e, 0x7fffa8ba5b10, 0xfffffffffff51435, 0x30220e7b17, 0x0, 0x7) = 4096 
528.528 leave #libc.so.6#sysconf = 4096 
528.528 call #libc.so.6#__libc_dl_error_tsd(0x1e, 0x7fffa8ba5b10, 0x800000, 0x2a40, 0x0, 0x7) = 139854069229848 
... 

次にftraceのドキュメントhere

ftrace -sym '*' abiword 

で始まる、(非常に長い)のトレースを生成します。