Как залатать ассемблерный код до конца exe-файла - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь исправить код, написанный на сборке x86, до конца файла, заданного в качестве параметра.

Speci c в моем коде:

функция code_start выводит сообщение на стандартный вывод.

функция code_end цель - исправить код от code_start до конца имени файла, заданного в качестве параметра из программы C.

Мой вопрос:

Что я должен заполнить (где я поставил знаки вопроса) или изменить функцию code_end, чтобы она работала так, как я sh. Моя идея состояла в том, чтобы открыть файл с помощью системного вызова append, написать функцию code_start, закрыть файл.

важное примечание: без использования каких-либо импортированных функций, только с помощью системных вызовов

Фрагмент кода:

code_start:

    pushad
    mov eax,4   ;system call number (sys_write)            
    mov ebx,1   ;file descriptor (stdout)
    mov ecx, msg    ;message to write
    mov edx, len    ;message length   
    int 0x80    ;call kernel
    popad
    ret

code_end:
    push ebp             ; Save caller state
    mov ebp, esp
    sub esp, 4          ; Leave space for local var on stack
    pushad                  ; Save some more caller state

    mov eax,4   ;system call number (sys_write)          
    mov ebx, [ebp+8]    ; Copy function args to registers: leftmost -> fileName  
    mov ecx, 1024   ;system call number O_APPEND
    int 0x80    ;call kernel

    ;eax has the pointer to end of file

    mov ebx, eax ;move the file pointer to second argument
    mov eax, 4 ;move the code of SYS_WRITE 
    mov ecx, ?? ;from where to write 
    mov edx, ?? ;how much to write
    int 0x80    ;call kernel

    mov eax,6   ;system call number (SYS_CLOSE)          
    mov ebx, [ebp+8]    ; Copy function args to registers: leftmost -> fileName 
    int 0x80    ;call kernel

    popad
    add esp, 4
    pop     ebp ; Restore caller state
    ret

1 Ответ

0 голосов
/ 08 мая 2020

Прежде всего вместо: mov ecx 1024 это должно быть mov ecx, 1025, чтобы открыть его для записи и добавления. Второе вместо вопросительных знаков должно быть: mov ecx, code_start mov edx code_end sub edx, code_start

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...