1

以前の質問で、親プロセスから子プロセスのスタック トレースをプログラムで取得できるかどうかを確認しようとしていました。

成功しましたが、別の疑問が頭に浮かびました。プログラムの実行中にこれらのフレームを直接調べても安全ですか? ここでは、「子のスタックの値を変更しない」という意味で「安全」と定義しています。

たとえば、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そのアドレスから現在のスタック ポインターまでのすべての値を別の場所にコピーします。

これを行うリスクはありますか?それとも、これについて間違って考えていますか (これを行う簡単な方法があるように)?

4

0 に答える 0