Szerző Téma: Új hooking method  (Megtekintve 2970 alkalommal)

Nem elérhető krisk

  • 2380
    • Profil megtekintése
Új hooking method
« Dátum: 2013. január 13. - 08:38:09 »
0 Show voters
CREDITS
Ez nem az én munkám, és csak egy rövid tutorial lesz. A hivatalos fórumon ipsBruno jött rá erre az új fajta hooking methodra. Az érdekesség az, hogy senki se tudja, hogy mûködik, mivel az #if defined ág a függvény létrehozása elõtt található: tehát akkor még nem is létezett. De mûködik.
A MÓDSZER
Ismerjük (vagy nem) a y_hookot, az _ALS módszert, az automatás verziót, CallLocalFunction-os verziót, és még rengeteg mást, amivel függvényt lehet hookolni. Ha valaki nem tudná, mi az, valami ilyesmit kell elképzelni:
 

// streamer.ini
STREAMER_Startup() {
  // streamer kód
  printf(\"streamer betöltve!\");
  return 1;
}

 
Azt akarjuk, hogy a fenti függvény az OnGameModeInit lényegi lefutása elõtt fusson le. A legegyszerûbb, és sokak által mai napig használt módszer a következõ:
 

//gm.pwn
#include <a_samp>
#include <streamer.ini>
public OnGameModeInit() {
  STREAMER_Startup();
  // gm kód
  return 1;
}

 
Ez szép és jó, de könnyen találhatunk hiányosságokat is: például mindig bele kell írni a kódba, és mindig a GameModeInit legelsõ soraként. Ez több hasonlóan beágyazott függvénykönyvtárnál problémás lehet.
Na: erre talált egy új modszert a fenti fórumozó:
 

//streamer.ini
public OnGameModeInit()
{
  // streamer kód
  printf(\"Streamer betöltve!\");
  #if defined GameModeInit
     return GameModeInit();
  #else
     return true;
   #endif
}
#define OnGameModeInit GameModeInit
#if defined GameModeInit
    forward GameModeInit();
#endif

 
A GM-ben pedig meghívjuk a következõt:
 

//gm.pwn
#include <a_samp>
#include <streamer.ini>
public OnGameModeInit () {
    print(\"Játékmód betöltve\");
    return true;
}

 
Ezzel ugyanazt a hatást értük el, elõször a \"Streamer betöltve!\" majd a \"Játékmód betöltve!\" kimenet jelenik meg. A legjobb az egészben az, hogy akkor is mûködik, ha sosem hívódott meg a játékmódban az OnGameModeInit, nem warningol, és persze, hogy nem használ sem automatát, sem CallLocalFunctiont, mivel az egész direktívákból áll, a fordítónak szinte semmi dolga nincs az egésszel: amitõl hihetetlen gyors lesz.
« Utoljára szerkesztve: 2013. szeptember 02. - 14:50:49 írta Benceee »

Új hooking method
« Válasz #1 Dátum: 2013. január 13. - 10:08:49 »
0 Show voters
Az eredeti post hol található?
Erre most kíváncsi vagyok, tesztelni fogom, több .inc beágyazásakor is mûködik?

Nem elérhető krisk

  • 2380
    • Profil megtekintése
Új hooking method
« Válasz #2 Dátum: 2013. január 13. - 10:14:30 »
0 Show voters
Idézetet írta: ɐʞzssǝlosz date=1358068129\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"32380\" data-ipsquote-contentclass=\"forums_Topic
Az eredeti post hol található?
Erre most kíváncsi vagyok, tesztelni fogom, több .inc beágyazásakor is mûködik?
 
A kód alapján elvileg mûködnie kell, én még nem próbáltam.
http://forum.sa-mp.com/showpost.php?p=2291452&postcount=14

Új hooking method
« Válasz #3 Dátum: 2013. január 13. - 11:02:34 »
0 Show voters
Jó találmány, én is \"találtam ki\" régebben, egy saját hook módszert.
Habár nem tudom, hogy ezt lehet-e hooknak nevezni, vagy, hogy nem ismertétek-e de én így csináltam régebben a hookolást.
PL: CreateVehicle funkció hookolva(az én módszeremmel):
 

#define _CreateVehicle CreateVehicle
stock ACreateVehicle(modelid, Float:x, Float:y, Float:z, Float:angle, color1, color2, respawn_delay){
   new id = _CreateVehicle(modelid, x, y, z, angle, color1, color2, respawn_delay);
   if(id >= 1){
       printf(\"%d vehicle created\", id);
   }
   return id;
}
#define CreateVehicle ACreateVehicle

 
EDIT: Anthony köszi az észrevételt.
« Utoljára szerkesztve: 2013. január 13. - 12:02:19 írta lackos888 »

Nem elérhető tonyo

  • 1335
  • Moderális Generátor
    • Profil megtekintése
Új hooking method
« Válasz #4 Dátum: 2013. január 13. - 11:55:42 »
0 Show voters
Elsõ sor nem fordítva?


Ez most jól jön, épp most tervezek majd publikálni egy függvénykönyvtárat, ha tényleg mûködik ez a verzió, akkor még most átírom ilyenre :) Bár nálam kevesebb lesz a calback mint a funkció, de attól még baromi jól jön ez a verzió.

Új hooking method
« Válasz #5 Dátum: 2013. január 13. - 11:57:03 »
0 Show voters
Idézetet írta: Anthony date=1358074542\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"32380\" data-ipsquote-contentclass=\"forums_Topic
Elsõ sor nem fordítva?
 
Jah de, rosszul írtam, köszi az észrevételt.
« Utoljára szerkesztve: 2013. január 13. - 12:02:43 írta lackos888 »

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
Új hooking method
« Válasz #6 Dátum: 2013. január 13. - 12:01:11 »
0 Show voters
Igényes, használható tutorial. Áthelyezve.


// Nem akarom hogy azt higgyétek: kivételezek krisk-kel, de valóban nagyon jó leírásokat ír.

Nem elérhető krisk

  • 2380
    • Profil megtekintése
Új hooking method
« Válasz #7 Dátum: 2013. január 13. - 14:53:21 »
0 Show voters
Idézetet írta: Rupert date=1358074871\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"32380\" data-ipsquote-contentclass=\"forums_Topic
Igényes, használható tutorial. Áthelyezve.


// Nem akarom hogy azt higgyétek: kivételezek krisk-kel, de valóban nagyon jó leírásokat ír.
 
Köszönöm az ismételt áthelyezést.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal