• 22 Avril 2025, 18:30:55


Auteur Sujet: Blabla du Pawn Center  (Lu 84433 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Blabla du Pawn Center
« Réponse #120 le: 07 Avril 2013, 01:05:49 »



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Remi

  • *
  • Criminel
  • Développeur de l'extension MTA:DayZ Epoch
  • Messages: 36
    • Voir le profil
Re : Re : Blabla du Pawn Center
« Réponse #121 le: 07 Avril 2013, 01:15:05 »

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Blabla du Pawn Center
« Réponse #122 le: 22 Avril 2013, 18:31:58 »
Il y a quelques jours je me suis amusé avec l'"assembleur" du PAWN (P-CODE) et j'ai codé une fonction qui permet de détourner des fonctions publique seulement si elles sont appelées par le serveur SA-MP (ou un plugin etc ...).

C'est complétement inutile je pense, mais ça peut être marrant.

[spoiler]
Code: (pawn) [Sélectionner]
#include <a_samp>

new g_AmxDefsize = -1;
new g_AddrPublicTable = -1;
new g_AddrNativeTable = -1;


stock AMX_ReadString(addr, str[], len = sizeof (str))
{
new Value;
new i;
/* Fonction pas du tout optimisée mais elle fonctionne */
for(i = 0; i < len; i++, addr++)
{
#emit LREF.S.PRI addr
#emit STOR.S.PRI Value
str[i] = Value & 0xff;
if(str[i] == 0) return;
}
}

GetPublicCount()
{
return (g_AddrNativeTable - g_AddrPublicTable) / g_AmxDefsize;
}


ReadAmxHeader()
{
new Addr;
new Offset;
new Value;

#emit LCTRL 1
#emit STOR.S.PRI Addr

Addr = -Addr;

/* Offset of flags + defsize*/
Offset = Addr + 8;
#emit LREF.S.PRI Offset
#emit STOR.S.PRI Value

g_AmxDefsize = (Value >> 16);

/* Offset of publics table */
Offset = Addr + 32;
#emit LREF.S.PRI Offset
#emit STOR.PRI g_AddrPublicTable

/* Offset of natives table*/
Offset = Addr + 36;
#emit LREF.S.PRI Offset
#emit STOR.PRI g_AddrNativeTable


}


GetPublicIdx(public_name[])
{
new Addr;
new Offset;
new Public_Name;
new Name[128];
new i;

#emit LCTRL 1
#emit STOR.S.PRI Addr

Addr = -Addr;


for(i = 0; i < GetPublicCount(); i++)
{
    Offset = Addr + g_AddrPublicTable + i * g_AmxDefsize + 4;
    #emit LREF.S.PRI Offset
    #emit STOR.S.PRI Public_Name
AMX_ReadString(Addr+Public_Name, Name);

if(strcmp(public_name, Name) == 0)
{
    return i;
}
}
return -1;
}

GetPublicAddr(idx)
{
new Addr;
new Offset;
new Public_Addr;

#emit LCTRL 1
#emit STOR.S.PRI Addr

Addr = -Addr;
    Offset = Addr + g_AddrPublicTable + idx * g_AmxDefsize;
   
    #emit LREF.S.PRI Offset
    #emit STOR.S.PRI Public_Addr

return Public_Addr;
}


DetourPublic(funcToDetour[], func_dest[])
{
new Addr;
new func_1, func_2;
new Offset;
new Func_Addr;

#emit LCTRL 1
#emit STOR.S.PRI Addr
Addr = -Addr;

func_1 = GetPublicIdx(funcToDetour);
func_2 = GetPublicIdx(func_dest);

if(func_1 != -1 && func_2 != -1)
{
Func_Addr = GetPublicAddr(func_2);
Offset = Addr + g_AddrPublicTable + func_1 * g_AmxDefsize;
#emit LOAD.S.pri Func_Addr
    #emit SREF.S.PRI Offset
}
}

public MyOnPlayerConnect(playerid);
public MyOnPlayerConnect(playerid)
{
print("MyOnPlayerConnect()");
    OnPlayerConnect(playerid);
}

public OnPlayerConnect(playerid)
{
print("OnPlayerConnect()");
}

public OnGameModeInit()
{

}

main()
{
    ReadAmxHeader();
    DetourPublic("OnPlayerConnect", "MyOnPlayerConnect");
}
[/spoiler]

Je me suis très fortement inspiré des codes d'Y_Less.

Ce code fait en sorte que quand le serveur appel OnPlayerConnect c'est la fonction MyOnPlayerConnect qui est appelé à la place.



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Blabla du Pawn Center
« Réponse #123 le: 22 Avril 2013, 20:42:30 »
Salut,

pas mal dis donc, par contre je vois mal à quoi ça risque de servir

Merci

++Sim++





Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Blabla du Pawn Center
« Réponse #124 le: 22 Avril 2013, 21:03:55 »
A rien lol, j'avais un peu de temps à tuer :P



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Kiloutre

  • Nolife, nerd et geek passionné d'Ordinatique ! ^^
  • *
  • Grand Banditisme
  • Messages: 567
    • Voir le profil
Re : Blabla du Pawn Center
« Réponse #125 le: 27 Avril 2013, 17:10:19 »
Et, ça peut marcher avec d'autres callback ?

[/url]

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Blabla du Pawn Center
« Réponse #126 le: 27 Avril 2013, 17:45:07 »
Oui, avec toutes les fonctions publiques.



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Kiloutre

  • Nolife, nerd et geek passionné d'Ordinatique ! ^^
  • *
  • Grand Banditisme
  • Messages: 567
    • Voir le profil
Re : Blabla du Pawn Center
« Réponse #127 le: 06 Juin 2013, 11:46:50 »
Je n'en vois pas trop l'utilité personnellement, mais bon :p

[/url]

Hors ligne Aegoss

  • I'm gonna kick dat' ass !
  • *
  • • « a3goss - иsɢ Lєadєʀ » •
  • Messages: 4787
    • Voir le profil
Re : Blabla du Pawn Center
« Réponse #128 le: 06 Juin 2013, 12:08:47 »
La fonction publique: http://www.fonction-publique.gouv.fr/

Ça fonctionne avec eux ?
HP Envy 15-K222NF - Argent
15,6'' Full HD - Intel Core i5-4200U - HDD 1 To - RAM 8 Go - NVIDIA GeForce GTX 850M 4 Go - LG E2251 - Logitech G105 - R.A.T 7 Contagion - Siberia V2 ''Orange''




Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Blabla du Pawn Center
« Réponse #129 le: 06 Juin 2013, 12:23:18 »
C'est très utile mais pas sur sa-mp :P

Et non Aegoss, c'est bien dommage :P



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Blabla du Pawn Center
« Réponse #130 le: 07 Juin 2013, 21:15:21 »
On appel ça des Hooks et effectivement, en dehors d'ici, c'est très utile.

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Blabla du Pawn Center
« Réponse #131 le: 08 Juin 2013, 00:37:28 »
Par exemple, ton client SA-MP est entièrement basé sur des Hooks de GTA SA.



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Xolokos

  • PAWN/XHTML/CSS/PHP/SQL/JS
  • *
  • Grand Banditisme
  • What are you waiting for ?
  • Messages: 681
    • Voir le profil
Re : Blabla du Pawn Center
« Réponse #132 le: 20 Juin 2013, 23:13:08 »
Java ou C# ?  :smile:
Je sais pas le quel apprendre en faite pendant les vacances je vais mit mettre.
Nippah !

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Blabla du Pawn Center
« Réponse #133 le: 20 Juin 2013, 23:51:05 »
Le java est un langage très utilisé, je te conseil plus le java que le C#



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne rafffel

  • *
  • Bandit
  • Messages: 493
    • Voir le profil
Re : Blabla du Pawn Center
« Réponse #134 le: 21 Juin 2013, 08:47:33 »
sachant que si tu pars sur le java tu pourra très facilement te tourner vers la programmation android après.