include("linuxdat.acid");
_asmlines = 30;
defn xasm(addr)
{
local bound;
bound = fnbound(addr);
addr = fmt(addr, 'i');
loop 1,_asmlines do {
print(fmt(addr, 'a'), " ", fmt(addr, 'X'));
print("\t", *addr++, "\n");
if bound != {} && addr > bound[1] then {
lasmaddr = addr;
return {};
}
}
lasmaddr = addr;
}
defn xcasm()
{
xasm(lasmaddr);
}
defn Current()
{
return **pcurrent;
}
defn pidhash(pid)
{
return (pid - 1) % MAXPROC;
}
defn uprocn(n)
{
p=proctab.proc + n*sizeofUproc;
complex Uproc p;
if p.tid > 0 then
return p;
return 0;
}
defn uproc(tid)
{
if tid > 0 then {
p = proctab.proc + pidhash(tid) * sizeofUproc;
complex Uproc p;
if p.tid == tid then
return p;
}
return 0;
}
defn umem(p)
{
local x, m, s, a, l, f;
complex Uproc p;
m = p.mem;
complex Space m;
x = 0;
loop 1,SEGMAX do {
s = m.seg[x];
if s then {
complex Seg s;
a = s.areas;
l = 0;
complex Area a;
print(s.addr.base\X, "-", s.addr.top\X, " < ", s.limit\X, "\t");
mem(segname[x], "s");
while a do {
if l && l.addr.top < a.addr.base then {
print(l.addr.top\X, "-", a.addr.base\X, "\t*FREE*\n");
}
print(a.addr.base\X, "-", a.addr.top\X, "\t", a.prot\X, "\t");
f = a.filemap;
complex Filemap f;
if f then {
print(f.offset\X, "@");
mem(f.path, "s");
} else {
print("*ANON*\n");
}
l = a;
a = a.next;
}
}
x = x + 1;
}
}
defn addr2area(p, addr)
{
local m, s, a, x;
complex Uproc p;
m = p.mem;
complex Space m;
x = 0;
loop 1,SEGMAX do {
s = m.seg[x];
if s then {
complex Seg s;
a = s.areas;
complex Area a;
while a do {
if addr >= a.addr.base && addr < a.addr.top then {
return a;
}
a = a.next;
}
}
x = x+1;
}
return 0;
}
defn ustk()
{
local p, pc, sp, a, f, o;
p = Current();
pc = p.ureg.pc\X;
sp = p.ureg.bp\X;
while sp do {
print(sp, "\t");
a = addr2area(p, pc);
if a && a.filemap then {
f = a.filemap;
complex Filemap f;
o = f.offset + (pc - a.addr.base);
print(pc, "\t", o\X, "@");
mem(f.path, "s");
} else {
print(pc, "\n");
}
sp = sp[0];
pc = sp[1];
}
}
defn utrace(p)
{
local t, i, x, s;
complex Uproc p;
t = p.trace;
complex Tracebuf t;
if t then {
i = t.wp;
loop 1,256 do {
s = t.lines + ((i % 256) * 80);
mem(s, "s");
i = i + 1;
}
}
}
defn ufds(p)
{
local t, d, i, f;
complex Uproc p;
t = p.fdtab;
complex Fdtab t;
print("count=", t.nfd\D, "\n");
i = 0;
loop 1,t.nfd do {
d = t.fd + (i * sizeofFd);
complex Fd d;
if d.file then {
f = d.file;
complex Ufile f;
print("[", i\D, "]\tfile=", f\X, ", flags=", d.flags\D, " ref=", f.ref, " mode=", f.mode\X, " dev=", f.dev\D);
if f.fd >= 0 then {
print(" fd=", f.fd\D);
}
if f.path then {
print(" path=");
mem(f.path, "s");
} else {
print("\n");
}
}
i = i + 1;
}
}
defn uprocs()
{
i=0;
loop 1,MAXPROC do {
p=uprocn(i);
if p then {
print("[", i\D, "] ", p\X, " state=", p.state, " pid=", p.pid, " tid=", p.tid, " ppid=", p.ppid," pgrp=", p.pgid, " wstate=", p.wstate, " kpid=", p.kpid, " syscall=");
mem(p.syscall, "s");
}
i = i + 1;
}
}
|