#include "a_samp" main() { new variable = 123456789, frame_pointer, local_address, relative_address, data = GetAmxRealData(), global_address; /** **\ frame_pointer + local_address = relative_address relative_address + data = global_address reg.x = registre ... hdr.x = header ... seg.x = segment ... var.x = variable ... frm = frame pointer **/ // Get Frame Pointer #emit LCTRL 5 // reg.pri = frm #emit STOR.S.pri frame_pointer // var.frame_pointer = reg.pri // Get Frame Pointer // pri = Frame pointer // Get local address #emit CONST.alt variable // reg.alt = local address of var.variable #emit STOR.S.alt local_address // var.local_address = reg.alt // Get local address // alt = Local address // Get relative address #emit ADD // reg.pri += reg.alt #emit STOR.S.pri relative_address // var.relative_address = reg.pri // Get relative address // pri = Relative address // Get global address #emit LOAD.S.alt data // reg.alt = var.data #emit ADD // reg.pri += reg.alt #emit STOR.S.pri global_address // var.global_address = reg.pri // Get global address printf("frame_pointer : 0x%x | %d", frame_pointer, frame_pointer); printf("local_address : 0x%x | %d", local_address, local_address); printf("relative_address : 0x%x | %d", relative_address, relative_address); printf("data : 0x%x | %d", data, data); printf("global_address : 0x%x | %d", global_address, global_address); } stock GetAmxRealData() { /** reg.x = registre ... hdr.x = header ... seg.x = segment ... var.x = variable ... **/ new addr, cod, base; #emit LCTRL 1 // reg.pri = hdr.data #emit NEG // reg.pri = -reg.pri #emit ADD.C 12 // reg.pri += 12 #emit STOR.S.pri addr // var.addr = reg.pri #emit LREF.S.pri addr // reg.pri = *(seg.data + var.addr) #emit STOR.S.pri cod // var.cod = reg.pri addr += 4; #emit LREF.S.pri addr // reg.pri = *(seg.data + var.addr) #emit NEG // reg.pri = -reg.pri #emit STOR.S.pri base // var.base = reg.pri cod += base; amx_nothing(); #emit LCTRL 6 // reg.pri = seg.cip #emit ADD.C 0xFFFFFFF4 // reg.pri += 0xFFFFFFF4 (-12) = reg.pri -= 12 (SUB.C n'existe pas/doesn't exist) #emit LOAD.S.alt cod // reg.alt = var.cod #emit ADD // reg.pri += reg.alt #emit STOR.S.pri addr // var.addr = reg.pri #emit LREF.S.pri addr // reg.pri = *(seg.data + var.addr) #emit SUB // reg.pri -= reg.alt #emit CONST.alt amx_nothing #emit SUB // reg.pri -= reg.alt #emit MOVE.alt // reg.alt = reg.pri #emit LCTRL 1 // reg.pri = hdr.data #emit XCHG // reg.pri = reg.alt | reg.alt = reg.pri #emit SUB // reg.pri -= reg.alt #emit STOR.S.pri addr // var.addr = reg.pri (addr = real address) return addr - base; } static amx_nothing() { return 0; }