diff options
Diffstat (limited to 'acid/elflink')
-rw-r--r-- | acid/elflink | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/acid/elflink b/acid/elflink new file mode 100644 index 00000000..8e9f2e76 --- /dev/null +++ b/acid/elflink @@ -0,0 +1,54 @@ +aggr Rdebug +{ + 'X' 0 version; + 'X' 4 map; +}; + +aggr Rmap +{ + 'X' 0 addr; + 'X' 4 name; + 'X' 8 dynsect; + 'X' 12 next; + 'X' 16 prev; +}; + +defn +rdebug() +{ + local a; + + a = _DYNAMIC; + while *a != 0 do { + if *a == 21 then // 21 == DT_DEBUG + return *(a+4); + a = a+8; + } + return 0; +} + +defn +rlink() +{ + local r, m, n; + + r = rdebug(); + if r == 0 then + return {}; + complex Rdebug r; + print("version ", r.version, "\n"); + + m = r.map; + n = 0; + while m != 0 && n < 100 do { + complex Rmap m; + print("map ", m\X, " base ", m.addr\X, " next ", m.next\X, " name "); + if m.name then + print(*(m.name\s)); + else + print("''"); + print("\n"); + m = m.next; + n = n+1; + } +} |