Я пытаюсь исправить код, написанный на сборке 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