1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-06 04:31:29 +00:00
Files
nmap/nse_debug.cc
batrick 07cfc5aee4 Corrected many #includes for header files (where they are included).
Moved the includes for Lua headers to the .cc files so they are
not needlessly, repeatedly included.

Similarly, moved some standard headers to the .cc files and reorganized
includes to be uniform for all nse_* source files.

Fixed whitespace (removed tabs).
2009-03-10 05:56:10 +00:00

101 lines
2.2 KiB
C++

extern "C" {
#include "lua.h"
#include "lauxlib.h"
}
#include "nse_debug.h"
#include "output.h"
/* Print a Lua table. depth_limit is the limit on recursive printing of
subtables. */
static void table_dump (lua_State *L, int i, int depth_limit)
{
assert(lua_type(L, i) == LUA_TTABLE);
printf("{ ");
lua_pushvalue(L, i);
lua_pushnil(L);
while (lua_next(L, -2) != 0) {
value_dump(L, -2, depth_limit - 1);
printf(" = ");
value_dump(L, -1, depth_limit - 1);
printf(", ");
lua_pop(L, 1);
}
lua_pop(L, 1);
printf("}");
}
/* Print a Lua value. depth_limit controls the depth to which tables will be
printed recursively (0 for no recursion). */
void value_dump (lua_State *L, int i, int depth_limit)
{
int t = lua_type(L, i);
switch (t)
{
case LUA_TSTRING: /* strings */
printf("'%s'", lua_tostring(L, i));
break;
case LUA_TBOOLEAN: /* booleans */
printf(lua_toboolean(L, i) ? "true" : "false");
break;
case LUA_TNUMBER: /* numbers */
printf("%g", lua_tonumber(L, i));
break;
case LUA_TTABLE:
if (depth_limit > 0)
table_dump(L, i, depth_limit);
else
printf("table: %p", lua_topointer(L, i));
break;
case LUA_TTHREAD:
case LUA_TFUNCTION:
case LUA_TUSERDATA:
case LUA_TLIGHTUSERDATA:
printf("%s: %p", lua_typename(L, t), lua_topointer(L, i));
break;
default: /* other values */
printf("%s", lua_typename(L, t));
break;
}
}
void stack_dump (lua_State *L)
{
int i, top = lua_gettop(L);
for (i = 1; i <= top; i++)
{
printf("[%d, %d] = ", i, (-top + i - 1));
value_dump(L, i, 0);
printf("\n");
}
}
void lua_state_dump (lua_State *L)
{
int top;
printf("=== LUA STATE ===\n");
top = lua_gettop(L);
printf("=== STACK (height %d)\n", top);
stack_dump(L);
printf("=== GLOBALS\n");
table_dump(L, LUA_GLOBALSINDEX, 0);
printf("\n");
printf("=== REGISTRY\n");
table_dump(L, LUA_REGISTRYINDEX, 0);
printf("\n");
printf("=== nmap.registry\n");
lua_getglobal(L, "nmap");
lua_getfield(L, -1, "registry");
table_dump(L, -1, 1);
printf("\n");
lua_pop(L, 2);
assert(lua_gettop(L) == top);
}