|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
[VC6] domanda scema su __asm
come faccio a inserire dei bytes arbitrari in un blocco __asm in VC6? in altre parole, come faccio ad usare la pseudoistruzione DB? thx
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
questo vale come per le dll sono routine indipendenti. dichiare la variabile in c int a int b ecc,ecc poi vai a leggere gli indirizzi in asm (stai attento che) __asm { xor eax,eax xor edx,edx mov edx, 201h ... } push si xor ax,ax /* joystick port */ mov dx,201h |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
questo vale come per le dll sono routine indipendenti. dichiare la variabile in c int a=10; int b= 20; ecc,ecc poi vai a leggere gli indirizzi tramite asm di a e b e poi ci fai le operazioni //indirizzi o interrupts conosciuti hardware ecc,ecc __asm { xor eax,eax xor edx,edx mov edx, 201h //indirizzo porta joy ... fai } ciao |
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
... eeeehmmmmmmm... ssssssi...
![]() e in che modo tutto questo mi permette di inserire bytes arbitrari in un blocco __asm di Visual C++ 6, analogamente a come faccio in NASM con la pseudoistruzione DB? ![]() PS: questa cosa non è per le DLL, è un altro progetto; in questo periodo mi dedico a due cose: l'affarone delle DLL e uno spyware; il blocco __asm mi serve nello spyware... |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
ciao |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
i bytes arbitrari non li puoi inserire a meno che non crei (leggi bene) una dll c++ richiamata dall'exe c++ nella quale dll dichiari: int a=20; int b=30; ...e poi nella dll vai a leggere gli indirizzi in asm (stai attento che) __asm { xor eax,eax xor edx,edx mov edx, 201h // indirrizzo porta joy ... fai xor eax,eax xor eax, 123h //indirizzo di b add eax, 123h } nel blocco non puoi dichiarare variabili asm devi leggere i suoi indirizzi dichiarati dal c++ (il blocco è il c++)......... se vuoi dichiare variabili arbitrarie DB devi lavorare in asm (senza richiamare nulla) bravo magari con nasm. viceversa per chiarirti le idee: stessa cosa se fai un prg in asm proprio con nasm dichiari var con DB in un blocco o quanti segmenti vuoi e poi richiami da nasm una libreria c++ nella funzione in c/c++ puoi leggere l'indirizzo della var DB dichiarata da nasm e sommare il tutto nella funzione c ecco questo lo puoi fare e fare quello che vuoi (tecnica dei puntatori) se tu vuoi fare questo: __asm { DW "ciao amico",13,12 xor eax,eax xor edx,edx mov edx, 201h // indirrizzo porta joy ... fai } cambia mestiere e vai a fare l'apicoltore ciao p.s. è tutto un sistema di pale leve e carrucole.......... |
|
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
scusa eh, ma adesso mi sono alquanto seccato: leggere i tuoi post è diventato inutile (sono degenerazioni assurde e pressoché incomprensibili e i tuoi errori ortografici/grammaticali di certo non aiutano, e te lo dico ben sapendo che evidenziare errori altrui è contro la netiquette), e ultimamente persino un po' (un po' molto) offensivo: "cambia mestiere e vai a fare l'apicoltore"? ma per piacere...
alla mia domanda non hai risposto: hai blaterato un sacco di assurdità (per essere precisi: ho trovato pochissime frasi sensate nel tuo ultimo post, e tutte non inerenti) e non mi hai detto come fare per inserire i miei poveri innocenti bytes arbitrari nel mio povero innocente blocco __asm (forse mi hai detto che non si può fare, ma non sono sicuro di aver capito bene in mezzo a quel degenerato macello grammaticale). scusa se non mi soffermo a spiegarti esattamente come mai ho la necessità di inserire dei bytes arbitrari nel mio codice, ma lo farei volentieri se non fosse che sto per plonkarti. *PLONK* |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
ma per te è assurdo capire che non puoi inserire innocenti bytes arbitrari nel tuo povero innocente blocco __asm.
ti spiego una cosa: __asm { ...... questà è una funzione blocco asm u can't put bytes here!!!! } questa funzione sopra è chiamata dal c (o volendo da qualche altro linguaggio [vb, c ecc, chiaramente con intestazione di blocco differente]) i tuoi bytes arbitrari li devi dichiarare in c e poi nel blocco __asm li puoi manipolare........ una cosa che puoi fare è questa: __asm { push eax, 123h pop eax ........but secondo te che senso ha fare questo? } i hope u understand me bye bye PLONK Ultima modifica di okay : 20-08-2005 alle 22:22. |
|
|
|
|
|
#9 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
DB non serve a dichiarare variabili, serve a "definire bytes", cioè fa esattamente quello che dovrei fare io; e comunque anche se il VC non mi permettesse di accedere a variabili dichiarate fuori potrei sempre accedervi con l'apposito indirizzo, ammesso di conoscerlo (ad es. [EBP+N] per quelle locali). |
|
|
|
|
|
|
#10 | ||
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
sei confuso DB (definire bytes) è come dire dichiarare (definire) variabili in c o altri linguaggi alti. Quando si lavora con i linguaggi di alto livello, si ha l'impressione che i relativi compilatori ed interpreti siano in grado di distinguere tra diversi tipi di dati in c dichiari (definisci) variabili così: signed char c1 = 32; signed short int i1 = -1280; unsigned short int i2 = 39800; unsigned short int vi[10]; float f1 = 3.14; char vstr[] = "Stringa alfanumerica"; Nel momento in cui il codice sorgente viene tradotto in codice macchina, questa distinzione scompare infatti, la CPU è in grado di maneggiare esclusivamente numeri binari, e non ha la più pallida idea di cosa sia un numero reale, una stringa, una lettera dell'alfabeto, etc. In relazione alla fase di definizione di un qualsiasi dato statico, la CPU ha bisogno di conoscere tre informazioni fondamentali che sono: * l'offset * l'ampiezza in bit * il contenuto iniziale in asm Variabile1 DW 2F8Dh Quando l'assembler incontra questa linea all'interno di segmento, capisce che in quel preciso punto, cioè in quel preciso offset interno al segmento, deve riservare uno spazio pari a 16 bit da riempire con il valore iniziale 2F8Dh. Nel momento in cui il programma viene caricato in memoria, in corrispondenza dell'offset interno a segmento, individuato dal nome Variabile1, sarà presente una locazione da 16 bit contenente il valore iniziale 2F8Dh; questa locazione potrà quindi essere utilizzata nelle istruzioni, come operando di tipo Mem. we can write anche: PesoNetto DW (2 + 181) - 4 + (6 * (10 / 5)) L'importante è che l'espressione inizializzante sia formata esclusivamente da valori immediati; questa espressione, infatti, deve essere risolta dall'assembler in fase di assemblaggio del programma. Se non vogliamo specificare (DEFINIRE oppure DICHIARARE un valore iniziale, possiamo scrivere: Variabile1 DW ? tutti i dati statici sono così definiti Quote:
l'indirizzo se c'è l'hai definito dichiarato oppure specificato lo conosci sempre Ultima modifica di okay : 21-08-2005 alle 00:12. |
||
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Dec 2001
Messaggi: 356
|
Quote:
Codice:
__asm __emit 0fh __asm __emit 031h Se ho capito quello che intendevi. Bye! |
|
|
|
|
|
|
#12 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
grazie mille per l'informazione, non conoscevo __emit Quote:
Codice:
EB01: JMP $+1 E8: DB E8h xxxx: xxxx questo è quello che ho scritto: Codice:
__asm {
__emit 0xEB
__emit 0x01
__emit 0xE8
}
ciao |
||
|
|
|
|
|
#13 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
71104....io non so ne ho la minima idea di cosa tu parli
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#15 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
</ot>
Ultima modifica di 71104 : 22-08-2005 alle 14:20. |
|
|
|
|
|
|
#16 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ignorando temporaneamente il plonk, vorrei chiedere un'ultima cosa a okay: secondo te a che serve __emit nel Visual C++ visto che secondo te i bytes arbitrari nel codice assembly non ce li posso mettere?
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Dec 2001
Messaggi: 356
|
Quote:
Bye! |
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
Proprio oggi pomeriggio stavo congetturando su questo 3d e ho pensato che è una cosa che non sapevo e cmq ho interpretato male (probabilmente anzi ne sono sicuro) perchè posti le domande che a leggerti sembra scontato una cosa appunto banale. Probabilmente questa banalità mi ha fatto rispondere frettolosamente (anche forse per altri tuoi 3d simili, nel senso che non tutti in questo forum capiscono al volo, nel senso che i tuoi 3d invece sono argomenti quasi futuri)... spero di essermi spiegato. Un'altra cosa è che ho pensato........ accidenti se fà e capisce di queste cose ammazza è proprio forte. in definitiva sei forte ed è una cosa che non pensavo si potesse fare. Tanti anni fà mi hanno detto che col computer si può fare di tutto e oggi confermo che è vero. che dire ...... sei forte cmq bravo anche Mark0 p.s. tx per l'attenzione ora posso tenere il mio nick ciao Ultima modifica di okay : 22-08-2005 alle 23:06. |
|
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
ho studiato asm con tasm 5.0 lavorando sempre a 16bit in modo dos. Non ho mai adoperato i blocchi asm nel vc6 ovvero ci ho provato ma mi crashava la finestra probabilmente il sistema di win98SE che ho io è a 32 bit mentre il compilatore vc6 lavora a 32 bit e mettendo i blocchi __asm con istruzioni ex mi crashava sempre la finestra dos a blocchi asm__ con eax non l'ho provato. quello che facevo era un blocco asm__ per entrare in modo video le solite 2 righe di codice asm partiva in fullscreen poi mi crashava con schermata blu. domanda: tu invece con vc6 riesce ad immettere e lavorare con blocchi asm__ sia con registri a 16 bit che eax a 32bit? ciao |
|
|
|
|
|
|
#20 | ||
|
Senior Member
Iscritto dal: Dec 2001
Messaggi: 356
|
Quote:
Quote:
Però di sicuro si possono mescolare istruzioni tipo: Codice:
MOV CX, MyInt16var ADD ECX, ECX MOV AX, [ECX] |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:45.












</ot>








