|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jul 2005
Messaggi: 86
|
[assembly] __asm (non funziona con GCC)
Ciao a tutti.. siccome ho problemi con il compilatore GCC qualcuno per favore può convertirmi questo codice? ho visto che usa un'altra sintassi (AT&T?!) ma io non saprei proprio come cambiarlo xkè non conosco l'assembly.
__asm { mov eax, addr call addr mov addr, eax } __asm { mov eax, addr push cbSize push pInputs push nInputs call addr mov addr, eax } grazie |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Sintassi AT&T? Vade retro!
Usa NASM, che ti permette di usare quella "tradizionale" (Intel / MASM / TASM et similia). ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Comunque dovrebbe essere così, se mi ricordo bene. __asm { movl addr, %eax call addr movl %eax, addr } __asm { movl addr, %eax pushl cbSize pushl pInputs pushl nInputs call addr movl %eax, addr } |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Quote:
gcc pippo.c -masm=intel Codice:
// pippo.c #include <stdio.h> #include <string.h> int main (void) { __asm ( "xor eax, eax\n" "mov ecx, 3\n" ); return 0; } |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Da lì puoi accedere solo a variabili globali; le variabili locali devono essere passare come "input" secondo l'usuale sintassi asm/gcc. Inoltre occorre specificare l'elenco dei registri "clobbered", se presenti.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
C'è anche questo modo, che non richiede -masm=intel:
Codice:
asm( " .intel_syntax noprefix \n" <blocco asm...> " .att_syntax \n" <blocco in/out e clobbered> );
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:40.