ktruss.lua   [plain text]


#!/usr/local/bin/recon

local ktrace = require 'ktrace'

if not arg[1] or arg[1] == '-h' then
  print[[
usage: ktruss <syscall-name> [<more-names> ...]

Use Kernel TRace to print User Space Syscalls (ktruss).]]
  os.exit(arg[1] == nil)
end

local sess = ktrace.Session.new()

for i = 1, #arg do
  sess:add_callback_pair('BSC_' .. arg[i], function (start, finish)
    print(('%s[%d]: %s(0x%x, 0x%x, 0x%x, 0x%x) -> %d'):format(
        sess:procname_for_threadid(start.threadid),
        sess:pid_for_threadid(start.threadid), arg[1], start[1], start[2],
        start[3], start[4], finish[2]))
  end)
end

local ok, err = sess:start()
if not ok then
  io.stderr:write('tracing failed: ', err, '\n')
  os.exit(1)
end