BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 31 déc. 2007 à 14:20
push al
alors que je venais d'écrire plus haut:
Sur system 32 bits, l'adressage se fait par 4 octets donc
push QuatreOctets !!!
Rudy3212
Messages postés154Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention31 décembre 2007 31 déc. 2007 à 14:01
Si je fait un
mov al, PokeNb
et après un
push al
J'ai une erreur "byte register cannot be first operand"
Je vait allez lire quelque tuto, car bon je galère un peu.
J'ai pas compris ce que ta dit au dessus.
pk wParam vaut ptr[esp+12]
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 31 déc. 2007 à 13:47
dword ptr[esp+12]
lecture ou écriture DWORD à l'adresse indiquée, ici [esp+12]
on ne lit ou écrit qu'à des adresses correctement alignées:
BYTE no prob
WORD 2
DWORD 4
xmm 8 ou 16 selon taille adressée
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 31 déc. 2007 à 13:36
push offset xxx
met l'ADRESSE indiquée sur la stack
bien entendu on met l'adresse sur stack quand la fonction appelée attend une adresse, rien que du normal.
Sur system 32 bits, l'adressage se fait par 4 octets donc
push QuatreOctets
PokeNb db 6
xor eax, eax
mov al, PokeNb
ou alors: movzx eax, PokeNb
ou alors... tant de possibilités.
et puis: push eax
Rudy3212
Messages postés154Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention31 décembre 2007 31 déc. 2007 à 13:17
Peut tu détailler ce que veut dire dword ptr[esp+12] ?
J'ai un autre problème
si je fait un
Push 6
sa marche mais si je met
PokeNb db 6
dans les data et que je met
push offset PokeNb
Je n'ai pas d'erreur mais sa ne marche pas et push PokeNb marche pas non plus sa compile pas.
Pourrai tu m'expliquer quand il faut mettre offset ou pas j'ai pas car je sais jamais.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 31 déc. 2007 à 01:37
Lache toutes ces macros, .if .else et autres biniouteries et écris du vrai asm en gérant toi meme la stack.
EBX est à restaurer, tout comme ESI, EDI et EBP en sortie de bloc (fonction) sous Windows.
.if wParam == IDC_PATCH
en ASM:
cmp dword ptr[esp+12], IDC_PATCH
je LABEL
etc...
Il ne faut surtout pas voir l'ASM comme un snobisme ou une caste dont on peut faire partie. Quand on le fait c'est dans le but d'obtenir mieux que ce qu'un compilo C produirait sinon totalement inutile et donc nuisible. Je t'assure que dans ton exemple VC++ fera très nettement mieux pour un effort développeur nettement moindre.
Rudy3212
Messages postés154Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention31 décembre 2007 31 déc. 2007 à 00:23
Voila j'ai modif un peu, une fois j'avait essayer d'utiliser directement eax dans un autre invoke sa planter j'avait du me gourrer, je croyait que c'était alors pas possible donc je stocker.
Par contre pour le PID j'y arrive pas sa plante.
Merci pour tes conseils brunews si tu a d'autres truc a dire :)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 30 déc. 2007 à 20:08
Tu as commencé ce SABIR il y a 2 jours, pas avec ça que tu sauras écrire un asm optimisé, c'est pourtant le seul but à avoir quand on écrit en asm.
mov pHandle, eax
et derrière tu iras combien de fois reprendre ce handle sur une adresse mémoire...
Il y a des registres à employer !!!
31 déc. 2007 à 14:20
alors que je venais d'écrire plus haut:
Sur system 32 bits, l'adressage se fait par 4 octets donc
push QuatreOctets !!!
31 déc. 2007 à 14:01
mov al, PokeNb
et après un
push al
J'ai une erreur "byte register cannot be first operand"
Je vait allez lire quelque tuto, car bon je galère un peu.
J'ai pas compris ce que ta dit au dessus.
pk wParam vaut ptr[esp+12]
31 déc. 2007 à 13:47
lecture ou écriture DWORD à l'adresse indiquée, ici [esp+12]
on ne lit ou écrit qu'à des adresses correctement alignées:
BYTE no prob
WORD 2
DWORD 4
xmm 8 ou 16 selon taille adressée
31 déc. 2007 à 13:36
met l'ADRESSE indiquée sur la stack
bien entendu on met l'adresse sur stack quand la fonction appelée attend une adresse, rien que du normal.
Sur system 32 bits, l'adressage se fait par 4 octets donc
push QuatreOctets
PokeNb db 6
xor eax, eax
mov al, PokeNb
ou alors: movzx eax, PokeNb
ou alors... tant de possibilités.
et puis: push eax
31 déc. 2007 à 13:17
J'ai un autre problème
si je fait un
Push 6
sa marche mais si je met
PokeNb db 6
dans les data et que je met
push offset PokeNb
Je n'ai pas d'erreur mais sa ne marche pas et push PokeNb marche pas non plus sa compile pas.
Pourrai tu m'expliquer quand il faut mettre offset ou pas j'ai pas car je sais jamais.
31 déc. 2007 à 01:37
EBX est à restaurer, tout comme ESI, EDI et EBP en sortie de bloc (fonction) sous Windows.
.if wParam == IDC_PATCH
en ASM:
cmp dword ptr[esp+12], IDC_PATCH
je LABEL
etc...
Il ne faut surtout pas voir l'ASM comme un snobisme ou une caste dont on peut faire partie. Quand on le fait c'est dans le but d'obtenir mieux que ce qu'un compilo C produirait sinon totalement inutile et donc nuisible. Je t'assure que dans ton exemple VC++ fera très nettement mieux pour un effort développeur nettement moindre.
31 déc. 2007 à 00:23
Par contre pour le PID j'y arrive pas sa plante.
Merci pour tes conseils brunews si tu a d'autres truc a dire :)
30 déc. 2007 à 20:08
mov pHandle, eax
et derrière tu iras combien de fois reprendre ce handle sur une adresse mémoire...
Il y a des registres à employer !!!