Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Can someone help me with this please? Using Assembly 32 - need a software that e

ID: 3842298 • Letter: C

Question

Can someone help me with this please?

Using Assembly 32 - need a software that encrypt and decrypt files. so it takes a file and encrypt it and vice versa,

- the encryption will be using Adobe type 1 font encryption algorithm (encryption method explained on pages 61 to 65 on the pdf file https://www-cdf.fnal.gov/offline/PostScript/T1_SPEC.PDF )

->Support wild cards in filenames

-> support password (hash pswd string into constant used by the algorithm)

the code and the program in general can not be copied from someone else it has to be different, created from scratch work. code should be commented too.

Explanation / Answer

Answer:

Assembly Language Code:

std::operator|(std::_Ios_Openmode, std::_Ios_Openmode):
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-4], edi
        mov     DWORD PTR [rbp-8], esi
        mov     eax, DWORD PTR [rbp-4]
        or      eax, DWORD PTR [rbp-8]
        pop     rbp
        ret
.LC0:
        .string "Enter file name (with extension like file.txt) to encrypt : "
.LC1:
        .string "Error in opening file..!!"
.LC2:
        .string " Press any key to exit..."
.LC3:
        .string "temp.txt"
.LC4:
        .string "Error in creating temp.txt file..!!"
.LC5:
        .string "Error in opening source file..!!"
.LC6:
        .string "Error in opening temp.txt file...!!"
.LC7:
        .string "File "
.LC8:
        .string " encrypted successfully..!!"
main:
        push    rbp
        mov     rbp, rsp
        push    rbx
        sub     rsp, 1112
        lea     rax, [rbp-592]
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::basic_fstream()
        lea     rax, [rbp-1120]
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::basic_fstream()
        mov     esi, OFFSET FLAT:.LC0
        mov     edi, OFFSET FLAT:std::cout
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        lea     rax, [rbp-48]
        mov     rdi, rax
        call    gets
        mov     esi, 16
        mov     edi, 8
        call    std::operator|(std::_Ios_Openmode, std::_Ios_Openmode)
        mov     edx, eax
        lea     rcx, [rbp-48]
        lea     rax, [rbp-592]
        mov     rsi, rcx
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode)
        lea     rax, [rbp-592]
        add     rax, 264
        mov     rdi, rax
        call    std::basic_ios<char, std::char_traits<char> >::operator!() const
        test    al, al
        je      .L4
        mov     esi, OFFSET FLAT:.LC1
        mov     edi, OFFSET FLAT:std::cout
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        mov     esi, OFFSET FLAT:.LC2
        mov     edi, OFFSET FLAT:std::cout
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        mov     edi, 1
        call    exit
.L4:
        mov     esi, 16
        mov     edi, 8
        call    std::operator|(std::_Ios_Openmode, std::_Ios_Openmode)
        mov     edx, eax
        lea     rax, [rbp-1120]
        mov     esi, OFFSET FLAT:.LC3
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode)
        lea     rax, [rbp-1120]
        add     rax, 264
        mov     rdi, rax
        call    std::basic_ios<char, std::char_traits<char> >::operator!() const
        test    al, al
        je      .L5
        mov     esi, OFFSET FLAT:.LC4
        mov     edi, OFFSET FLAT:std::cout
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        lea     rax, [rbp-592]
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::close()
        mov     esi, OFFSET FLAT:.LC2
        mov     edi, OFFSET FLAT:std::cout
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        mov     edi, 2
        call    exit
.L5:
        lea     rax, [rbp-592]
        add     rax, 264
        mov     rdi, rax
        call    std::basic_ios<char, std::char_traits<char> >::eof() const
        xor     eax, 1
        test    al, al
        je      .L6
        lea     rdx, [rbp-49]
        lea     rax, [rbp-592]
        mov     rsi, rdx
        mov     rdi, rax
        call    std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char&)
        movzx   eax, BYTE PTR [rbp-49]
        add     eax, 100
        mov     BYTE PTR [rbp-49], al
        movzx   eax, BYTE PTR [rbp-49]
        movsx   eax, al
        lea     rdx, [rbp-1120]
        add     rdx, 16
        mov     esi, eax
        mov     rdi, rdx
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)
        jmp     .L5
.L6:
        lea     rax, [rbp-592]
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::close()
        lea     rax, [rbp-1120]
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::close()
        mov     esi, 16
        mov     edi, 8
        call    std::operator|(std::_Ios_Openmode, std::_Ios_Openmode)
        mov     edx, eax
        lea     rcx, [rbp-48]
        lea     rax, [rbp-592]
        mov     rsi, rcx
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode)
        lea     rax, [rbp-592]
        add     rax, 264
        mov     rdi, rax
        call    std::basic_ios<char, std::char_traits<char> >::operator!() const
        test    al, al
        je      .L7
        mov     esi, OFFSET FLAT:.LC5
        mov     edi, OFFSET FLAT:std::cout
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        mov     esi, OFFSET FLAT:.LC2
        mov     edi, OFFSET FLAT:std::cout
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        mov     edi, 3
        call    exit
.L7:
        mov     esi, 16
        mov     edi, 8
        call    std::operator|(std::_Ios_Openmode, std::_Ios_Openmode)
        mov     edx, eax
        lea     rax, [rbp-1120]
        mov     esi, OFFSET FLAT:.LC3
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode)
        lea     rax, [rbp-1120]
        add     rax, 264
        mov     rdi, rax
        call    std::basic_ios<char, std::char_traits<char> >::operator!() const
        test    al, al
        je      .L8
        mov     esi, OFFSET FLAT:.LC6
        mov     edi, OFFSET FLAT:std::cout
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        lea     rax, [rbp-592]
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::close()
        mov     esi, OFFSET FLAT:.LC2
        mov     edi, OFFSET FLAT:std::cout
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        mov     edi, 4
        call    exit
.L8:
        lea     rax, [rbp-1120]
        add     rax, 264
        mov     rdi, rax
        call    std::basic_ios<char, std::char_traits<char> >::eof() const
        xor     eax, 1
        test    al, al
        je      .L9
        lea     rdx, [rbp-49]
        lea     rax, [rbp-1120]
        mov     rsi, rdx
        mov     rdi, rax
        call    std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char&)
        movzx   eax, BYTE PTR [rbp-49]
        movsx   eax, al
        lea     rdx, [rbp-592]
        add     rdx, 16
        mov     esi, eax
        mov     rdi, rdx
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)
        jmp     .L8
.L9:
        mov     esi, OFFSET FLAT:.LC7
        mov     edi, OFFSET FLAT:std::cout
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        mov     rdx, rax
        lea     rax, [rbp-48]
        mov     rsi, rax
        mov     rdi, rdx
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        mov     esi, OFFSET FLAT:.LC8
        mov     rdi, rax
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        mov     esi, OFFSET FLAT:.LC2
        mov     edi, OFFSET FLAT:std::cout
        call    std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
        lea     rax, [rbp-592]
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::close()
        lea     rax, [rbp-1120]
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::close()
        mov     ebx, 0
        lea     rax, [rbp-1120]
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::~basic_fstream()
        lea     rax, [rbp-592]
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::~basic_fstream()
        mov     eax, ebx
        jmp     .L15
        mov     rbx, rax
        lea     rax, [rbp-1120]
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::~basic_fstream()
        jmp     .L12
        mov     rbx, rax
.L12:
        lea     rax, [rbp-592]
        mov     rdi, rax
        call    std::basic_fstream<char, std::char_traits<char> >::~basic_fstream()
        mov     rax, rbx
        mov     rdi, rax
        call    _Unwind_Resume
.L15:
        add     rsp, 1112
        pop     rbx
        pop     rbp
        ret
__static_initialization_and_destruction_0(int, int):
        push    rbp
        mov     rbp, rsp
        sub     rsp, 16
        mov     DWORD PTR [rbp-4], edi
        mov     DWORD PTR [rbp-8], esi
        cmp     DWORD PTR [rbp-4], 1
        jne     .L18
        cmp     DWORD PTR [rbp-8], 65535
        jne     .L18
        mov     edi, OFFSET FLAT:std::__ioinit
        call    std::ios_base::Init::Init()
        mov     edx, OFFSET FLAT:__dso_handle
        mov     esi, OFFSET FLAT:std::__ioinit
        mov     edi, OFFSET FLAT:std::ios_base::Init::~Init()
        call    __cxa_atexit
.L18:
        nop
        leave
        ret
_GLOBAL__sub_I_main:
        push    rbp
        mov     rbp, rsp
        mov     esi, 65535
        mov     edi, 1
        call    __static_initialization_and_destruction_0(int, int)
        pop     rbp
        ret