Thread: amxxdump
View Single Post
sawce
The null pointer exception error and virtual machine bug
Join Date: Oct 2004
Old 03-26-2007 , 09:46   Re: amxxdump
Reply With Quote #10

Updated to version 1.3:
  • Added better Windows support.
  • Added very basic SourceMod plugin support. Symbols and most of the utility, code-scanning abilities (eg: -D, -E) will not work yet, but you will get full opcode output (-d)
  • Added data guessing switch (-e). This will attempt to guess data from the push.c op code. It's not perfect.
  • Added native guessing switch (-E). This will attempt to guess data passed to a native. Only natives with a series of push's immediately before them (eg: no ternary operator, or natives with function return values) will be auto detected.

The "includes" directory (provided) needs to be in the same directory as the amxxdump binary for this feature to work.

so people know what I'm talking about, here's the example output from the new -E switch (admincmd.amxx, plugin_init):
Code:
[~/amxxdump/bin]> ./amxxdump ../admincmd.amxx -D plugin_init -E

0x990                      PROC              ; public plugin_init()
0x994                     BREAK
0x998                     BREAK
0x99C                    PUSH.C  0xADC
0x9A4                    PUSH.C  0x0
0x9AC                    PUSH.C  0xAA0
0x9B4                    PUSH.C  0xC
0x9BC                  SYSREQ.C  0xA         ; register_plugin("Admin Commands",AMXX_VERSION_STR[6]={"1.76c"},"AMXX Dev Team")
0x9C4                     STACK  0x10
0x9CC                     BREAK
0x9D0                    PUSH.C  0xB14
0x9D8                    PUSH.C  0x4
0x9E0                  SYSREQ.C  0xB         ; register_dictionary("admincmd.txt")
0x9E8                     STACK  0x8
0x9F0                     BREAK
0x9F4                    PUSH.C  0xB48
0x9FC                    PUSH.C  0x4
0xA04                  SYSREQ.C  0xB         ; register_dictionary("common.txt")
0xA0C                     STACK  0x8
0xA14                     BREAK
0xA18                    PUSH.C  0xBB8
0xA20                    PUSH.C  0x4
0xA28                    PUSH.C  0xB98
0xA30                    PUSH.C  0xB74
0xA38                    PUSH.C  0x10
0xA40                  SYSREQ.C  0xC         ; register_concmd("amx_kick","cmdKick",4,"<name or #userid> [reason]")
0xA48                     STACK  0x14
0xA50                     BREAK
0xA54                    PUSH.C  0xC60
0xA5C                    PUSH.C  0x8
0xA64                    PUSH.C  0xC44
0xA6C                    PUSH.C  0xC24
0xA74                    PUSH.C  0x10
0xA7C                  SYSREQ.C  0xC         ; register_concmd("amx_ban","cmdBan",8,"<name or #userid> <minutes> [reason]")
0xA84                     STACK  0x14
0xA8C                     BREAK
0xA90                    PUSH.C  0xD40
0xA98                    PUSH.C  0x8
0xAA0                    PUSH.C  0xD1C
0xAA8                    PUSH.C  0xCF4
0xAB0                    PUSH.C  0x10
0xAB8                  SYSREQ.C  0xC         ; register_concmd("amx_banip","cmdBanIP",8,"<name or #userid> <minutes> [reason]")
0xAC0                     STACK  0x14
0xAC8                     BREAK
0xACC                    PUSH.C  0xE28
0xAD4                    PUSH.C  0x8
0xADC                    PUSH.C  0xE00
0xAE4                    PUSH.C  0xDD4
0xAEC                    PUSH.C  0x10
0xAF4                  SYSREQ.C  0xC         ; register_concmd("amx_addban","cmdAddBan",8,"<authid or ip> <minutes> [reason]")
0xAFC                     STACK  0x14
0xB04                     BREAK
0xB08                    PUSH.C  0xEFC
0xB10                    PUSH.C  0x8
0xB18                    PUSH.C  0xED8
0xB20                    PUSH.C  0xEB0
0xB28                    PUSH.C  0x10
0xB30                  SYSREQ.C  0xC         ; register_concmd("amx_unban","cmdUnban",8,"<authid or ip>")
0xB38                     STACK  0x14
0xB40                     BREAK
0xB44                    PUSH.C  0xF7C
0xB4C                    PUSH.C  0x10
0xB54                    PUSH.C  0xF5C
0xB5C                    PUSH.C  0xF38
0xB64                    PUSH.C  0x10
0xB6C                  SYSREQ.C  0xC         ; register_concmd("amx_slay","cmdSlay",16,"<name or #userid>")
0xB74                     STACK  0x14
0xB7C                     BREAK
0xB80                    PUSH.C  0x1008
0xB88                    PUSH.C  0x10
0xB90                    PUSH.C  0xFE8
0xB98                    PUSH.C  0xFC4
0xBA0                    PUSH.C  0x10
0xBA8                  SYSREQ.C  0xC         ; register_concmd("amx_slap","cmdSlap",16,"<name or #userid> [power]")
0xBB0                     STACK  0x14
0xBB8                     BREAK
0xBBC                    PUSH.C  0x10BC
0xBC4                    PUSH.C  0x4
0xBCC                    PUSH.C  0x1098
0xBD4                    PUSH.C  0x1070
0xBDC                    PUSH.C  0x10
0xBE4                  SYSREQ.C  0xC         ; register_concmd("amx_leave","cmdLeave",4,"<tag> [tag] [tag] [tag]")
0xBEC                     STACK  0x14
0xBF4                     BREAK
0xBF8                    PUSH.C  0x1168
0xC00                    PUSH.C  0x40
0xC08                    PUSH.C  0x1144
0xC10                    PUSH.C  0x111C
0xC18                    PUSH.C  0x10
0xC20                  SYSREQ.C  0xC         ; register_concmd("amx_pause","cmdPause",64,"- pause or unpause the game")
0xC28                     STACK  0x14
0xC30                     BREAK
0xC34                    PUSH.C  0x1214
0xC3C                    PUSH.C  0x1000000
0xC44                    PUSH.C  0x11F8
0xC4C                    PUSH.C  0x11D8
0xC54                    PUSH.C  0x10
0xC5C                  SYSREQ.C  0xC         ; register_concmd("amx_who","cmdWho",16777216,"- displays who is on server")
0xC64                     STACK  0x14
0xC6C                     BREAK
0xC70                    PUSH.C  0x12C8
0xC78                    PUSH.C  0x40
0xC80                    PUSH.C  0x12A8
0xC88                    PUSH.C  0x1284
0xC90                    PUSH.C  0x10
0xC98                  SYSREQ.C  0xC         ; register_concmd("amx_cvar","cmdCvar",64,"<cvar> [value]")
0xCA0                     STACK  0x14
0xCA8                     BREAK
0xCAC                 CONST.pri  0x1360
0xCB4                      HEAP  0x4
0xCBC                      MOVS  0x4
0xCC4                  PUSH.alt
0xCC8                    PUSH.C  0x1000000
0xCD0                    PUSH.C  0x1334
0xCD8                    PUSH.C  0x1304
0xCE0                    PUSH.C  0x10
0xCE8                  SYSREQ.C  0xC         ; register_concmd("amx_plugins","cmdPlugins",16777216,"")
0xCF0                     STACK  0x14
0xCF8                      HEAP  0xFFFFFFFC
0xD00                     BREAK
0xD04                 CONST.pri  0x1360
0xD0C                      HEAP  0x4
0xD14                      MOVS  0x4
0xD1C                  PUSH.alt
0xD20                    PUSH.C  0x1000000
0xD28                    PUSH.C  0x1394
0xD30                    PUSH.C  0x1364
0xD38                    PUSH.C  0x10
0xD40                  SYSREQ.C  0xC         ; register_concmd("amx_modules","cmdModules",16777216,"")
0xD48                     STACK  0x14
0xD50                      HEAP  0xFFFFFFFC
0xD58                     BREAK
0xD5C                    PUSH.C  0x13FC
0xD64                    PUSH.C  0x20
0xD6C                    PUSH.C  0x13E0
0xD74                    PUSH.C  0x13C0
0xD7C                    PUSH.C  0x10
0xD84                  SYSREQ.C  0xC         ; register_concmd("amx_map","cmdMap",32,"<mapname>")
0xD8C                     STACK  0x14
0xD94                     BREAK
0xD98                    PUSH.C  0x1460
0xDA0                    PUSH.C  0x80
0xDA8                    PUSH.C  0x1444
0xDB0                    PUSH.C  0x1424
0xDB8                    PUSH.C  0x10
0xDC0                  SYSREQ.C  0xC         ; register_concmd("amx_cfg","cmdCfg",128,"<filename>")
0xDC8                     STACK  0x14
0xDD0                     BREAK
0xDD4                    PUSH.C  0x14D0
0xDDC                    PUSH.C  0x10
0xDE4                    PUSH.C  0x14B0
0xDEC                    PUSH.C  0x148C
0xDF4                    PUSH.C  0x10
0xDFC                  SYSREQ.C  0xC         ; register_concmd("amx_nick","cmdNick",16,"<name or #userid> <new nick>")
0xE04                     STACK  0x14
0xE0C                     BREAK
0xE10                    PUSH.C  0x1588
0xE18                    PUSH.C  0x800
0xE20                    PUSH.C  0x1568
0xE28                    PUSH.C  0x1544
0xE30                    PUSH.C  0x10
0xE38                  SYSREQ.C  0xD         ; register_clcmd("amx_rcon","cmdRcon",2048,"<command line>")
0xE40                     STACK  0x14
0xE48                     BREAK
0xE4C                    PUSH.C  0x1628
0xE54                    PUSH.C  0x800
0xE5C                    PUSH.C  0x15F8
0xE64                    PUSH.C  0x15C4
0xE6C                    PUSH.C  0x10
0xE74                  SYSREQ.C  0xD         ; register_clcmd("amx_showrcon","cmdShowRcon",2048,"<command line>")
0xE7C                     STACK  0x14
0xE84                     BREAK
0xE88                 CONST.pri  0x16AC
0xE90                      HEAP  0x4
0xE98                      MOVS  0x4
0xEA0                  PUSH.alt
0xEA4                    PUSH.C  0xFFFFFFFF
0xEAC                    PUSH.C  0x1688
0xEB4                    PUSH.C  0x1664
0xEBC                    PUSH.C  0x10
0xEC4                  SYSREQ.C  0xD         ; register_clcmd("pauseAck","cmdLBack",-1,"")
0xECC                     STACK  0x14
0xED4                      HEAP  0xFFFFFFFC
0xEDC                  ZERO.pri
0xEE0                      RETN
As you'll see, there's a few minor annoyances I have to fix yet, but for the most part it's operational.

Last edited by sawce the snail; 03-26-2007 at 13:02.
sawce is offline