PDA

View Full Version : [VC6] domanda scema su __asm


71104
20-08-2005, 18:15
come faccio a inserire dei bytes arbitrari in un blocco __asm in VC6? in altre parole, come faccio ad usare la pseudoistruzione DB? thx

okay
20-08-2005, 19:13
come faccio a inserire dei bytes arbitrari in un blocco __asm in VC6? in altre parole, come faccio ad usare la pseudoistruzione DB? thx

Una cosa è certa che le dll come volevi fare ti hanno bruciato il cervello!!!
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

okay
20-08-2005, 19:15
come faccio a inserire dei bytes arbitrari in un blocco __asm in VC6? in altre parole, come faccio ad usare la pseudoistruzione DB? thx

Una cosa è certa che le dll come volevi fare ti hanno bruciato il cervello!!!
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

71104
20-08-2005, 19:36
... eeeehmmmmmmm... ssssssi... :fagiano:
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? :fagiano:

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...

VICIUS
20-08-2005, 19:52
... eeeehmmmmmmm... ssssssi... :fagiano:
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? :fagiano:

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...
Non ti fa usare variabili dichiarate fuori dal blocco __asm ?

ciao ;)

okay
20-08-2005, 20:00
... eeeehmmmmmmm... ssssssi... :fagiano:
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? :fagiano:

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...



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..........

71104
20-08-2005, 20:19
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*

okay
20-08-2005, 21:05
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

71104
20-08-2005, 22:37
Non ti fa usare variabili dichiarate fuori dal blocco __asm ? si, me le fa usare, ma non c'entra nulla: io devo semplicemente fare in modo che a un certo punto nel mio codice ci stiano quei bytes, che non posso rappresentare con nessuna istruzione assembly: mi serve per forza DB.
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).

okay
20-08-2005, 23:09
DB non serve a dichiarare variabili, serve a "definire bytes", cioè fa esattamente quello che dovrei fare io

Define Byte DB 8 0 255


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


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).


....bravo adesso sei okay
l'indirizzo se c'è l'hai definito dichiarato oppure specificato lo conosci sempre

Mark0
20-08-2005, 23:11
come faccio a inserire dei bytes arbitrari in un blocco __asm in VC6? in altre parole, come faccio ad usare la pseudoistruzione DB? thx
Questo lo puoi mettere senz'altro in un blocco __asm {}

__asm __emit 0fh __asm __emit 031h

Per fare un RDTSC, ad esempio.
Se ho capito quello che intendevi.

Bye!

71104
21-08-2005, 17:55
Questo lo puoi mettere senz'altro in un blocco __asm {}

__asm __emit 0fh __asm __emit 031h
grande!! finalmente quello che cercavo!! ;)
grazie mille per l'informazione, non conoscevo __emit :)

Per fare un RDTSC, ad esempio.
Se ho capito quello che intendevi. in realtà no; quello che intendevo fare era scrivere codice fasullo che venisse saltato da un JMP short incondizionato; mi serve per ingannare i disassemblatori offuscando il codice:

EB01: JMP $+1
E8: DB E8h
xxxx: xxxx

generalmente un disassemblatore dopo aver letto il JMP leggerà un CALL, che però non esiste; leggendo il CALL però disallinea tutto il codice e non riesce a leggere più nulla ;)
questo è quello che ho scritto:

__asm {
__emit 0xEB
__emit 0x01
__emit 0xE8
}

e funziona alla grande :D

ciao

71104
21-08-2005, 17:58
e funziona alla grande :D LOL, oltrettutto per un caso il codice della funzione che voglio offuscare mi si riallinea proprio al punto giusto! :D :D :D

RaouL_BennetH
22-08-2005, 00:57
71104....io non so ne ho la minima idea di cosa tu parli :D ma di una cosa sono sicuro! voglio il tuo numero di cellulare,mi dici il prezzo delle lezioni e corro a Roma dove tu mi farai da insegnante nel campo della programmazione!! XD!!

71104
22-08-2005, 13:18
71104....io non so ne ho la minima idea di cosa tu parli :D ma di una cosa sono sicuro! voglio il tuo numero di cellulare,mi dici il prezzo delle lezioni e corro a Roma dove tu mi farai da insegnante nel campo della programmazione!! XD!! <ot>credo di essere l'unica forma vivente della Terra a non avere il cellulare... mi rifiuto di averlo, è l'immagine del vizio, rappresenta un consumismo sfacciato. non lo dico tanto per rispetto nei confronti dei paesi poveri (dei quali non me importa un fico secco, senza contare che privarsi del cellulare per rispetto dei negretti secchi col pancione avrebbe poco senso), lo dico perché noi italiani siamo un popolo di benemeriti... indovina un po' cosa? siamo estremamente viziati e grandi consumatori; i ragazzi d'oggi hanno quei cessi di macchinette di bassa cilindrata già a 14 anni... mi vien da vomitare quando penso a queste cose (e anche quando vedo una di quelle schifosissime macchinette) :Puke:</ot>

71104
22-08-2005, 13:32
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?

Mark0
22-08-2005, 14:09
in realtà no; quello che intendevo fare era scrivere codice fasullo che venisse saltato da un JMP short incondizionato; mi serve per ingannare i disassemblatori offuscando il codice:
Ah, OK, ottimo. Avevo citato l'esempio dell'RDTSC solo perchè un uso comune di __emit è quello di "forzare" alcuni opcode non supportati dal compilatore / assemblatore. Ma naturalmente va bene per qualsiasi altra cosa venga in mente! :)

Bye!

okay
22-08-2005, 22:02
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?

meno male che hai postato nei miei riguardi, pensa che, stavo aspettando che ti rivolgessi proprio a me in quanto avevo intenzione di cambiare nick e riscrivermi.

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

okay
22-08-2005, 22:16
Ah, OK, ottimo. Avevo citato l'esempio dell'RDTSC solo perchè un uso comune di __emit è quello di "forzare" alcuni opcode non supportati dal compilatore / assemblatore. Ma naturalmente va bene per qualsiasi altra cosa venga in mente! :)

Bye!

ma tu usi vc6 o vs net dove si può sempre lavorare con c++.

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

Mark0
23-08-2005, 00:38
ma tu usi vc6 o vs net dove si può sempre lavorare con c++.
Veramente non uso abitualmente nessuno dei due, ma è un altro discorso! :)

[...]
domanda: tu invece con vc6 riesce ad immettere e lavorare con blocchi asm__ sia con registri a 16 bit che eax a 32bit?
Non sono sicuro di aver capito cosa intendi - è tardi e tra un po' comincerò ad avere sonno! :D
Però di sicuro si possono mescolare istruzioni tipo:
MOV CX, MyInt16var
ADD ECX, ECX
MOV AX, [ECX]
Bye!

cdimauro
23-08-2005, 09:09
Tanti anni fà mi hanno detto che col computer si può fare di tutto e oggi confermo che è vero.
Dopo che avrai studiato un po' di teoria della computabilità cambierai idea... :asd:

Comunque la prossima volta invece di sparare in quarta offendendo a destra e a manca sta un po' più calmo...

okay
23-08-2005, 12:51
Dopo che avrai studiato un po' di teoria della computabilità cambierai idea... :asd:

Comunque la prossima volta invece di sparare in quarta offendendo a destra e a manca sta un po' più calmo...


e tu cosa centri [tu dovresti farti i fatti tuoi e basta] nessuno ti ha chiamato in causa
il tuo comportamento è proprio da ibrido ne maschio ne femmina.

la cosa è personale tra okay e 71104. tu cosa centri?
non centri proprio un ca**o

71104
23-08-2005, 20:46
Comunque la prossima volta invece di sparare in quarta offendendo a destra e a manca sta un po' più calmo...
e tu cosa centri [tu dovresti farti i fatti tuoi e basta] nessuno ti ha chiamato in causa
il tuo comportamento è proprio da ibrido ne maschio ne femmina.

la cosa è personale tra okay e 71104. tu cosa centri?
non centri proprio un ca**o
- Valentino, come fa la tua moto?
- GGNNNEAUNNNNNNNN...

cdimauro
24-08-2005, 08:54
e tu cosa centri [tu dovresti farti i fatti tuoi e basta] nessuno ti ha chiamato in causa
il tuo comportamento è proprio da ibrido ne maschio ne femmina.

la cosa è personale tra okay e 71104. tu cosa centri?
non centri proprio un ca**o
1) Questo è un forum libero e tu non sei proprio nessuno per dirmi se scrivere o no (tra l'altro ti avevo quotato una cosa che hai scritto, e che risulta palesemente falsa);
2) è dall'inizio di questo thread che non fai che offendere le persone che scrivono, e che hanno anche soltanto chiesto aiuto;
3) hai dimostrato una saccenza che si è poi rivelata fondata su basi completamente errate (e non hai avuto neppure la faccia o il coraggio di scusarti);
4) il fatto di scrivere "ibrido maschio / femmina" o di nascondere le parolacce con gli asterischi non toglie nulla alle tue evidentissime offese;
5) l'uso di questi mezzucci per nascondere le offese si commenta da sé;
6) segnalato al moderatore.

cionci
24-08-2005, 10:00
Su diamoci una calmata...