06
Июл
2022

ebx в стэковом фрейме

global  sys_read
global  sys_write
global  sys_errno

section .text
syscall_3:      push    ebp
                mov     ebp, esp
                **push    ebx**
                mov     ebx, [ebp+8]
                mov     ecx, [ebp+12]
                mov     edx, [ebp+16]
                int     80h
                mov     ebx, eax
                and     ebx, 0xfffff000
                cmp     ebx, 0xfffff000
                jnz     .okay
                mov     [sys_errno], eax
                mov     eax, -1
.okay:          **pop     ebx**
                mov     esp, ebp
                pop     ebp
                ret

sys_read:       mov     eax, 3
                jmp     syscall_3

sys_write:      mov     eax, 4
                jmp     syscall_3

section .bss
sys_errno       resd    1

Это реализации функций read и write для С, что бы не использовать стандартную библиотеку.

Вот хоть убейте, но я не могу понять зачем в стековом фрейме сохраняется значение из EBX (push ebx)???, там изначально 0 при первом вызове любой из функций, так же потом pop извлекает этот 0 в тот же ebx...

есть вызовы:

sys_read(0, х, size);
sys_write(1, x, size);

Без этих push ebx и pop ebx строка после ввода не распечатается. Попробуйте объяснить, пожалуйста.

Источник: https://ru.stackoverflow.com/questions/1427180/ebx-%D0%B2-%D1%81%D1%82%D1%8D%D0%BA%D0%BE%D0%B2%D0%BE%D0%BC-%D1%84%D1%80%D0%B5%D0%B9%D0%BC%D0%B5

Тебе может это понравится...

Добавить комментарий