Я сделал программу под названием embed
Исходный код ниже.
Проблема: Я не знаю, почему эта программа работает бесконечно.
Моя среда разработки: linux, emacs, Assembly, x86, at & t синтаксис
#usage : embed input output message
#this program embed message to input's text and make an output file
#example1:
#input: "abcde"
#message: dc
#output: "abcDe"
#example2:
#input: "abcde"
#message: bcd
#output: "aBCDe"
.section .data
.section .bss
.lcomm buff,1
.section .text
.global _start
_start:
initialize:
movl %esp,%ebp
movl $0,%edi
subl $8,%esp #cleared at the exit_program
open_r:
movl $5,%eax
movl 8(%ebp),%ebx
movl $0,%ecx
movl $0666,%edx
int $0x80
save_rfd: #save to -4(%ebp)
movl %eax,-4(%ebp)
open_w:
movl $5,%eax
movl 12(%ebp),%ebx
movl $03101,%ecx
movl $0666,%edx
int $0x80
save_wfd: #save to -8(%ebp)
movl %eax,-8(%ebp)
loop:
rfd_read:
movl $3,%eax
movl -4(%ebp),%ebx
movl buff,%ecx
movl $1,%edx
int $0x80
check_EOF:
cmpl $0,%eax
je exit_program
call_func:
pushl 16(%ebp) #16(%ebp) is message
call checkNconvert #this will change buffer
wfd_write:
movl $4,%eax
movl -8(%ebp),%ebx
movl buff,%ecx
movl $1,%edx
int $0x80
jump_loop:
jmp loop
exit_program:
addl $8,%esp
movl $1,%eax
movl $0,%ebx
int $0x80
checkNconvert:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%ebx #8(%ebp) is message that passed over
movb (%ebx,%edi,1),%bl #message's edi'th character to %bl
cmpb buff,%bl #compare
jne end_checkNconvert
.equ n, 'a' - 'A' #n is just number should be used as $n
subb $n,buff
incl %edi
end_checkNconvert:
movl %ebp,%esp
popl %ebp
ret