| 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; |
| } |
| } |