Функция печати строки сборки MASM x86

#function #assembly #masm

#функция #сборка #masm

Вопрос:

(Я относительно новичок в языке ассемблера, поэтому это может быть действительно очевидный вопрос, извините)

Я пытаюсь написать функцию в сборке x86 (Visual Studio, MASM, Windows 10), которую я могу вызвать из C, которая принимает символ * и печатает его.

Пока у меня есть этот код для функции:

 _scuffed_printf PROC

    push ebp
    mov ebp, esp

    <???>

    pop ebp
    ret

_scuffed_printf ENDP
  

Есть ли какой-либо способ добиться этого без использования функций Windows API, таких как MessageBox?

Комментарии:

1. Вы ссылаетесь на библиотеку C? Вы можете передать строку в fputs(string_arg, stdout) , или в printf("%s", string_arg) . (Небезопасно просто jmp printf выполнять завершающий вызов, потому что строка может содержать % символы. Но если вы не возражаете против добавления новой строки, вы можете заменить всю свою функцию на jmp puts )

2. Да, я связываюсь с библиотекой C, на самом деле я хочу написать совершенно новую функцию исключительно в сборке, которая не зависит от каких-либо других существующих функций, таких как printf или puts. Возможно ли это в Windows?

3. Да, конечно, вы можете вызывать собственные функции Windows, экспортируемые библиотеками DLL Windows, например WriteFile, для выполнения ввода-вывода в стандартном режиме. (В Windows нет документированного / стабильного syscall интерфейса для вызова непосредственно в ядро, как вы можете в Linux. Конечно, вы можете использовать необработанные системные вызовы в Windows, поскольку люди перепроектировали библиотеки DLL, но номера вызовов могут различаться в разных версиях ядра Windows)