Безопасно ли перебирать кадр стека?

В моем предыдущем вопросе я пытался узнать, смогу ли я программно получить трассировку стека дочернего процесса от его родителя.

Я успешно сделал это, но теперь у меня возник другой вопрос - безопасно ли напрямую проверять эти кадры во время выполнения программы? Я определяю "безопасный" здесь как значение "не будет изменять значения в дочернем стеке".

Например, вот примерная трассировка стека, которую я получил при выполнении теста NPB-Serial CG Class A:

0x400c7e : (conj_grad_+0x12e) [0x400c7e]
  Saved regs:
    RIP: 0x400c7e
    RSP: 0x7ffe5e3662a0
    RBP: 0x36b1
0x401ec8 : (MAIN__+0x739) [0x401ec8]
  Saved regs:
    RIP: 0x401ec8
    RSP: 0x7ffe5e366300
    RBP: (nil)
0x402b39 : (main+0x1d) [0x402b39]
  Saved regs:
    RIP: 0x402b39
    RSP: 0x7ffe5e368d40
    RBP: (nil)
0x7f76b7114ec5 : (__libc_start_main+0xf5) [0x7f76b7114ec5]
  Saved regs:
    RIP: 0x7f76b7114ec5
    RSP: 0x7ffe5e368d50
    RBP: (nil)
0x400a89 : (_start+0x29) [0x400a89]
  Saved regs:
    RIP: 0x400a89
    RSP: 0x7ffe5e368e10
    RBP: (nil)

Я хотел бы получить дамп стека путем копирования значений в каждой записи указателя стека - например, начиная с 0x7ffe5e368e10 и копирование каждого значения с этого адреса в текущий указатель стека в отдельном месте.

Есть ли риски для этого? Или я думаю об этом неправильно (например, есть более простой способ сделать это)?

0 ответов

Другие вопросы по тегам