hi, here is the program i have so far. i need to implement an stdcall/cdecl subroutine call convention. could someone please show me how to do this, im really confused.
#include <conio.h> // for kbhit
#include <iostream> // for cin >> and cout <<
#include <iomanip> // for fancy output
using namespace std;
#define MAXCHARS 6 // feel free to alter this, but 6 is the minimum
#define dollarchar '$' // string terminator
char OChars[MAXCHARS],
EChars[MAXCHARS],
DChars[MAXCHARS] = "Soon!"; // Global Original, Encrypted, Decrypted character strings
//----------------------------- C++ Functions ----------------------------------------------------------
for (int i = 0; i < length; i++) // encrypt characters one at a time
{
temp_char = OChars[i]; //
__asm { //
push eax // save register values on stack to be safe
push ecx //
//
movzx ecx, temp_char // set up registers (Nb this isn't StdCall or Cdecl)
lea eax, EKey //
call encrypt3 // encrypt the character
mov temp_char, al //
//
pop ecx // restore original register values from stack
pop eax //
}
EChars[i] = temp_char; // Store encrypted char in the encrypted chars array
}
return;
// Encrypt subroutine. You should paste in the encryption routine you've been allocated from Bb and
// overwrite this initial, simple, version. Ensure you change the ‘call’ above to use the
// correct 'encryptnn' label where nn is your encryption routine number.
// Inputs: register EAX = 32-bit address of Ekey,
// ECX = the character to be encrypted (in the low 8-bit field, CL).
// Output: register EAX = the encrypted value of the source character (in the low 8-bit field, AL).
__asm {
encrypt3: push edx //push
push ecx //back the character to be encrypted up onto the stack
push eax //back the character to be encrypted up onto the stack
movzx eax, byte ptr[eax] //copy the character with zero extend onto the stack
rol al, 1 //rotate left
rol al, 1 //rotate left
rol al, 1 //rotate left
mov edx, eax //move
pop eax //pop from stack memory
mov byte ptr[eax], dl //move
pop ecx //pop from stack memory
xor ecx, edx //bitwise exclusive OR
mov eax, ecx //move/copy
ror al, 1 //rotate right
ror al, 1 //rotate right
ror al, 1 //rotate right
pop edx //pop from stack memory
ret //return form subroutine
//--- End of Assembly code
}
// end of encrypt_chars function
//---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------
//----------------- DECRYPTION ROUTINES -------------------------------------------------------------------------
//
void decrypt_chars(int length, char EKey);
{
/*** to be written by you ***/
return;
}
// end of decrypt_chars function
//---------------------------------------------------------------------------------------------------------------
int main(void)
{
int char_count; // The number of actual characters entered (upto MAXCHARS limit).
char EKey; // Encryption key.
cout << "\nPlease enter your Encryption Key (EKey) letter: "; get_char(EKey);