Один из способов получить 'недавний' %pc
- программный счетчик - (также известный как %ip
указатель инструкций ) - сохранить состояние вашего процесса.с makecontext
void makecontext(ucontext_t *ucp, void (*func)(), int argc, ...);
и считайте правильное значение в буфере: REG_EIP
, как определено в sys/ucontext.h
context.uc_mcontext.gregs[REG_EIP];
Обратите внимание, чтоструктура данных, очевидно, зависит от машины, и, например, если бы вы использовали SPARC, %ip
был бы сохранен в REG_RIP
-
, насколько я знаюнет способа прочитать это значение для всех потоков, вам нужно будет прочитать %pc
в каждом из них и вручную собрать ваши данные.