Как точно обнаружить время выполнения в Linux?Linux

Ответить
Anonymous
 Как точно обнаружить время выполнения в Linux?

Сообщение Anonymous »

I have a binary sample (VirusShare_00238010bb86fd0bf4014c3d19f114b2) used in my research that behaves oddly when I try to measure its runtime
When I run it directly with /usr/bin/time, it exits almost instantly:
$ time /home/runner/samples/VirusShare_00238010bb86fd0bf4014c3d19f114b2
BUILD DONGS

real 0m0.001s
user 0m0.001s
sys 0m0.000s

< /code>
Но когда я прикрепляю с помощью strace -f, программа печатает построить Dongs, а затем терминал продолжает заполняться повторным connect () и nanosleep () syscalls -пример ниже, чтобы вы могли сосредоточиться на моем вопросе и прояснить :)
мне пришлось нажать Ctrl -C, чтобы остановить его. Похоже, бинарные вилки с дочернего процесса, который продолжает повторять сетевые подключения в фоновом режиме. Я придумал это: < /p>
start=$(date +%s%3N)

/home/runner/samples/VirusShare_00238010bb86fd0bf4014c3d19f114b2 &

limit=$((start + 10000)) # 10 sec timeout

while pgrep -f VirusShare_00238010bb86fd0bf4014c3d19f114b2 >/dev/null; do
now=$(date +%s%3N)
if (( now >= limit )); then
echo "[!] Timeout reached, killing all VirusShare processes"
pkill -f VirusShare_00238010bb86fd0bf4014c3d19f114b2
break
fi
sleep 0.1
done

end=$(date +%s%3N)
echo "runtime=$((end-start)) ms"
< /code>
Но у меня есть много проблем с ним, он выглядит сложным (разве для этого нет встроенной команды?), И она ждет 0,1 секунды, что повреждает точность (использование меньших чисел не поможет, так как сон не так точно) < /p>
close(4) = 0
ioctl(3, SIOCGIFHWADDR, {ifr_name="eth0", ifr_hwaddr={sa_family=ARPHRD_ETHER, sa_data=00:16:3e:93:88:c7}}) = 0
close(3) = 0
fork(strace: Process 647368 attached
) = 647368
[pid 647368] fork(
[pid 647366] wait4(647368, strace: Process 647369 attached

[pid 647368] ) = 647369
[pid 647369] setsid(
[pid 647368] exit(0
[pid 647369] ) = 647369
[pid 647368] ) = ?
[pid 647369] chdir("/"
[pid 647368] +++ exited with 0 +++
[pid 647366] [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 647368
[pid 647369] ) = 0
[pid 647369] rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[PIPE], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x40ad5c},
[pid 647366] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=647368, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
[pid 647369] {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
[pid 647366] exit(0
[pid 647369] socket(AF_INET, SOCK_STREAM, IPPROTO_IP
[pid 647366] ) = ?
[pid 647369] ) = 3
[pid 647366] +++ exited with 0 +++
fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
connect(3, {sa_family=AF_INET, sin_port=htons(23), sin_addr=inet_addr("206.189.30.49")}, 16) = -1 EINPROGRESS (Operation now in progress)
select(4, NULL, [3], NULL, {tv_sec=30, tv_usec=0}) = 1 (out [3], left {tv_sec=29, tv_usec=904908})
getsockopt(3, SOL_SOCKET, SO_ERROR, [ECONNREFUSED], [4]) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
**nanosleep**({tv_sec=5, tv_nsec=0}, 0x7ffe11750770) = 0
close(3) = 0
socket(AF_INET, SOCK_STREAM, IPPROTO_IP) = 3
fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
connect(3, {sa_family=AF_INET, sin_port=htons(23), sin_addr=inet_addr("206.189.30.49")}, 16) = -1 EINPROGRESS (Operation now in progress)
select(4, NULL, [3], NULL, {tv_sec=30, tv_usec=0}) = 1 (out [3], left {tv_sec=29, tv_usec=905455})
getsockopt(3, SOL_SOCKET, SO_ERROR, [ECONNREFUSED], [4]) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
**nanosleep**({tv_sec=5, tv_nsec=0}, ^Cstrace: Process 647369 detached


root@sandbox0:~# ^C


Подробнее здесь: https://stackoverflow.com/questions/797 ... e-in-linux
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»