[ASM -> C++] Wat wordt dit in C++?

Pagina: 1
Acties:

  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Hallo, ik heb een programma dat geschreven is in ASM, maar dat ik weer opnieuw wil schrijven, maar dan in C++. Nu heb ik alleen een probleem met een deel van de code. Ik zou niet weten hoe ik deze code om moet zetten naar C++.
code:
1
2
3
4
MOV ESI, DWORD PTR DS:[&String die de commmandline bevat]
MOV EDI, DWORD PTR SS:[ESI]
SHR EDI, 5
XOR EDI, <willekeurige waarde>

Wat het probleem is bij mij is dat de eerste 4 karakters (DWORD) neemt van de string die commandline karakters bevat, maar in de omgekeerde volgorde (eigenschap DWORD). Als de commandline dus BManblablablabla bevat dan zal EDI de hexadecimale waarden bevatten in deze volgorde: naMB (dus iets van 6E614D42) en hierop wordt de bewerking uitgevoerd. Het lukt me niet om de waarde van een string om te zetten in de een DWORD waarde die de bovenstaande waarde bevat. (Ook weet ik niet of het mogelijk is om die waarde te SHR'en, maar dat zal vast wel lukken)


Is het daarnaast trouwens ook mogelijk dat als je een stuk ASM code compileert, de waarde die dan in EDI staat terug te krijgen in je normale code en deze dan weet verder gebruiken? Want ik kan perfect de code uitvoeren als ik de bovenstaande code in ASM {} zet en de waarden zijn exact wat ze moeten zijn, maar daarna kan ik niets meer met de waarde in EDI, deze kan ik niet te pakken krijgen buiten de { }.

Tnx,
B-Man

P.S. Het kan zijn dat wat hierboven niet 100% klopt, ik schrijf deze code namelijk uit mijn hoofd hierop, de PC waar de gegevens opstaan heeft namelijk geen internet verbinding.

  • KnoppenSpook
  • Registratie: Augustus 2000
  • Laatst online: 04-09-2023
DWORD dw;
memcpy(&dw, inputstringptr,sizeof(DWORD));
Is dit misschien iets?
maar in de omgekeerde volgorde (eigenschap DWORD)
Is een eigenschap van de little endian structuur van de intel (compatible) proc...

[ Voor 52% gewijzigd door KnoppenSpook op 14-03-2003 09:39 ]

/me weet geen leuke quote voor in zijn signature


Verwijderd

Dit zou ongeveer hetzelfde zijn als ik het zo 1..2..3 goed lees:
C++:
1
2
3
4
5
// unsigned long heeft zelfde grote als dword,
// gebruik van SHR duidt op unsigned (SHR doet zero-extend):
unsigned long *tmp = (unsigned long *)&stringetje[0];   
*tmp >>= 5;
*tmp ^= random_value;


Overigens ondersteunen de meeste compilers inteligente inline assembly, waarbij je bijvoorbeeld dit kunt doen:
C++:
1
2
3
4
5
6
7
uint32_t tmp;
__asm__ {
   mov esi, &stringetje[0]
   mov edi, dword ptr [esi]

   mov tmp,edi
}

[ Voor 52% gewijzigd door Verwijderd op 17-03-2003 09:31 ]


  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Dank je voor jullie replies! Ik zal een proberen of deze methoden werken zodra ik weer op mijn kamer ben (waar ik dat programma heb waar dat in moet komen.
Overigens ondersteunen de meeste compilers inteligente inline assembly, waarbij je bijvoorbeeld dit kunt doen:

c++:
__asm__ {
mov esi, &stringetje[0]
mov edi, dword ptr [esi]
}
Jep dat werkt ook inderdaad perfect zie mijn bericht:
Want ik kan perfect de code uitvoeren als ik de bovenstaande code in ASM {} zet en de waarden zijn exact wat ze moeten zijn, maar daarna kan ik niets meer met de waarde in EDI, deze kan ik niet te pakken krijgen buiten de { }.
alleen het probleem is dus dat de aangepaste waarde prima werkt, maar dat ik niet weet hoet ik deze waarde zal moet terugkrijgen in mijn programma. Zodra het } haakje van het ASM commando er weer staat kan ik de waarde in EDI niet meer bereiken, enig idee hoe ik die dan weer te pakken kan krijgen?

Bedankt,
B-Man

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 30-07 16:33
PKP B-Man schreef op 15 March 2003 @ 16:12:
Zodra het } haakje van het ASM commando er weer staat kan ik de waarde in EDI niet meer bereiken, enig idee hoe ik die dan weer te pakken kan krijgen?
Meestal kan je iets doen zoals het volgende:
code:
1
2
3
4
5
int i;

__asm {
   mov i, edi
}

  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Ik heb het gisteravond eindelijk kunnen testen :)

En wat blijkt, jullie tips blijken inderdaad te werken! Bedankt voor jullie informatie! _/-\o_

Er zijn uiteraard nog voldoende andere moeilijkheden waarop je daarna stuit, maar dat hou je toch, die rammen we er ook wel uit! :7

Tnx,
B-Man
Pagina: 1