LINUX.ORG.RU

текущие инструкции процесса выполняемые cpu


0

1

Всем привет!

Хочется узнать что делает определённый процесс в течение некоторого времени. Нужен не strace(системные вызовы) а список ассемблерных инструкций которые выполняются. Думаю что-то из области профайлеров или отладчиков. Причём желательно чтобы можно было дебажить и уже запущенные процессы(думаю что при этом скорость их работы сильно упадёт, но это неважно).

★★★★★

valgrind такое явно должен уметь

namezys ★★★★
()

а чем gdb не устраивает?

anonymous
()
Ответ на: комментарий от juk4windows

man gdb

а можно подробнее? stepi текущую инструкцию не показывает а disassemble просто листинг выводит.

true_admin ★★★★★
() автор топика

Покури труды тов. Касперского, тот который Крис. У него было что-то и про отладчики под linux.

trex6 ★★★★★
()

gdb prog pid

info reg eip
disassamble число

например:

gdb /usr/bin/hexdump 24466

(gdb) info reg eip
eip 0xb7819424 0xb7819424 <__kernel_vsyscall+16>
(gdb) disassemble 0xb7819424
Dump of assembler code for function __kernel_vsyscall:
0xb7819414 <+0>: push %ecx
0xb7819415 <+1>: push %edx
0xb7819416 <+2>: push %ebp
0xb7819417 <+3>: mov %esp,%ebp
0xb7819419 <+5>: sysenter
0xb781941b <+7>: nop
0xb781941c <+8>: nop
0xb781941d <+9>: nop
0xb781941e <+10>: nop
0xb781941f <+11>: nop
0xb7819420 <+12>: nop
0xb7819421 <+13>: nop
0xb7819422 <+14>: jmp 0xb7819417 <__kernel_vsyscall+3>
=> 0xb7819424 <+16>: pop %ebp
0xb7819425 <+17>: pop %edx
0xb7819426 <+18>: pop %ecx
0xb7819427 <+19>: ret

fghj ★★★★★
()
Ответ на: комментарий от fghj

Мне нужно не «посмотреть что там происходит прямо сейчас» а записать какие инструкции выполняются. Комманда disassemble просто выводит дамп памяти и рисует «=>» на текущий program counter.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от unsigned

Решение в лоб

В смысле имелось в виду disas + stepi? Можно, но слишком много времени будет уходить gdb на то чтобы ему давать эти комманды. Правда, пока это единственный вариант которые придумывается.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от anonymous

gdb tracepoints не подойдут?

спасибо, уже ближе. Увы, не умеет коллекционировать выполняемые комманды. Но может удастся дампить program counter и по нему уже определять что там происходило... Но это геморно...

true_admin ★★★★★
() автор топика
Ответ на: комментарий от fghj

facepalm

gdb /usr/bin/hexdump 24466

(gdb) info reg eip eip 0xb7819424 0xb7819424 <__kernel_vsyscall+16> (gdb) disassemble 0xb7819424

=>

gdb /usr/bin/hexdump 24466

(gdb) disassemble $eip

Не нужно учить молодёжь плохому и паттерну копи-паст особенно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.