Es gibt verschiedene Möglichkeiten, das zu tun:
[]$ readelf -s /usr/lib64/libc.so.6|grep usleep
1542: 00000000000f9090 57 FUNC GLOBAL DEFAULT 12 [email protected]@GLIBC_2.2.5
1560: 0000000000000000 0 FILE LOCAL DEFAULT ABS usleep.c
7073: 00000000000f9090 57 FUNC GLOBAL DEFAULT 12 usleep
[]$ objdump -t /usr/lib64/libc.so.6|grep usleep
0000000000000000 l df *ABS* 0000000000000000 usleep.c
00000000000f9090 g F .text 0000000000000039 usleep
[]$ nm -S /usr/lib64/libc.so.6|grep usleep
00000000000f9090 0000000000000039 T usleep
Die Größe ist in allen Fällen 0x39 (57) Bytes.
Wenn Sie die Anzahl der Befehle einer gegebenen Funktion möchten, können Sie immer noch verwenden objdump:
[]$ objdump -d /usr/lib64/libc.so.6 | perl -ne 'BEGIN { $/="\n\n" }; print if $_ =~ /usleep/;'
... wird die Demontage Liste. Für die genaue Anzahl der Anweisung müssen Sie die Linie subtrahieren zählen:
[]$ echo $(objdump -d /lib32/libc.so.6 | perl -ne 'BEGIN { $/="\n\n" }; print if $_ =~ /usleep/;'|wc -l)-2| bc -l
Für eine dynamische Lösung können Sie perf stat verwenden:
[]$ perf stat uptime
10:57:28 up 21 days, 10:30, 4 users, load average: 2.00, 1.98, 2.16
Performance counter stats for 'uptime':
0.719094 task-clock (msec) # 0.802 CPUs utilized
0 context-switches # 0.000 K/sec
0 cpu-migrations # 0.000 K/sec
123 page-faults # 0.171 M/sec
2,297,093 cycles # 3.194 GHz
<not supported> stalled-cycles-frontend
<not supported> stalled-cycles-backend
1,985,122 instructions # 0.86 insns per cycle
389,193 branches # 541.227 M/sec
15,847 branch-misses # 4.07% of all branches
0.000896079 seconds time elapsed
Wenn Sie einen Befehl ein paar Mal laufen werden Sie sehr wahrscheinlich, dass die Werte zwischen Läufen schwanken. Daher ist dies keine exakte Wissenschaft.
Wie viele Anweisungen würde es dauern, dieses Assemblerprogramm zu beenden: 'jmp $'? –