C_far

Relative Address & Value

Jul 1st, 2016
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 2.21 KB | None | 0 0
  1. #include "a_samp"
  2. #tryinclude "YSI\y_amx"
  3.  
  4. main()
  5. {
  6.     print(" ");
  7.  
  8.     func1();
  9.     print(" ");
  10.  
  11.     func2();
  12.     print(" ");
  13.  
  14.     func3();
  15.     print(" ");
  16. }
  17.  
  18. func1()
  19. {
  20.     print("--- METHOD 1 ---");
  21.  
  22.     #if defined _INC_y_amx
  23.         new
  24.             var = 5843,
  25.             relative_address = AMX_GetRelativeAddress(var), // Fonction propre à y_amx permettant de récupérer l'adresse relative d'une variable passée en argument
  26.             value = AMX_RawRead(address); // Fonction propre à y_amx permmettant de récupérer la valeur à l'adresse relative d'une variable passée en argument
  27.  
  28.         printf("relative_address = 0x%x", relative_address);
  29.         printf("value = %d", value);
  30.     #else
  31.         print("y_amx non inclu.");
  32.     #endif
  33. }
  34.  
  35. func2()
  36. {
  37.     print("--- METHOD 2 ---");
  38.  
  39.     new
  40.         var = 5843,
  41.         relative_address,
  42.         value;
  43.  
  44.     #emit ADDR.pri var // On charge l'adresse relative de 'var' dans le registre primaire | frm + offs
  45.     #emit STOR.S.pri relative_address // On stocke le contenu du registre primaire dans la variable 'address'
  46.  
  47.     printf("relative_address = 0x%x", relative_address);
  48.  
  49.     #emit LREF.S.pri relative_address // On récupére le contenu de la variable 'relative_address' en supposant que c'est une adresse relative et on va stocker sa valeur dans le registre primaire
  50.     #emit STOR.S.pri value // On stocke le contenu du registre primaire dans la variable 'value'
  51.  
  52.     printf("value = %d", value);
  53. }
  54.  
  55. func3()
  56. {
  57.     print("--- METHOD 3 ---");
  58.  
  59.     new
  60.         var = 5843,
  61.         relative_address,
  62.         value;
  63.  
  64.     #emit LCTRL 5 // On charge dans le registre primaire le Frame Pointer | pri = frm
  65.     #emit CONST.alt var // On charge dans le registre alterné l'adresse locale de la variable 'var'
  66.     #emit ADD // On additionne le FRM et l'adresse locale de 'var' | pri += alt
  67.     #emit STOR.S.pri relative_address // On stocke le contenu du registre primaire dans la variable 'relative_address'
  68.  
  69.     printf("relative_address = 0x%x", relative_address);
  70.  
  71.     #emit LREF.S.pri relative_address // On récupére le contenu de la variable 'relative_address' en supposant que c'est une adresse relative et on va stocker sa valeur dans le registre primaire
  72.     #emit STOR.S.pri value // On stocke le contenu du registre primaire dans la variable 'value'
  73.  
  74.     printf("value = %d", value);  
  75. }
Advertisement