「もっとえぐいトリックはないものか?」の要点は、「Cから、特定コードのアドレスをどうやって知るか?」てことです。
- 名前が付いた関数の入り口は &func で取れる。
- gccなら &&label としてラベルのアドレスが取れる。
- スタックフレームの構造が分かっていれば、戻り番地を取れる。
いつでも使えるのは(1)だけ、(2)はコンパイラ依存だけどハードウェアには依存しないでしょう。(3)は環境ごとに変わってしまいますし、いつでも可能である保証もありません*1。
僕が、他に「ないものか?」と思ったのは、コードのアドレスを知る第四の方法のことです。インラインアセンブラは反則。大域ジャンプはsetjmp/longjmpでも出来るけど、これはトリックじゃないしね。知ってもそれを使う予定は何もないし、知っていいことも別にありませんけどね(苦笑)。