#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)